Search
  1. YouTube iFrame Player API
  2. 再生の制御〔再生・一時停止・停止・シーク位置〕
  3. 音量の制御〔ミュートの設定・解除、ミュート状態取得、音量の設定・取得〕
  4. 再生ステータスの取得〔経過時間、プレーヤーの状態、読み込みバイト数など〕
  5. 再生画質の制御〔画質の取得・変更、有効な画質セットの取得〕
  6. 動画情報の取得〔現在の動画の長さ、URL、埋め込みコードを取得〕
  7. イベント
  8. プレーヤーのサイズを設定
  9. 複数の動画を切り替えて再生
  10. プレーヤーの複数配置
  11. 字幕付き動画一覧表示+字幕のフォントサイズ変更〔player.setOption()、onPlayerApiChange〕
  12. iframe要素への取得と変更

YouTube iFrame Player API

2012/11/18

YouTube JavaScript Player API リファレンス
※2012.11.18 見れなくなっている

YouTube iFrame APIを使用すると、iFrameでYouTube動画プレーヤーを埋め込み、パラメータやメソッドでプレーヤーの見た目や動きを制御することができます。 iFrameで埋め込むと、ユーザーの閲覧環境にあわせて最適なプレーヤー(FlashプレーヤーorHTML5プレーヤー)で再生されます。 何で再生されるかはYouTube側で制御されています。 たとえばFlashがインストールされているPCからの閲覧の場合はFlashプレーヤー、Flashがインストールされていない(無効になっている)PCやFlash未サポートのiPhoneからの閲覧の場合はHTML5プレーヤーで再生されます。

どのプレーヤーで再生されるかはユーザーの閲覧環境をもとに、YouTube側で制御されているようです。 たとえばFlashがインストールされているPCからの閲覧の場合はFlashプレーヤーで再生されますが、 Flashがインストールされていない(無効になっている)PCやFlash未サポートのiPadやiPhoneからの閲覧の場合はHTML5プレーヤーで再生されます。

iFrame Playerの基本的な埋め込み

JavaScriptで動画プレーヤーを埋め込む基本形

プレーヤの準備が完了したときに動画を自動再生するようにしています。

設置サンプルサンプルを見る
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>YouTube IFrame API:動画プレーヤ―の基本的な埋め込み</title>
    </head>
    <body>
        <div id="player"><!-- 動画プレーヤーの埋め込み --></div>
        <script>
            /* IFrame Player APIのコードを非同期にロード */
            var tag = document.createElement('script');
            tag.src = "//www.youtube.com/iframe_api";
            var firstScriptTag = document.getElementsByTagName('script')[0];
            firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
            /* APIコードがダウンロードされた後で、ifraemとYouTubeプレーヤー要素を生成 */
            var player;
            function onYouTubeIframeAPIReady() {
                player = new YT.Player(
                    'player', /* 動画プレーヤーを埋め込む要素ID */
                    {
                        width: '640',    /* 動画プレーヤーの幅 */
                        height: '390',    /* 動画プレーヤーの高さ */
                        videoId: '9YEEl52u8XE',    /* YouTube動画ID */
                        events: {    /* イベント */
                            "onReady": onPlayerReady    /* プレーヤの準備完了時 */
                        }
                    }
                );
            }
            function onPlayerReady(event){
                /* プレーヤの準備完了時に自動再生 */
                event.target.playVideo();
            }
        </script>
    </body>
</html>

jQueryを使用して動画プレーヤーを埋め込むサンプル

3つの動画の切り替えができるようにし、切り替える時にプレーヤーを都度生成しています。(2013/4/14 IE9で動作するよう調整)

設置サンプルサンプルを見る
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>YouTube IFrame API:動画プレーヤ―の基本的な埋め込み(jQuery使用)</title>
        <link rel="stylesheet" type="text/css" href="/content/lib/global.css" />
        <style>
            #playerbox { width:640px; height:390px; margin-bottom:10px; }
        </style>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
        <script>
            $(function(){
                var player;
                var playerFLG=0;
                //YouTube iFrame Player API
                var tag=document.createElement('script');
                tag.src="//www.youtube.com/iframe_api";
                var firstScriptTag=document.getElementsByTagName('script')[0];
                firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

                /* プレーヤーの準備完了時 */
                window.onYouTubeIframeAPIReady=function() {
                    dbg("onYouTubeIframeAPIReady");
                    /* 3番目の動画を再生 */
                    var first=$("#playlist li a").eq(2);
                    first.css("font-weight","bold");
                    loadPlayer(first.attr("rel"));
                }
                /* プレーヤー生成 */
                function loadPlayer(videoID) {
                    dbg("loadPlayer("+videoID+")");
                    /* 埋め込むオブジェクトを生成 */
                    if(!playerFLG){
                        player = new YT.Player(
                            'player',{
                                width: '640',    /* 動画プレーヤーの幅 */
                                height: '390',    /* 動画プレーヤーの高さ */
                                videoId: videoID,    /* YouTube動画ID */
                                events: { /* イベント */
                                    "onReady": onPlayerReady    /* プレーヤの準備完了時 */
                                }
                            }
                        );
                    }else{
                        /* プレーヤー内の動画差替 */
                        player.loadVideoById(videoID,0);
                    }
                    playerFLG++;
                }
                function onPlayerReady(event){
                    event.target.setVolume(50);    /* 音量調整 */
                    event.target.playVideo();    /* 動画再生 */
                }
                /* 指定した動画を再生 */
                $("#playlist > li > a").click(function(){
                    loadPlayer($(this).attr("rel"));
                    $(this).parent().parent().find("a").css("font-weight","normal");
                    $(this).css("font-weight","bold");
                });
                function dbg(str){
                       if(window.console && window.console.log){
                          console.log(str);
                       }
                }
            });
        </script>
    </head>
    <body>
        <div id="wrap">
            <h1>設置サンプル</h1>
            <h2>YouTube IFrame API:動画プレーヤ―の基本的な埋め込み(jQuery使用)</h2>
            <div id="playerbox"><div id='player'><!-- 動画プレーヤーの埋め込み --></div></div>
            <ul id="playlist">
                <li><a href="#" rel="9YEEl52u8XE">Sleeping Dog</a></li>
                <li><a href="#" rel="XfkXW49bXfo">Hiyoko of Tea</a></li>
                <li><a href="#" rel="j4zpzF0R1ow">The fireworks of Tokyo Disney land</a></li>
            </ul>
        </div>
    </body>
