YouTubeプレーヤーの埋め込みから、再生や停止、プレーヤーの状態の取得などをPlayer APIを使って実装してみます。
YouTubeプレーヤーの埋め込み
まずは今回使用するYouTubeプレーヤーを埋め込みます。
HTML
bodyの閉じタグの直前にjsファイルを読み込ませます。
今回はこのsample.js内に必要な記述を追加していきます。
<script src="./sample.js"></script>
JavaScript
sample.js内にYouTube Player APIを読み込む記述を追加します。
// YouTube Player APIを読み込む
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
HTML
HTML内にYouTubeプレーヤーを埋め込む場所を作っておきます。
<div id="sample"></div>
JavaScript
YouTubeプレーヤーを埋め込む場所、埋め込む動画のID、サイズを指定しておきます。
その後、これらの変数を参照してYouTubeプレーヤーを埋め込みます。
// プレーヤーを埋め込む場所
var ytArea = 'sample';
// 埋め込むYouTube ID
var ytID = 'aIeXZ5sHDrc';
// プレーヤーのサイズを指定
var ytWidth = 640;
var ytHeight = 390;
// API読み込み後にプレーヤー埋め込み
function onYouTubeIframeAPIReady() {
ytPlayer = new YT.Player(ytArea, {
height: ytHeight,
width: ytWidth,
videoId: ytID
});
}
YouTubeプレーヤーの制御
再生や停止、シークバーの移動、音量の変更をJavaScriptで制御してみます。
HTML
制御用のボタンを作成します。
<button id="play">再生</button> <button id="pause">一時停止</button> <button id="stop">停止</button> <button id="prev">10秒前へ</button> <button id="next">10秒先へ</button> <button id="volup">音量アップ</button> <button id="voldown">音量ダウン</button> <button id="mute">ミュート</button>
JavaScript
各ボタンにイベントを追加していきます。
// 再生
var ytPlay = document.getElementById('play');
ytPlay.addEventListener('click', function() {
ytPlayer.playVideo();
});
// 一時停止
var ytPause = document.getElementById('pause');
ytPause.addEventListener('click', function() {
ytPlayer.pauseVideo();
});
// 停止
var ytStop = document.getElementById('stop');
ytStop.addEventListener('click', function() {
ytPlayer.pauseVideo().seekTo(0);
});
// 10秒前へ
var ytPrev = document.getElementById('prev');
ytPrev.addEventListener('click', function() {
// 現在の再生時間取得
var currentTime = ytPlayer.getCurrentTime();
ytPlayer.seekTo(currentTime - 10);
});
// 10秒先へ
var ytNext = document.getElementById('next');
ytNext.addEventListener('click', function() {
// 現在の再生時間取得
var currentTime = ytPlayer.getCurrentTime();
ytPlayer.seekTo(currentTime + 10);
});
// 音量アップ(+10)
var ytVolup = document.getElementById('volup');
ytVolup.addEventListener('click', function() {
// 現在の音量取得
var currentVol = ytPlayer.getVolume();
ytPlayer.setVolume(currentVol + 10);
});
// 音量ダウン(-10)
var ytVoldown = document.getElementById('voldown');
ytVoldown.addEventListener('click', function() {
// 現在の音量取得
var currentVol = ytPlayer.getVolume();
ytPlayer.setVolume(currentVol - 10);
});
// ミュート
var ytMute = document.getElementById('mute');
ytMute.addEventListener('click', function() {
// ミュートされているかどうか
if(ytPlayer.isMuted()) {
// ミュートの解除
ytPlayer.unMute();
} else {
// ミュート
ytPlayer.mute();
}
});
YouTubeプレーヤーの制御のデモページ
停止に関してはstopVideo()というのもありますが、動画の読み込みをキャンセルしてしまうので、
pauseVideo()で一時停止状態にしてからseekTo(0)で再生時間を0にしたほうがいいかもしれません。
| player.playVideo() | 読み込み済の動画を再生。 |
|---|---|
| player.pauseVideo() | 再生中の動画を一時停止。 |
| player.getCurrentTime() | 現在の再生時間を秒数で返す。 |
| player.seekTo(num) | シークバーを指定された秒数に移動。 |
| player.getVolume() | 現在の音量を0~100の整数値で返す。 |
| player.setVolume(num) | 音量を指定された値(0~100の整数)に変更。 |
| player.isMuted() | ミュート状態の場合はtrue、ミュートされていない場合はfalseを返す。 |
| player.unMute() | ミュートを解除する。 |
| player.mute() | ミュート状態にする。 |
YouTubeプレーヤーの状態を取得
YouTubeプレーヤーの準備完了時、ステータス変更時、何らかのエラーが発生した時に処理を行ってみます。
HTML
動画のステータスに応じてテキストを変更するのと、読み込み完了後に動画の長さを取得してみます。
<div id="status">現在のステータス:</div> <div>動画の長さ:<span id="total"></span></div>
JavaScript
最初に記述したYouTubeプレーヤーの埋め込みに、イベントを追加します。
今回はonReady、onStateChange、onErrorの3つを追加しました。
// API読み込み後にプレーヤー埋め込み
function onYouTubeIframeAPIReady() {
ytPlayer = new YT.Player(ytArea, {
height: ytHeight,
width: ytWidth,
videoId: ytID,
events: {
'onReady': onPlayerReady,
'onStateChange': onPlayerStateChange,
'onError': onPlayerError
}
});
}
| ‘onReady’: function | プレーヤーの準備ができた時に指定した関数を実行。 |
|---|---|
| ‘onStateChange’: function | プレーヤーのステータスが変更された時に指定した関数を実行。 |
| ‘onError’: function | 何らかのエラーが発生した時に指定した関数を実行。 |
JavaScript
それぞれのイベント時の関数を用意します。
function onPlayerReady(e) {
// 読み込み完了後に自動再生
e.target.playVideo();
// 動画の長さ取得
var total = document.getElementById('total');
total.innerHTML = e.target.getDuration() + '秒';
}
var stateArea = document.getElementById('status');
function onPlayerStateChange(e) {
// 現在のステータス取得
var ytStatus = e.target.getPlayerState();
var stateIns = '現在のステータス:';
// ステータスの判別
switch (ytStatus) {
case -1:
stateIns += '未開始(-1)';
break;
case 0:
stateIns += '終了(0)';
break;
case 1:
stateIns += '再生中(1)';
break;
case 2:
stateIns += '停止(2)';
break;
case 3:
stateIns += 'バッファリング中(3)';
break;
case 5:
stateIns += '頭出し済み(5)';
break;
default:
break;
}
stateArea.innerHTML = stateIns;
}
function onPlayerError(e) {
// エラーの種別取得
var ytError = e.data;
var errorIns = '読み込みに失敗しました。';
// エラーの判別
switch (ytError) {
case 2:
errorIns += '無効なパラメータ値が含まれています。(2)';
break;
case 5:
errorIns += 'HTML5プレーヤーで再生できない、または HTML5プレーヤーに関する別のエラーが発生しました。(5)';
break;
case 100:
errorIns += '動画が見つかりません。(100)';
break;
case 101:
errorIns += '動画の所有者が、埋め込み動画プレーヤーでの再生を許可していません。(101)';
break;
case 150:
errorIns += '動画の所有者が、埋め込み動画プレーヤーでの再生を許可していません。(150)';
break;
default:
break;
}
alert(errorIns);
}
YouTubeプレーヤーの状態を取得のデモページ
イベントオブジェクトを引数として各関数にもたせることができます。
イベントオブジェクトにはそれぞれtarget、dataのプロパティが含まれています。
| event.target | イベントに応答する動画プレーヤーを識別。 |
|---|---|
| event.data | イベントに対応する値を指定。 onStateChangeではプレーヤーの状態、 onErrorではエラーの種類を返す。 2: 無効なパラメータ値が含まれている場合。 5: HTML5プレーヤーに関するエラーが発生している場合。 100: 動画が見つからない場合。 101: 埋め込み動画プレーヤーでの再生を許可されていない場合。 150: 101と同じ |
| player.getDuration() | 動画の長さを秒数で返します。 |
| player.getPlayerState() | プレーヤーの状態を返します。 -1: 未開始 0: 終了 1: 再生中 2: 一時停止 3: バッファリング中 5: 頭出し済み |
【参考サイト】
- YouTube 埋め込みプレーヤーとプレーヤーのパラメータ – YouTube — Google Developers
- iframe 組み込みの YouTube Player API リファレンス – YouTube — Google Developers
コメントが承認されるまで時間がかかります。