IFrame APIを使用して、動画の再生状況を取得するサンプル。
動画のステイタス(getPlayerState):
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>設置サンプル:YouTube IFrame API:動画の再生ステータスの取得</title> <link rel="stylesheet" type="text/css" href="/content/lib/global.css" /> <style> #playerbox { width:640px; height:390px; margin-bottom:10px; } #status { width:640px; height:3em; margin-bottom:10px; } </style> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script> $(function(){ var player,timer; var videoID="XfkXW49bXfo"; /* IFrame Player APIのコードをロード */ function fGetScript(){ $.ajax({ url:"http://www.youtube.com/player_api/", dataType:"script", success:function(data){ //dbg("done"); }, error:function(xhr, status, thrown) { dbg(xhr); fGetScript(); } }); } fGetScript(); /* プレーヤーの準備完了時 */ window.onYouTubeIframeAPIReady=function() { //dbg("onYouTubeIframeAPIReady"); loadPlayer(videoID); } /* プレーヤー生成 */ function loadPlayer(videoID) { //dbg("loadPlayer("+videoID+")"); if(!player){ player = new YT.Player( 'player',{ width: '640', /* 動画プレーヤーの幅 */ height: '390', /* 動画プレーヤーの高さ */ videoId: videoID, /* YouTube動画ID */ events: { /* イベント */ "onReady": onPlayerReady, /* プレーヤの準備完了時 */ "onStateChange": onPlayerStateChange, /* 動画プレーヤーのステータス変更 */ }, playerVars: { "rel":1, // 関連動画の有無(default:1) "showinfo":1, // 動画情報表示(default:1) "controls":1 // コントロール有無(default:1) } } ); }else{ player.loadVideoById(videoID); } } function onPlayerReady(event){ /* プレーヤの準備完了時 */ //player.playVideo(); /* 再生開始 */ timer = setInterval(getStatus, 100); } var getStatus=function(){ var loadedbytes="バッファリングしてビデオの割合(getVideoLoadedFraction):"+player.getVideoLoadedFraction()+"bytes<br>"; var curtime="動画の再生を開始してからの経過時間(getCurrentTime):"+player.getCurrentTime()+"秒"; $("#status").html(loadedbytes+curtime); } function onPlayerStateChange(event) { var s=""; /* プレーヤーのステータスが変更される度に発生 */ /* 整数値, 定数 */ s+="PlayerState:"+event.data; /* 定数 */ switch(event.data){ case YT.PlayerState.ENDED: /* 0 (再生終了(=最後まで再生した)) */ s+=" / YT.PlayerState.ENDED"; break; case YT.PlayerState.PLAYING: /* 1 (再生中) */ s+=" / YT.PlayerState.PLAYING"; break; case YT.PlayerState.PAUSED: /* 2 (一時停止された) */ s+=" / YT.PlayerState.PAUSED"; break; case YT.PlayerState.BUFFERING: /* 3 (バッファリング中) */ s+=" / YT.PlayerState.BUFFERING"; break; case YT.PlayerState.CUED: /* 5 (頭出しされた) */ s+=" / YT.PlayerState.CUED"; break; case -1: /* -1 (未スタート、他の動画に切り替えた時など) */ player.playVideo(); /* 再生開始 */ break; } dbg(s); } $("#btn_seek").click(function(){ player.seekTo(30,true); return false; }); function dbg(str){ $("#debuglog").val(str+"\n"+$("#debuglog").val()); if(window.console && window.console.log){ console.log(str); } } }); </script> <link rel="stylesheet" type="text/css" href="/common/css/example.css"></head> <body id='example3' class='example'><div class="ads" style="margin:32px auto;text-align:center;"></div><h1 class='h'><a href='/'>PHP & JavaScript Room</a> :: 設置サンプル</h1> <h3 class='h'>実行結果</h3> <div id="wrap"> <h1>設置サンプル</h1> <h2>YouTube IFrame API:動画の再生ステータスの取得</h2> <p>IFrame APIを使用して、動画の再生状況を取得するサンプル。</p> <div id="playerbox"><div id='player'><!-- 動画プレーヤーの埋め込み --></div></div> <p><a href="#" id="btn_seek">00:30から再生</a></p> <div id="status"></div> <p>動画のステイタス(getPlayerState):<br><textarea id="debuglog" style="width:630px;height:300px;"></textarea></p> </div> </body> </html>