</html>

再生の制御
再生・一時停止・停止・シーク位置

2012/11/18

下記の関数を使用することで、プレーヤーの再生、一時停止、停止、シーク位置を制御することができます。
※player=埋め込みオブジェクトID

関数説明
player.playVideo():Void動画を再生する。停止ボタンを押した後の場合は、頭出し。一時停止ボタンを押した後の場合は、停止した位置から再生。
player.pauseVideo():Void再生中の動画を一時停止する。
player.stopVideo():Void再生中の動画を停止する。動画の読み込みもキャンセルする。
player.seekTo(seconds:Number, allowSeekAhead:Boolean):Void指定された時間(秒数)まで動画のフレームを進める。第2引数には、現在読み込んでいる動画の長さをsecondsの値が超えている場合にプレーヤーからサーバーに新しいリクエストを行うかどうかを指定。
設置イメージ設置イメージ
設置サンプルサンプルを見る
<!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; }
            #controls  { width:640px; text-align:center; }
            #controls a { display:inline-block; margin:0; padding:5px 10px; text-decoration:none; width:6em; color:#fff; background:#000; text-align:center; }
            #controls a:hover { background:#333; }
            #controls a#seek { width:10em; }
        </style>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
        <script>
            $(function(){
                var player;
                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":0,            // 関連動画の有無(default:1)
                                    "showinfo":0,        // 動画情報表示(default:1)
                                    "controls":1        // コントロール有無(default:1)
                                }
                            }
                        );
                    }else{
                        player.loadVideoById(videoID);
                    }
                }
                function onPlayerReady(event){
                    dbg("onPlayerReady");
                    /* プレーヤの準備完了時 */
                }
                function onPlayerStateChange(event) {
                    /* プレーヤーのステータスが変更される度に発生 */
                    dbg("PlayerState:"+event.data);
                    switch(event.data){
                        case YT.PlayerState.ENDED:
                        case YT.PlayerState.PAUSED:
                        case YT.PlayerState.CUED:
                            $("#play").html("再生");
                            break;
                        case YT.PlayerState.PLAYING:
                        case YT.PlayerState.BUFFERING:
                            $("#play").html("一時停止");
                            break;
                        default:
                            $("#play").html("再生");
                            break;
                    }
                }
                function play(){
                    dbg("play");
                    player.playVideo(); /* 再生 */
                    $(this).html("一時停止");
                }
                function pause(){
                    dbg("pause");
                    player.pauseVideo(); /* 一時停止 */
                    $(this).html("再生");
                }
                function stop(){
                    dbg("stop");
                    player.stopVideo(); /* 停止 */
                    player.cueVideoById(videoID);
                    $(this).html("一時停止");
                }
                $("#play").click(function(){
                    var label=$(this).html();
                    dbg("play");
                    if(label=="再生"){
                        play();
                    }else{
                        pause();
                    }
                });
                $("#stop").click(function(){
                    stop();
                });
                $("#seek").click(function(){
                    player.seekTo(30,true);
                    play();
                });
                function dbg(str){
                    $("#debuglog").val(str+"\n"+$("#debuglog").val());
                       if(window.console && window.console.log){
                          console.log(str);
                       }
                }
            });
        </script>
    </head>
    <body>
        <div id="wrap">
            <h1>設置サンプル</h1>
            <h2>YouTube IFrame API:動画プレーヤーの制御(再生・一時停止・停止・シーク位置)</h2>
            <div id="playerbox"><div id='player'><!-- 動画プレーヤーの埋め込み --></div></div>
            <p id="controls">
                <a href="#" id="play">再生</a>
                <a href="#" id="stop">停止</a> | 
                <a href="#" id="seek">00:30から再生</a>
            </p>
            <textarea id="debuglog" style="width:630px;height:300px;"></textarea>
        </div>
    </body>
</html>

音量の制御
ミュートの設定・解除、ミュート状態取得、音量の設定・取得

2012/11/18

