質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
YouTube API

YouTube APIはYouTubeのビデオコンテンツと機能性をウェブサイト、アプリケーション、デバイスに統合することを可能にします。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

0回答

935閲覧

iPhoneのSafariブラウザでのみ、Youtube APIのplayVideo()で動画再生されないことがある

lyzmfeqpxs54

総合スコア237

YouTube API

YouTube APIはYouTubeのビデオコンテンツと機能性をウェブサイト、アプリケーション、デバイスに統合することを可能にします。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/04/16 07:00

編集2020/07/28 08:04

いつもお世話になっております。
現在RailsでWebページを作成しております。

Userがyoutubeの動画IDを登録しており、そのページではそれぞれのユーザーの動画を一覧表示してるような流れです。

複数のyoutubeの埋め込みだと表示が重くなるため、IDからサムネイルを取得し、youtube動画の再生ボタンに似せた画像を用意し、その画像がクリックされたら、youtubeAPIを用いてyoutube動画のiframeを呼び出し再生するという形をとっています。

youtubeAPIのコールバック関数「onPlayerReady」(動画が再生準備ができたら呼ばれる)内で
event.target.playVideo();
という再生メソッドを呼んでいるのですが、iPhoneのSafariブラウザでのみ再生されないことがあります。

youtube動画には置き換わるので、もう一度再生ボタンを押せば、動画は再生されます。
流れとしては一瞬再生するような動き(バッファ中のグルグルが一瞬見える)はあるのですが、すぐ一度も再生されていない状態(youtubeの矢印とサムネイル画像状態)になってしまいます。

PCのChromeやMacのSafariでは同様の症状は起こりません。
iphone safariの実機でデバッグしてみたのですが、特にエラーなどは出ていない状況です。

ググっても分からずこちらに質問させていただきました。
参考になるサイトでも構いませんので、適切な方法をご教示いただけますと幸いです。
よろしくお願いいたします。

ruby

1 2#show.html 3<% @users.each do |user| %> 4<ul class="content"> 5 <div class="movie_inner"> 6 <img src="https://i.ytimg.com/vi/<%= user.youtube_id %>/maxresdefault.jpg" alt="" data-video="YouTube ID" width="560" height="315" class="thumb" id="thumb_<%= user.id %>"> 7 <%= image_tag 'youtube_play_btn.png', class: "play_img", id: "thumb_ytimg_#{user.id}" %> 8 <div id="player_<%= user.id %>" class="player"></div> 9 </div> 10</ul> 11<% end %> 12 13<script> 14 //Play 15 function onPlayerReady(event) { 16 // 再生 17 event.target.playVideo(); 18 19 let player_id_num = event.target.getIframe().id 20 let view_id = player_id_num.replace(/[^0-9]/g, ''); 21 $.ajax({ 22 url: "/view_check", 23 type: "POST", 24 data: { id: view_id, 25 user_id: user_id 26 }, 27 dataType: "html", 28 beforeSend: function(xhr) { 29 // sessionの引き継ぎ 30 xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content')); 31 }, 32 success: function(json) { 33 // ajax通信結果による処理 34 }, 35 error: function() { 36 alert('動画再生エラー') 37 } 38 }); 39 } 40 // $('.thumb').click(function() { 41 $(document).on('click',".play_img", function() { 42 //Youtube埋め込み 43 let data = this.id; 44 let data_id = data.replace(/[^0-9]/g, ''); 45 let plaer_name = "player_" + data_id 46 // let src_arry = this.prev.src.split('/') 47 let src_arry = $(this).prev('img')[0].src.split('/') 48 let youtube_id = src_arry[src_arry.length -2] 49 50 player = new YT.Player(plaer_name, { 51 height: '100%', 52 width: '100%', 53 playerVars: { 54 autoplay: 0,//オートプレイ 55 rel: 0,//関連動画表示オフ 56 playsinline: 0 57 }, 58 videoId: youtube_id, 59 events: { 60 'onReady': onPlayerReady, 61 } 62 }); 63 //サムネイル非表示 64 let hide_thum_id = "#thumb_" + data_id 65 $(hide_thum_id).hide(); 66 let hide_ytimg_id = "#thumb_ytimg_" + data_id 67 $(hide_ytimg_id).hide(); 68 }); 69</script> 70

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問