いつもお世話になっております。
現在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
あなたの回答
tips
プレビュー