下記の関数を使用することで、プレーヤーの音声調節(ミュートの設定・解除、ミュート状態取得、音量の設定・取得を行うことができます。
※player=埋め込みオブジェクトID

関数説明
player.mute():Voidミュートを設定。
player.unMute():Voidミュートを解除。
player.isMuted():Booleanミュートになっているかどうかを返す。ミュートになっている場合はtrue、そうでない場合はfalseが返る。
player.setVolume(volume:Number):Void音量を設定。指定可能な値は0~100の整数値。
player.getVolume():Number現在の音量を整数値(0~100)で取得。
設置イメージ設置イメージ
設置サンプルサンプルを見る
<!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; }
            img { vertical-align:middle; }
        </style>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
        <script>
            $(function(){
                var player;
                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    /* プレーヤの準備完了時 */
                                },
                                playerVars: {
                                    "rel":0,            // 関連動画の有無(default:1)
                                    "showinfo":0,        // 動画情報表示(default:1)
                                    "controls":1        // コントロール有無(default:1)
                                }
                            }
                        );
                    }else{
                        player.loadVideoById(videoID);
                    }
                }
                function onPlayerReady(event){
                    /* プレーヤの準備完了時 */
                    player.playVideo(); /* 再生開始 */
                    dbg("[onPlayerReady]現在の音量:"+player.getVolume());
                    $("#volume option").filter(function(){
                        //dbg($(this).text()+"=="+player.getVolume());
                        return $(this).text()==player.getVolume();
                    }).attr("selected","selected");
                    if(player.getVolume()==0){
                        btn_muteON();
                    }else{
                        btn_muteOFF();
                    }
                }
                /* ミュート設定 */
                $("#btn_mute").click(function(e){
                    /* プレーヤーのミュート状態 */
                    dbg("ミュート状態:"+player.isMuted());
                    if(player.isMuted()){
                        player.unMute(); /* ミュート解除 */
                        btn_muteOFF();
                    }else{
                        player.mute(); /* ミュート */
                        btn_muteON();
                    }
                    return false;
                 });
                /* 音量プルダウン */
                for(var i=0; i<=100; i+=10){
                    $("#volume").append("<option value='"+i+"'>"+i+"</option>");
                }
                /* 音量変更 */
                $("#volume").change(function(){
                    var num=($(this).val()) ? $(this).val() : 0;
                    player.setVolume(num);
                    dbg("現在の音量:"+num);
                    if(num==0){
                        btn_muteON();
                    }else{
                        btn_muteOFF();
                    }
                });
                function dbg(str){
                    $("#debuglog").val(str+"\n"+$("#debuglog").val());
                       if(window.console && window.console.log){
                          console.log(str);
                       }
                }
                function btn_muteOFF(){
                    $("#btn_mute > img").attr("src","/content/img/strm/key_unmute.png");
                    $("#mutestatus").html("ミュートOFF");
                }
                function btn_muteON(){
                    $("#btn_mute > img").attr("src","/content/img/strm/key_mute.png");
                    $("#mutestatus").html("ミュートON");
                }
            });
        </script>
    </head>
    <body>
        <div id="wrap">
            <h1>設置サンプル</h1>
            <h2>YouTube IFrame API:音量の制御</h2>
            <p>YouTube IFrame APIを使用して、プレーヤーの音量を制御するサンプル。</p>
            <div id="playerbox"><div id='player'><!-- 動画プレーヤーの埋め込み --></div></div>
            <p>
                <a href="#" id="btn_mute"><img /></a>
                <span id="mutestatus">ミュートOFF</span> 
                音量変更:<select id="volume"></select> 
                <span id="volumestatus"></span>
            </p>
            <textarea id="debuglog" style="width:630px;height:300px;"></textarea>
        </div>
    </body>
</html>

再生ステータスの取得
経過時間、プレーヤーの状態、読み込みバイト数など

2012/11/18

下記の関数を使用することで、経過時間、プレーヤーの状態や読み込みバイト数など、YouTubeの埋め込みプレーヤーの再生ステータスを取得することができます。
※player=埋め込みオブジェクトID

関数説明
player.getVideoLoadedFraction():Numberバッファリングしているビデオの割合。
0〜1の浮動小数点で返す。
player.getCurrentTime():Number動画再生開始からの経過時間を秒数で返す。
player.getPlayerState():Numberプレーヤーの状態を取得。未開始(-1)、終了(0)、再生中(1)、一時停止中(2)、バッファリング中(3)、頭しだし済(5)のいずれかの数値で返す。定数はこちら
player.getVideoBytesTotal():Float読み込み済または再生中の動画ファイルのサイズをバイト数で返す。※2012.10.31時点で廃止予定
player.getVideoBytesLoaded():Number現在の動画ファイルの読み込み済のバイト数を返す。※2012.10.31時点で廃止予定
player.getVideoStartBytes():Number動画ファイルの読み込みを開始した位置をバイト数で返す。※2012.10.31時点で廃止予定
設置イメージ設置イメージ
設置サンプルサンプルを見る
<!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>
    </head>
    <body>
        <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>

再生画質の制御
画質の取得・変更、有効な画質セットの取得

2012/11/18

下記の関数を使用することで、プレーヤーで再生中の動画の品質を取得することができます。
※player=埋め込みオブジェクトID

関数説明
player.getPlaybackQuality():String現在の動画の画質を取得し、hd720、largemedium、smallのいずれかを返す。現在の動画がない場合は「undefined」を返す。
player.setPlaybackQuality
(suggestedQuality:String):Void
現在の動画の推奨画質を設定し、現在の位置から新しい画質で動画を再読み込みする。再生画質を変更した場合は再生中の動画の画質のみが変更される。指定可能な値は、以下ののいずれか(現在の動画で有効な画像セットに含まれないものを指定することはできない)。
画質レベル説明
smallプレーヤーの高さが240px以下。
mediumプレーヤーの高さが360px以下。
largeプレーヤーの高さが480px以下。
hd720プレーヤーの高さが720px以下。
hd1080プレーヤーの高さが1080px以下。
highresプレーヤーの高さが1080pxより大きい。
defaultYouTubeが最適な画質を選択。cueVideoById、loadVideoByIdまたはsetPlaybackQuality関数で設定した値を無効にし、画質を元の状態に戻します。
player.getAvailableQualityLevels():Array現在の動画で有効な画質のセットを返す。動画を再生した時に取得可能。
設置イメージ設置イメージ
設置サンプルサンプルを見る
<!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; }
        </style>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
        <script>
            $(function(){
                var player;
                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":0,            // 関連動画の有無(default:1)
                                    "showinfo":0,        // 動画情報表示(default:1)
                                    "controls":1        // コントロール有無(default:1)
                                }
                            }
                        );
                    }else{
                        player.loadVideoById(videoID);
                    }
                }
                function onPlayerReady(event){
                    /* プレーヤの準備完了時 */
                    player.playVideo(); /* 再生開始 */
                }
                function onPlayerStateChange(event) {
                    /* プレーヤーのステータスが変更される度に発生 */
                    //dbg("PlayerState:"+event.data);
                    if(event.data==YT.PlayerState.PLAYING){
                        dbg(player.getAvailableQualityLevels());
                        /* 画質プルダウン */
                        var tmp=player.getAvailableQualityLevels();
                        $("#volume option").remove();
                        for(var i in tmp){
                            $("#volume").append("<option value='"+tmp[i]+"'>"+tmp[i]+"</option>");
                        }
                        $("#volume option").filter(function(){
                            //dbg($(this).text()+"=="+player.getVolume());
                            return $(this).text()==player.getPlaybackQuality();
                        }).attr("selected","selected");
                    }
                }
                /* 音量変更 */
                $("#volume").change(function(){
                    var num=($(this).val()) ? $(this).val() : null;
                    player.setPlaybackQuality(num);
                    dbg("現在の画質:"+num);
                });
                function dbg(str){
                    $("#debuglog").val(str+"\n"+$("#debuglog").val());
                       if(window.console && window.console.log){
                          console.log(str);
                       }
                }
            });
        </script>
    </head>
    <body>
        <div id="wrap">
            <h1>設置サンプル</h1>
            <h2>YouTube IFrame API:画質の制御</h2>
            <p>YouTube IFrame APIを使用して、プレーヤーの画質を制御するサンプル。</p>
            <div id="playerbox"><div id='player'><!-- 動画プレーヤーの埋め込み --></div></div>
            <p>
                画質変更:<select id="volume"></select>
            </p>
            <textarea id="debuglog" style="width:630px;height:300px;"></textarea>
        </div>
    </body>
</html>

動画情報の取得
現在の動画の長さ、URL、埋め込みコードを取得

2012/11/18

下記の関数を使用することで、現在の動画の長さ、URL、埋め込みコードを取得することができます。
※player=埋め込みオブジェクトID

関数説明
player.getDuration():Number再生中の動画の長さを秒数で返す。
※動画のステイタスが「YT.PlayerState.PLAYING」になると取得できます。
player.getVideoUrl():String読み込み済または再生中の動画のYouTube.comのURLを返す。
player.getVideoEmbedCode():String読み込み済または再生中の動画の埋め込みコードを返す。
設置イメージ設置イメージ
設置サンプルサンプルを見る
<!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; }
            #controls  { width:640px; text-align:center; }
            #controls a { display:inline-block; margin:0; padding:5px 10px; text-decoration:none; width:6em; color:#fff; background:#000; text-align:center; }
            #controls a:hover { background:#333; }
            #duration { color:red; }
            #videoURL { width:630px; display:block; }
            #videoEmbedCode { width:630px; height:4em; display:block; }
        </style>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
        <script>
            $(function(){
                var player;
                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":0,            // 関連動画の有無(default:1)
                                    "showinfo":0,        // 動画情報表示(default:1)
                                    "controls":1        // コントロール有無(default:1)
                                }
                            }
                        );
                    }else{
                        player.cueVideoById(videoID);
                    }
                }
                function onPlayerReady(event){
                    /* プレーヤの準備完了時 */
                    //player.playVideo(); /* 再生開始 */
                    $("#videoURL").val(player.getVideoUrl()); /* 動画のURLを取得 */
                    $("#videoEmbedCode").val(player.getVideoEmbedCode()); /* 動画の埋め込みコードを取得 */
                }
                function onPlayerStateChange(event) {
                    /* プレーヤーのステータスが変更される度に発生 */
                    dbg("PlayerState:"+event.data);
                    if(event.data==YT.PlayerState.PLAYING){
                        $("#duration").html(player.getDuration());
                    }
                }
                function dbg(str){
                    $("#debuglog").val(str+"\n"+$("#debuglog").val());
                       if(window.console && window.console.log){
                          console.log(str);
                       }
                }
            });
        </script>
    </head>
    <body>
        <div id="wrap">
            <h1>設置サンプル</h1>
            <h2>YouTube IFrame API:動画情報の取得</h2>
            <p>IFrame APIを使用して、動画の情報の取得するサンプル。</p>
            <div id="playerbox"><div id='player'><!-- 動画プレーヤーの埋め込み --></div></div>
            <p>再生中の動画の長さ:<span id="duration">0</span></p>
            <p>動画のURL:<input type="text" id="videoURL" readonly /></p>
            <p>動画の埋め込みコード:<textarea id="videoEmbedCode" readonly></textarea></p>
        </div>
    </body>
</html>

イベント

2012/11/18

下記のイベントが発生します。

イベント説明
onReadyプレーヤの準備が完了した時に発生。
onPlaybackQualityChangeプレーヤーの画質が変更される度に発生。
画質説明
small 
medium360p
large480p
hd720720p HD
hd10801080p HD
highres 
onStateChange動画プレーヤーのステータスが変更される度に発生。
整数値定数説明
-1なし未スタート
他の動画に切り替えた時など
0YT.PlayerState.ENDED再生終了(=最後まで再生した)
1YT.PlayerState.PLAYING再生中
2YT.PlayerState.PAUSED一時停止された
3YT.PlayerState.BUFFERINGバッファリング中
5YT.PlayerState.CUED頭出しされた
onError動画プレーヤーでエラーが発生した時に発生。 ※HTML5プレーヤーのみ
エラー番号説明
2無効なパラメータが含まれている
(動画IDが間違っている場合など)
5再生できません
100動画が見つかりません
(動画が削除されている、プライベート動画など
101所有者により埋め込みが禁止されている動画
150101と同じ
onPlaybackRateChange再生レート(速度)が変更される度に発生。 ※HTML5プレーヤーのみ
速度説明
22.0x
1.51,5x
1標準
0.50.5x
0.250.25x
onApiChangeモジュールが読み込まれた時に発生。(字幕など)
設置サンプルサンプルを見る
<!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; }
        </style>
    </head>
    <body>
        <div id="wrap">
            <h1>設置サンプル</h1>
            <h2>YouTube IFrame API:イベント</h2>
            <div id="playerbox"><div id='player'><!-- 動画プレーヤーの埋め込み --></div></div>
            <textarea id="tarea" style="width:640px;height:300px;"></textarea>
            <script>
                /* IFrame Player APIのコードを非同期にダウンロード */
                var tag = document.createElement('script');
                tag.src = "//www.youtube.com/iframe_api";
                var firstScriptTag = document.getElementsByTagName('script')[0];
                firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
                /* APIコードがダウンロードされた後で、ifraemとYouTubeプレーヤー要素を生成 */
                var player;
                function onYouTubeIframeAPIReady() {
                    player = new YT.Player(
                        'player', /* 動画プレーヤーを埋め込む要素ID */
                        {
                            width: '640',    /* 動画プレーヤーの幅 */
                            height: '390',    /* 動画プレーヤーの高さ */
                            videoId: 'XfkXW49bXfo',    /* YouTube動画ID */
                            events: {    /* イベント */
                                "onReady": onPlayerReady,    /* プレーヤの準備完了時 */
                                "onPlaybackQualityChange": onPlayerPlaybackQualityChange, /* 画質変更 */
                                "onStateChange": onPlayerStateChange,    /* 動画プレーヤーのステータス変更 */
                                "onError": onPlayerError,    /* エラー発生時 ※HTML5プレーヤーのみ */
                                "onPlaybackRateChange": onPlayerPlaybackRateChange,    /* 再生レート(速度)変更 ※HTML5プレーヤーのみ */
                                "onApiChange": onPlayerApiChange /* モジュールが読み込まれた時 */
                            },
                            playerVars :{ /* プレーヤーに渡すパラメータ */
                                showinfo:1
                            }
                        }
                    );
                }
                function onPlayerApiChange(event){
                    /* APIメソッドを使用してモジュールが読み込まれた時に発生 */
                    //プレイヤーのオプションに設定可能なモジュール名を配列で取得
                    dbg("player.getOptions():"+player.getOptions());    //["cc", "endscreen"]
                    dbg("player.getOptions(\"cc\"):"+player.getOptions("cc"));    //["reload", "fontSize", "track", "tracklist"] 
                }
                function onPlayerReady(event) {
                    /* プレーヤーの準備が完了した時に発生 */
                    var embedcode=event.target.getVideoEmbedCode(); //<iframe frameborder="0" allowfullscreen="" id="player" title="YouTube video player" height="390" width="640" src="https://www.youtube.com/embed/9YEEl52u8XE"></iframe>
                    event.target.setVolume(50);    /* 音量調整 */
                    event.target.playVideo();    /* 動画再生 */
                }
                function onPlayerPlaybackQualityChange(event) {
                    /* プレーヤーの画質が変更される度に発生 */
                    dbg("PlayerPlaybackQuality:"+event.data);
                    /*
                        small
                        medium        360p
                        large        480p
                        hd720        720p HD
                        hd1080        1080p HD
                        highres
                    */
                }
                function onPlayerStateChange(event) {
                    var s="";
                    /* プレーヤーのステータスが変更される度に発生 */
                    /* 整数値 */
                    s+="PlayerState:"+event.data;
                    /*
                        -1 (未スタート、他の動画に切り替えた時など)
                        0 (再生終了(=最後まで再生した))
                        1 (再生中)
                        2 (一時停止された)
                        3 (バッファリング中)
                        5 (頭出しされた)
                    */
                    /* 定数 */
                    switch(event.data){
                        case YT.PlayerState.ENDED:
                            s+=" / YT.PlayerState.ENDED";
                            break;
                        case YT.PlayerState.PLAYING:
                            s+=" / YT.PlayerState.PLAYING";
                            break;
                        case YT.PlayerState.PAUSED:
                            s+=" / YT.PlayerState.PAUSED";
                            break;
                        case YT.PlayerState.BUFFERING:
                            s+=" / YT.PlayerState.BUFFERING";
                            break;
                        case YT.PlayerState.CUED:
                            s+=" / YT.PlayerState.CUED";
                            break;
                    }
                    dbg(s);
                }
                function onPlayerPlaybackRateChange(event){
                    /* 動画の再生レート(速度)が変更される度に発生 */
                    dbg("RateChange:"+event.data);    /* 速度を返す */
                    /*
                        2:        2.0x
                        1.5:    1,5x
                        1:        標準
                        0.5:    0.5x
                        0.25:    0.25x
                    */
                }
                function onPlayerError(event) {
                    /* HTML5プレーヤーでエラーが発生した時に呼び出される(Flashプレーヤーの場合は何もかえらない) */
                    dbg("PlayerError:"+event.data);    /* エラーの種類を整数で返す */
                    /* 
                        2:        無効なパラメータが含まれている(動画IDが間違っている場合など)
                        5:        再生できません
                        100:    動画が見つかりません(動画が削除されている、プライベート動画など)
                        101:    所有者により埋め込みが禁止されている動画
                        150:    101と同じ
                    */
                }
                function dbg(str){
                    document.getElementById("tarea").value=str+"\n"+document.getElementById("tarea").value;
                       if(window.console && window.console.log){
                          console.log(str);
                       }
                }
            </script>
        </div>
    </body>
</html>

プレーヤーのサイズを設定

2012/11/18

プレーヤーのサイズを設定します。
※player=埋め込みオブジェクトID

関数説明
player.setSize(width:Number, height:Number):Objectプレーヤ―が含まれているiframe要素の幅と高さをピクセル単位で指定。

以下はプレーヤーのサイズ(4:3)を切り替えるサンプルです。
プレーヤーの高さには、コント―ロールの高さ30pxをプラスしています。
プラスしないと黒い余白ができます。
例)動画のサイズが幅640x高さ360の場合、コントロールを含める場合は幅640x高さ390となります。

設置イメージ設置イメージ
設置サンプルサンプルを見る
<!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; }
        </style>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
        <script>
            $(function(){
                var player;
                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: '2640',    /* 動画プレーヤーの幅 */
                                height: '390',    /* 動画プレーヤーの高さ */
                                videoId: videoID,    /* YouTube動画ID */
                                events: { /* イベント */
                                    "onReady": onPlayerReady    /* プレーヤの準備完了時 */
                                },
                                playerVars: {
                                    "rel":0,            // 関連動画の有無(default:1)
                                    "showinfo":0,        // 動画情報表示(default:1)
                                    "controls":1        // コントロール有無(default:1)
                                }
                            }
                        );
                    }else{
                        player.cueVideoById(videoID);
                    }
                    onPlayerSizechange();
                }
                function onPlayerReady(event){
                    /* プレーヤの準備完了時 */
                    //player.playVideo(); /* 再生開始 */
                }
                /* 音量変更 */
                $("#size").change(function(){
                    onPlayerSizechange();
                });
                function onPlayerSizechange(){
                    var tmp=$("#size option:selected").val();
                    var tmp_ary=tmp.split("x");
                    var width=tmp_ary[0];
                    var height=eval(tmp_ary[1])+30; /* contolsの高さ30px */
                    player.setSize(width, height);
                    dbg("現在のプレーヤーサイズ:width:"+width+"px / height:"+height+"px");
                }
                function dbg(str){
                    $("#debuglog").val(str+"\n"+$("#debuglog").val());
                       if(window.console && window.console.log){
                          console.log(str);
                       }
                }
            });
        </script>
    </head>
    <body>
        <div id="wrap">
            <h1>設置サンプル</h1>
            <h2>YouTube IFrame API:プレーヤーのサイズを設定</h2>
            <p>setSize()関数を使用して、プレーヤーのサイズをを制御するサンプル。</p>
            <div id="playerbox"><div id='player'><!-- 動画プレーヤーの埋め込み --></div></div>
            <p>
                画質変更:
                <select id="size">
                    <option value="240x135">240x135</option>
                    <option value="320x180">320x180</option>
                    <option value="560x315">560x315</option>
                    <option value="640x360" selected="selected">640x360</option>
                </select>
            </p>
            <textarea id="debuglog" style="width:630px;height:300px;"></textarea>
        </div>
    </body>
</html>

複数の動画を切り替えて再生

2012/11/18

特定のユーザーのお気に入りに登録している動画リストを取得し、YouTube動画のプレーヤーでそれらの動画を切り替え再生します。

設置イメージ設置イメージ

loadVideoById()使用:切り替えた時に動画を自動再生させるサンプル。

設置サンプル:loadVideoByIdサンプルを見る
<!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; }
        </style>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
        <script>
            $(function(){
                var player;
                /* IFrame Player APIのコードをロード */
                function fGetScript(){
                        $.ajax({
                        url:"http://www.youtube.com/player_api/",
                        dataType:"script",
                        success:function(data){
                            dbg("done");
                            /* プレーヤーの準備完了時 */
                            window.onYouTubeIframeAPIReady=function() {
                                dbg("onYouTubeIframeAPIReady");
                                /* 3番目の動画を再生 */
                                var first=$("#playlist li a").eq(2);
                                first.css("font-weight","bold");
                                loadPlayer(first.attr("rel"));
                            }
                        },
                        error:function(xhr, status, thrown) {
                            dbg(xhr);
                            fGetScript();
                        }
                    }); 
                }
                fGetScript();
                /* プレーヤー生成 */
                function loadPlayer(videoID) {
                    dbg("loadPlayer("+videoID+")");
                    /* 埋め込むオブジェクトを生成(すでにある場合は削除)*/
                    if(!player){
                        player = new YT.Player(
                            'player',{
                                width: '640',    /* 動画プレーヤーの幅 */
                                height: '390',    /* 動画プレーヤーの高さ */
                                videoId: videoID,    /* YouTube動画ID */
                                events: { /* イベント */
                                    "onReady": onPlayerReady    /* プレーヤの準備完了時 */
                                }
                            }
                        );
                    }else{
                        player.loadVideoById(videoID); /* 指定した動画を読み込んで再生(自動再生扱い) */
                    }
                }
                function onPlayerReady(event){
                    dbg("onPlayerReady");
                    event.target.setVolume(50);    /* 音量調整 */
                    event.target.playVideo();    /* 動画再生 */
                }
                /* 指定した動画を再生 */
                $("#playlist > li > a").click(function(){
                    loadPlayer($(this).attr("rel"));
                    $(this).parent().parent().find("a").css("font-weight","normal");
                    $(this).css("font-weight","bold");
                });
                function dbg(str){
                       if(window.console && window.console.log){
                          console.log(str);
                       }
                }
            });
        </script>
    </head>
    <body>
        <div id="wrap">
            <h1>設置サンプル</h1>
            <h2>YouTube IFrame API:複数の動画を切り替えて再生</h2>
            <p>切り替えた時に動画を自動再生させるサンプル。</p>
            <div id="playerbox"><div id='player'><!-- 動画プレーヤーの埋め込み --></div></div>
            <ul id="playlist">
                <li><a href="#" rel="9YEEl52u8XE">Sleeping Dog</a></li>
                <li><a href="#" rel="XfkXW49bXfo">Hiyoko of Tea</a></li>
                <li><a href="#" rel="j4zpzF0R1ow">The fireworks of Tokyo Disney land</a></li>
            </ul>
        </div>
    </body>
</html>

cueVideoById()使用:切り替えた時に動画は自動再生させずに、再生ボタンを押して再生させるサンプル。

設置サンプル:cueVideoByIdサンプルを見る
<!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; }
        </style>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
        <script>
            $(function(){
                var player;
                /* IFrame Player APIのコードをロード */
                function fGetScript(){
                        $.ajax({
                        url:"http://www.youtube.com/player_api/",
                        dataType:"script",
                        success:function(data){
                            dbg("done");
                            /* プレーヤーの準備完了時 */
                            window.onYouTubeIframeAPIReady=function() {
                                dbg("onYouTubeIframeAPIReady");
                                /* 3番目の動画を再生 */
                                var first=$("#playlist li a").eq(2);
                                first.css("font-weight","bold");
                                loadPlayer(first.attr("rel"));
                            }
                        },
                        error:function(xhr, status, thrown) {
                            dbg(xhr);
                            fGetScript();
                        }
                    }); 
                }
                fGetScript();
                /* プレーヤー生成 */
                function loadPlayer(videoID) {
                    dbg("loadPlayer("+videoID+")");
                    /* 埋め込むオブジェクトを生成(すでにある場合は削除)*/
                    if(!player){
                        player = new YT.Player(
                            'player',{
                                width: '640',    /* 動画プレーヤーの幅 */
                                height: '390',    /* 動画プレーヤーの高さ */
                                videoId: videoID,    /* YouTube動画ID */
                                events: { /* イベント */
                                    "onReady": onPlayerReady    /* プレーヤの準備完了時 */
                                }
                            }
                        );
                    }else{
                        player.cueVideoById(videoID); /* 指定した動画のサムネイルを読み込む(自動再生しない) */
                    }
                }
                function onPlayerReady(event){
                    dbg("onPlayerReady");
                    event.target.setVolume(50);    /* 音量調整 */
                }
                /* 指定した動画を再生 */
                $("#playlist > li > a").click(function(){
                    loadPlayer($(this).attr("rel"));
                    $(this).parent().parent().find("a").css("font-weight","normal");
                    $(this).css("font-weight","bold");
                });
                function dbg(str){
                       if(window.console && window.console.log){
                          console.log(str);
                       }
                }
            });
        </script>
    </head>
    <body>
        <div id="wrap">
            <h1>設置サンプル</h1>
            <h2>YouTube IFrame API:複数の動画を切り替えて再生</h2>
            <p>切り替えた時に動画は自動再生させずに、再生ボタンを押して再生させるサンプル。</p>
            <div id="playerbox"><div id='player'><!-- 動画プレーヤーの埋め込み --></div></div>
            <ul id="playlist">
                <li><a href="#" rel="9YEEl52u8XE">Sleeping Dog</a></li>
                <li><a href="#" rel="XfkXW49bXfo">Hiyoko of Tea</a></li>
                <li><a href="#" rel="j4zpzF0R1ow">The fireworks of Tokyo Disney land</a></li>
            </ul>
        </div>
    </body>
</html>

プレーヤーの複数配置

2012/11/18

同一ページ内に、複数のプレーヤーを配置することが可能です。

以下は、2つの動画を配置し、再生・一時停止の再生ステイタスを同期させるサンプルです。 どちらか一方のプレーヤを一時停止すると、もう一方のプレーヤーも一時停止します。 動画が最後まで再生された時のステイタスは一時停止、リプレイした時のステイタスは再生となります。
※やり方はこれでいいのか模索中。

設置イメージ設置イメージ
設置サンプルサンプルを見る
<!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:700px; margin-bottom:10px; clear:both; float:none; overflow:hidden; }
            #playerbox iframe { float:left; margin:0 10px 0 0; }
        </style>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
        <script>
            $(function(){
                var players=[];
                /* 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("9YEEl52u8XE,XfkXW49bXfo");
                }
                /* プレーヤー生成 */
                function loadPlayer(videoIDs) {
                    var tmp=videoIDs.split(",");
                    for(var i in tmp){
                        var videoID=tmp[i];
                        var playerID="player_"+videoID;
                        playerID=new YT.Player(
                            playerID,{
                                width: '320',
                                height: '195',
                                videoId: videoID,
                                events: { /* イベント */
                                    "onReady": onPlayerReady,    /* プレーヤの準備完了時 */
                                    "onStateChange": onPlayerStateChange    /* 動画プレーヤーのステータス変更 */
                                },
                                playerVars: {
                                    "rel":1,            // 関連動画の有無(default:1)
                                    "showinfo":0,        // 動画情報表示(default:1)
                                    "controls":1        // コントロール有無(default:1)
                                }
                            }
                        );
                        players.push(playerID);
                        dbg(playerID.getIframe());
                    }
                }
                function onPlayerReady(event){
                    /* プレーヤの準備完了時 */
                    dbg("onPlayerReady");
                }
                function onPlayerStateChange(event){
                    /* プレーヤの準備完了時 */
                    dbg("PlayerState:"+event.data);
                    var playerID=event.target.a.id;
                    if(event.data==YT.PlayerState.PAUSED){
                        for(var i in players){
                            players[i].pauseVideo();
                        }
                    }else if(event.data==YT.PlayerState.PLAYING){
                        for(var i in players){
                            players[i].playVideo();
                        }
                    }
                }
                function dbg(str){
                    $("#debuglog").val(str+"\n"+$("#debuglog").val());
                       if(window.console && window.console.log){
                          console.log(str);
                       }
                }
            });
        </script>
    </head>
    <body>
        <div id="wrap">
            <h1>設置サンプル</h1>
            <h2>YouTube IFrame API:プレーヤーの複数配置</h2>
            <p>2つの動画を配置し、再生・一時停止の再生ステイタスを同期させる。どちらか一方のプレーヤを一時停止すると、もう一方のプレーヤーも一時停止します。動画が最後まで再生された時のステイタスは一時停止、リプレイした時のステイタスは再生となります。</p>
            <div id="playerbox">
                <div id='player_9YEEl52u8XE'><!-- 動画プレーヤーの埋め込み --></div>
                <div id='player_XfkXW49bXfo'><!-- 動画プレーヤーの埋め込み --></div>
            </div>
            <textarea id="debuglog" style="width:640px;height:300px;"></textarea>
        </div>
    </body>
</html>

字幕付き動画一覧表示+字幕のフォントサイズ変更
player.setOption()、onPlayerApiChange

2012/11/18

字幕設定は、「player.setOption('cc','fontSize',0);」で指定できます。
※player=埋め込みオブジェクトID
指定可能な値:-1, 0(dfault), 1, 2, 3のいずれか。
-1が最小サイズ、0が通常サイズ。1~3はかなり大きいので使うことはないかも。

以下は字幕のフォントサイズの切り替えができるサンプルです。

プレーヤーの下にある字幕付き動画の一覧は、YouTubeの検索APIを使用しています。 字幕付きの動画は、「caption」パラメータに「true」を指定すると取得できます。 http://gdata.youtube.com/feeds/api/videos?caption&v=2

設置イメージ設置イメージ
設置サンプルサンプルを見る
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>YouTube IFrame API:動画プレーヤ―の基本的な埋め込み(jQuery使用)</title>
        <link rel="stylesheet" type="text/css" href="/content/lib/global.css" />
        <style>
            #playerbox { width:640px; height:390px; margin-bottom:10px; }
        </style>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
        <script>
            $(function(){
                var player;
                /* IFrame Player APIのコードをロード */
                function fGetScript(){
                    $.ajax({
                        url:"http://www.youtube.com/player_api/",
                        dataType:"script",
                        success:function(data){
                            dbg("done");
                            /* プレーヤーの準備完了時 */
                            window.onYouTubeIframeAPIReady=function() {
                                dbg("onYouTubeIframeAPIReady");
                                getPL();
                            }
                        },
                        error:function(xhr, status, thrown) {
                            dbg(xhr);
                            fGetScript();
                        }
                    }); 
                }
                fGetScript();
                function getPL(){
                    /* how to make cooking」が含まれている字幕付き動画を評価が高い順に取得 */
                    $.ajax({
                        "url":"http://gdata.youtube.com/feeds/api/videos",
                        "data":{"q":"how+to+make+cooking","orderby":"rating","caption":true,"v":2,"alt":"json-in-script"},
                        "type":"get",
                        "dataType":"jsonp"
                    })
                    .success(function(xml){
                        dbg("success");
                        getList(xml);
                    })
                    .error(function(xhr, status, thrown){
                        dbg("error:"+status+"/"+thrown);
                        getPL();
                    });
                }
                function getList(xml){
                    var feed=xml.feed;
                    var s="";
                    $.each(feed.entry, function(i,item){
                         var tmp=item.link;
                         $.each(tmp, function(j, lnk){
                             if(lnk.href.indexOf("watch?v=")!=-1){
                                var tmp2=lnk.href.split("watch?v=");
                                tmp2=tmp2[1].split("&");
                                var vid=tmp2[0];
                                var title=(item.title)?item.title.$t:"no title";
                                if(vid){
                                    $('<li><a href="#" rel="'+vid+'">'+title+'</a></li>').appendTo($("#videos"));
                                }
                               }
                        });
                   });
                   loadPlayer($("#videos li:first a").attr("rel"),0);
                }
                $("#videos li a").live("click",function(event){
                    loadPlayer($(this).attr("rel"),$(this).parent().index());
                });
                /* プレーヤー生成 */
                function loadPlayer(videoID,idx) {
                    dbg("loadPlayer("+videoID+")");
                    $("#videos li").css("font-weight","normal");
                    $("#videos li").eq(idx).css("font-weight","bold");
                    if(!player){
                        player = new YT.Player(
                            'player',{
                                width: '640',    /* 動画プレーヤーの幅 */
                                height: '390',    /* 動画プレーヤーの高さ */
                                videoId: videoID,    /* YouTube動画ID */
                                events: { /* イベント */
                                    "onReady": onPlayerReady,    /* プレーヤの準備完了時 */
                                    "onApiChange": onPlayerApiChange
                                },
                                playerVars: {
                                    "rel":0,            // 関連動画の有無(default:1)
                                    "iv_load_policy":3,    // アノテーション有無(default:1, 3で無効)
                                    "cc_load_policy":1,    // 字幕有無(1:ON、defaultはユーザー設定)
                                    "controls":1        // コントロール有無(default:1)
                                }
                            }
                        );
                    }else{
                        player.loadVideoById(videoID);
                    }
                }
                function onPlayerReady(event){
                    event.target.playVideo();    /* 動画再生 */
                }
                function onPlayerApiChange(event){
                    ccFontsizeChange();
                }
                $("input:radio[name=r]").click(function(){
                    ccFontsizeChange();
                });
                function ccFontsizeChange(){
                    var size=$('input:radio[name=r]:checked').val();
                    dbg("size:"+size);
                    player.setOption("cc","fontSize",size);
                }
                function dbg(str){
                       if(window.console && window.console.log){
                          console.log(str);
                       }
                }
            });
        </script>
    </head>
    <body>
        <div id="wrap">
            <h1>設置サンプル</h1>
            <h2>YouTube IFrame API:字幕付き動画一覧表示+字幕のフォントサイズ変更</h2>
            <p>字幕のフォントサイズ:
                <label id="r1"><input type="radio" id="r1" name="r" value="-1">-1</label> 
                <label id="r2"><input type="radio" id="r2" name="r" value="0" checked>0(default)</label> 
                <label id="r3"><input type="radio" id="r3" name="r" value="1">1</label> 
                <label id="r4"><input type="radio" id="r4" name="r" value="2">2</label> 
                <label id="r5"><input type="radio" id="r5" name="r" value="3">3</label>
            </p>
            <div id="playerbox"><div id='player'><!-- 動画プレーヤーの埋め込み --></div></div>
            <p>字幕が付いている動画(クッキング)</p>
            <ul id="videos"></ul>
        </div>
    </body>
</html>

iframe要素への取得と変更

2012/11/18

プレーヤーのサイズを設定します。
※player=埋め込みオブジェクトID

関数説明
player.getIframe():Object埋め込まれているiframe要素のDOMノードを取得。
player.destroy():Voidプレーヤーを含むiframe要素を削除。
設置サンプルサンプルを見る
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>設置サンプル:YouTube IFrame API:iframeの取得と削除</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+")");
                    player = new YT.Player(
                        'player',{
                            width: '640',    /* 動画プレーヤーの幅 */
                            height: '390',    /* 動画プレーヤーの高さ */
                            videoId: videoID,    /* YouTube動画ID */
                            events: { /* イベント */
                                "onStateChange": onPlayerStateChange    /* 動画プレーヤーのステータス変更 */
                            },
                            playerVars: {
                                "rel":1,            // 関連動画の有無(default:1)
                                "showinfo":0,        // 動画情報表示(default:1)
                                "controls":1        // コントロール有無(default:1)
                            }
                        }
                    );
                    $("#playerbox").html(player.getIframe());
                    dbg(player.getIframe());
                }
                function onPlayerStateChange(event) {
                    dbg(event.data);
                }
                $("#btn_destroy").click(function(e){
                    player.destroy();
                    return false;
                });
                function dbg(str){
                    $("#debuglog").val(str+"\n"+$("#debuglog").val());
                       if(window.console && window.console.log){
                          console.log(str);
                       }
                }
            });
        </script>
    </head>
    <body>
        <div id="wrap">
            <h1>設置サンプル</h1>
            <h2>YouTube IFrame API:iframeの取得と削除</h2>
            <div id="playerbox"><div id='player'><!-- 動画プレーヤーの埋め込み --></div></div>
            <p><a href="#" id="btn_destroy">iframeを削除する</a></p>
            <textarea id="debuglog" style="width:630px;height:300px;"></textarea>
        </div>
    </body>
</html>

関連コンテンツ

Q. このサイトの情報はお役に立ちましたでしょうか?

投票する 投票結果を見る

管理人に【web拍手】を送るweb拍手(1行メッセージも送れます♪)

pagetop