このトピックでは、ApsaraVideo Player SDK for Web の自動再生、カスタムプレーヤースキンと UI、スナップショットキャプチャなどの一般的な再生コントロール機能の使用方法について説明します。また、長編動画シナリオに適した機能の使用方法や、H.265 および H.266 動画の再生方法についても説明します。
再生コントロール
自動再生
autoplay: true を設定しても、自動再生が有効にならない場合があります。これは、最近のほとんどのブラウザが、ユーザー体験を妨げないように、音声付きの自動再生を無効にしているためです。
例えば、Chrome の自動再生ポリシーは次のとおりです。
ミュート状態での自動再生は常に許可されます。
音声付きの自動再生は、以下のシナリオで許可されます。
ユーザーがクリックやタップなどで Web ページとインタラクションした場合。
ウェブサイトでのユーザーの動画視聴行動がしきい値を超えた場合。例えば、ユーザーが特定のウェブサイトで頻繁に動画を視聴する場合、Chrome はそのウェブサイトでの音声付き自動再生を許可します。これは Chrome の内部ポリシーであり、プログラムで干渉することはできません。
ユーザーがモバイルデバイスのホーム画面にウェブサイトを追加した場合、またはデスクトップデバイスに Progressive Web App (PWA) をインストールした場合。
このような場合、以下の対応が可能です。
mute:true を設定して、自動再生をミュートします。詳細については、「API オペレーション」をご参照ください。
autoplayPolicy: { fallbackToMute: true } を設定して、まず音声付きの自動再生を試みます。音声付きの自動再生が失敗した場合、ミュートでの自動再生が有効になります。詳細については、「API オペレーション」をご参照ください。
WeChat ブラウザなど、一部のブラウザではミュートでの自動再生も無効にされる場合があるため、すべての状況で自動再生が成功するとは限りません。
連続再生
連続再生機能は、現在の動画の再生が終了したときに、次の動画を自動再生する機能です。この機能は、再生方法、プレーヤー、および再生シナリオの影響を受けます。
-
URL ベースの再生
ApsaraVideo Player SDK for Web は、
endedイベントをサブスクライブする必要があります。endedイベント内で、次の動画の URL をパラメーターとしてloadByUrlメソッドを呼び出します。以下に例を示します。function endedHandle() { var newUrl = ""; player.loadByUrl(newUrl); } player.on("ended", endedHandle); -
動画 ID と再生認証情報に基づく再生
-
endedイベント内で、replayByVidAndPlayAuthメソッドをvidと新しいplayauthの値で呼び出します。以下に例を示します。function endedHandle() { var newPlayAuth = ""; player.replayByVidAndPlayAuth(vid,newPlayAuth); } player.on("ended", endedHandle);重要playauthのデフォルトの有効期間は 100 秒です。replayByVidAndPlayAuthメソッドを呼び出す際には、新しい再生認証情報を取得する必要があります。
-
動画再生プロトコルの切り替え
MP4 動画が再生中で、次の動画が HTTP ライブストリーミング (HLS) プロトコルを使用している場合、現在の動画の再生が終了した後に次の動画の自動再生を有効にするには、新しいプレーヤーを作成する必要があります。サンプルコード:
function endedHandle() { var newUrl = ""; // 次の動画の URL を指定します。 player.dispose(); // 既存のプレーヤーを破棄します。 // 新しいプレーヤーを作成します。 setTimeout(function(){ player = new Aliplayer({ id: 'J_prismPlayer', autoplay: true, playsinline:true, source:newUrl }); } },1000); } player.on("ended", endedHandle);
プレーヤーの外観とコンポーネントのカスタマイズ
ApsaraVideo Player SDK for Web では、プレーヤースキンなどのプレーヤーの外観をカスタマイズしたり、プレーヤーのコンポーネントと各コンポーネントの表示領域を表示するかどうかを指定したりできます。これらのコンポーネントには、コントロールバーやエラー UI が含まれます。
コントロールバーの UI コンポーネント
skinLayout 属性を設定することで、UI コンポーネントを表示するかどうか、および各コンポーネントの表示領域を指定できます。詳細については、「skinLayout の設定」をご参照ください。
ApsaraVideo Player SDK のデフォルト設定
skinLayout:[ {name: "bigPlayButton", align: "blabs", x: 30, y: 80}, {name: "H5Loading", align: "cc"}, {name: "errorDisplay", align: "tlabs", x: 0, y: 0}, {name: "infoDisplay"}, {name:"tooltip", align:"blabs",x: 0, y: 56}, {name: "thumbnail"}, { name: "controlBar", align: "blabs", x: 0, y: 0, children: [ {name: "progress", align: "blabs", x: 0, y: 44}, {name: "playButton", align: "tl", x: 15, y: 12}, {name: "timeDisplay", align: "tl", x: 10, y: 7}, {name: "fullScreenButton", align: "tr", x: 10, y: 12}, {name:"subtitle", align:"tr",x:15, y:12}, {name:"setting", align:"tr",x:15, y:12}, {name: "volume", align: "tr", x: 5, y: 10} ] } ]
エラー UI
ApsaraVideo Player SDK for Web は、デフォルトのエラー UI を提供します。また、以下のいずれかの方法でエラー UI をカスタマイズすることもできます。詳細については、「HTML5 プレーヤーのエラー UI のカスタマイズ」をご参照ください。
デフォルトのエラー UI の CSS ファイルを変更する
デフォルトのエラー UI に基づいてエラー UI をカスタマイズできます。CSS ファイルを変更して、背景色、フォント、位置を変更したり、エラーメッセージを表示するかどうかを指定したりできます。
新しいエラー UI を定義する
新しいエラー UI を定義するには、エラーイベントをサブスクライブする必要があります。
プレーヤースキンの設定
ApsaraVideo Player SDK for Web が提供する UI がビジネス要件を満たせない場合は、CSS ファイルを変更してプレーヤースキンをカスタマイズできます。
Web プレーヤースキンの設定
説明設定の詳細については、プレーヤーの CSS ファイル aliplayer-min.css をご参照ください。以下のサンプルコードは、大きな再生ボタンを設定する方法の例です。詳細については、「プレーヤースキンの設定」をご参照ください。
.prism-player .prism-big-play-btn { width: 90px; height: 90px; background: url("//gw.alicdn.com/tps/TB1YuE3KFXXXXaAXFXXXXXXXXXX-256-512.png") no-repeat -2px -2px; }
ビデオサムネイルのカスタマイズ
ApsaraVideo VOD にアップロードする各動画にはサムネイルがあります。ApsaraVideo VOD は、サムネイルを変更するための複数の方法を提供します。動画をアップロードする前に、画像またはビデオスナップショットをサムネイルとして指定できます。動画のアップロード後にサムネイルを変更できます。以下のいずれかの方法でビデオサムネイルをカスタマイズできます。
ApsaraVideo VOD コンソールでビデオサムネイルを設定します。詳細については、「ビデオサムネイルの設定」をご参照ください。
プレーヤーの cover 属性を設定してビデオサムネイルを設定します。
var player = new Aliplayer({ "id": "player-con", "source":"//player.alicdn.com/video/aliyunm****.mp4", "cover":"サムネイル URL", }, function () { } );
ビデオスナップショット
ApsaraVideo Player SDK for Web V2.1.0 以降では、動画再生中のスナップショットキャプチャがサポートされています。出力形式は image または jpeg です。この機能は明示的に有効にする必要があります。返されるスナップショットデータには、再生タイムスタンプ、Base64 文字列、および画像のバイナリデータが含まれます。
スナップショット機能の有効化
Web プレーヤーでスナップショット機能を有効にする
重要Safari で再生される Flash Video (FLV) 動画からスナップショットをキャプチャすることはできません。スナップショット機能を有効にしても、スナップショットボタンは表示されません。Canvas は、Web プレーヤーのスナップショット機能を有効にする要素です。再生ドメインにオリジン間リソース共有 (CORS) を許可するヘッダーを追加する必要があります。詳細については、「CORS の設定」をご参照ください。
スナップショット UI の設定を skinLayout 属性に追加します。サンプルコード:
skinLayout:[ {name: "bigPlayButton", align: "blabs", x: 30, y: 80}, { name: "H5Loading", align: "cc" }, {name: "errorDisplay", align: "tlabs", x: 0, y: 0}, {name: "infoDisplay"}, {name:"tooltip", align:"blabs",x: 0, y: 56}, {name: "thumbnail"}, { name: "controlBar", align: "blabs", x: 0, y: 0, children: [ {name: "progress", align: "blabs", x: 0, y: 44}, {name: "playButton", align: "tl", x: 15, y: 12}, {name: "timeDisplay", align: "tl", x: 10, y: 7}, {name: "fullScreenButton", align: "tr", x: 10, y: 12}, {name:"subtitle", align:"tr",x:15, y:12}, {name:"setting", align:"tr",x:15, y:12}, {name: "volume", align: "tr", x: 15, y: 10}, {name: "snapshot", align: "tr", x: 5, y: 12}, ] } ]Web プレーヤーでスナップショット機能を有効にするには、crossOrigin を anonymous に設定して、匿名のクロスオリジンリクエストを許可する必要があります。サンプルコード:
extraInfo:{ crossOrigin:"anonymous" }
スナップショットのサイズと品質の設定
setSanpshotProperties(width,height,rate) メソッドを使用して、キャプチャした画像のサイズと品質を設定します。デフォルトでは、スナップショットは動画と同じディメンションになります。例:
// スナップショットの幅を 300、高さを 200、品質を 0.9 に設定します。
// スナップショットの高さと幅はピクセル単位で表示されます。スナップショットの品質は 0 から 1 の範囲の値に設定できます。デフォルト値は 1 です。
player.setSanpshotProperties(300,200,0.9)
snapshoted イベントのサブスクライブ
スナップショットが正常にキャプチャされると、プレーヤーはスナップショットデータを含む snapshoted イベントを発行します。次の例は、このイベントをリッスンする方法を示しています。
player.on("snapshoted", function(data) {
console.log(data.paramData.time);
console.log(data.paramData.base64);
console.log(data.paramData.binary);
});
以下の項目はパラメーターについて説明しています。
time:スナップショットがキャプチャされた再生位置。
-
base64:スナップショットの Base64 エンコードされた文字列。この文字列は、imgタグの src 属性の値として直接使用できます。 binary:スナップショットのバイナリデータ。この値は画像をアップロードするために使用できます。
スナップショットのウォーターマーク
snapshotWatermark プロパティを設定することで、スナップショットにウォーターマークを追加できます。次の表に、このプロパティのパラメーターを示します。
パラメーター | 説明 |
left | ウォーターマークの左側とスナップショットの左側の間の距離。 |
top | ウォーターマークの下部とスナップショットの上部の間の距離。 |
text | ウォーターマーク内のテキスト。 |
font |
テキストの属性。複数の属性をスペースで区切ることができます。有効な値:
|
strokeColor | ストロークの色。 |
fillColor | 図形を塗りつぶすために使用される色。 |
サンプルコード:
snapshotWatermark:{
left:"100",
top:"100",
text:"test",
font:"italic bold 48px SimSun",
strokeColor:"red",
fillColor:'green'
}
プログレスバーでのシークの無効化
ユーザーがプログレスバーをドラッグして再生位置を変更できないようにするには、プレーヤーの初期化に disableSeek: true 設定を含めます。
const player = new Aliplayer({
id: "player-con",
disableSeek: true,
source: "https://player.alicdn.com/video/aliyunmedia.mp4",
}, function (player) {
console.log("The player is created");
}
);
長編動画向けの機能
HLS ストリームのアダプティブビットレートストリーミング
マルチビットレートストリーミングを有効にするには、source パラメーターをマスタープレイリストの URL に設定し、isVBR パラメーターを true に設定します。この機能により、プレーヤーはネットワークの状態に応じてビデオ品質レベルを自動的に切り替えることができます。ユーザーは手動で品質を切り替えることもできます。
再生 URL の取得
複数のビットレートで動画の再生 URL を取得する:player._hls.levels[player._hls.currentLevel]。
品質を [自動] に設定した場合、Safari のプレーヤーではビデオストリームの現在のビットレートは表示されません。
-
マルチビットレートトランスコーディングを有効にするには、トランスコードテンプレートグループを使用して HLS ビデオストリームをパッケージングします。ストリームを作成するには、ApsaraVideo VOD コンソールに移動し、設定の管理 > ApsaraVideo Media Processing の設定 > トランスコードテンプレートグループ を選択します。詳細については、「ビデオまたは字幕のパッケージングテンプレートの設定」をご参照ください。
サンプルコード:
varplayer = newAliplayer({
"id":"player-con",
"source":"マルチビットレート再生 URL",
"isVBR":true,
},
function () { }
);プレーヤーの設定メニューには [品質] オプションが表示され、[自動 (360)] などをクリックしてビデオ品質を切り替えることができます。
外部字幕の設定
ApsaraVideo Player SDK for Web では、以下の種類の Web Video Text Tracks (WebVTT) 字幕がサポートされています。
-
HLS (M3U8) ファイルに埋め込まれた字幕:Vid+PlayAuth または URL 再生方法を使用して、埋め込み WebVTT 字幕付きの HLS 動画を再生できます。ApsaraVideo VOD の字幕パッケージングテンプレートを使用して HLS 動画を生成できます。
-
外部字幕:
textTracksパラメーターまたはsetTextTracksメソッドを使用して外部 WebVTT 字幕を追加できます。詳細については、「Aliplayer API リファレンス」をご参照ください。

デフォルトの UI に加えて、ApsaraVideo Player SDK for Web は、ブラウザの言語に基づいてデフォルトの字幕言語を設定するなど、カスタム要件に対応する CCService を提供します。player._ccService プロパティを介して字幕サービスにアクセスできます。このサービスは以下のメソッドを提供します。
関数名 | パラメーター | 説明 |
switch | language | 字幕の言語を変更します。 |
open | N/A | 字幕をオンにします。 |
close | N/A | 字幕をオフにします。 |
getCurrentSubtitle | N/A | 字幕の言語を取得します。 |
サンプルコード:
// 字幕言語を切り替えます。
var lang = 'zh-Hans/en-US';
player._ccService.switch(lang);
player._ccService.updateUI(lang); // API はデフォルトでは UI を更新しません。必要に応じてこのメソッドを手動で呼び出す必要があります。
// 字幕を有効にします。
var result = player._ccService.open();
player._ccService.updateUI(result.language);
// 字幕を無効にします。
player._ccService.close();
player._ccService.updateUI();
以下のいずれかの方法で字幕スタイルを変更できます。
方法 1:WebVTT キュー設定を使用して、字幕ファイルにスタイルを書き込みます。詳細については、「WebVTT cue settings」をご参照ください。
方法 2:CSS を使用して字幕スタイルを変更します。
次の例では、字幕スタイルを黒い背景に白いテキストに変更する方法を説明します。
.prism-cue > div:first-child,
video::cue {
font-size: 14px !important;
color: #000 !important;
background-color: rgba(255, 255, 255, .8) !important; /* iOS のネイティブ字幕レンダリングは背景色をサポートしていません。*/
}プレーヤーは、カスタムレンダリングとネイティブレンダリングの間で適切なソリューションを選択します。.prism-cue > div:first-child と video::cue セレクターは、両方のソリューションで字幕スタイルを変更できるようにするために使用されます。
複数のオーディオトラック
ApsaraVideo Player SDK for Web では手動での設定は不要です。次の図は、オーディオトラックの設定を示しています。

多言語対応
デフォルトでは、ApsaraVideo Player SDK for Web は中国語と英語をサポートし、ブラウザの言語設定に基づいて中国語と英語を自動的に切り替えます。ApsaraVideo Player SDK for Web では、カスタム言語を指定できます。ApsaraVideo Player SDK for Web を使用すると、ApsaraVideo VOD が利用可能な複数のリージョンで動画を再生できます。動画 ID と再生認証情報に基づいて、東南アジアやヨーロッパのリージョンに保存されている動画を再生できます。
language 属性の使用上の注意
language 属性を設定して、ブラウザの言語設定を上書きするプレーヤーの言語を指定できます。デフォルトでは、この属性は空のままです。サンプルコード:
var player = new Aliplayer({
id: "player-con",
source: "",
width: "100%",
height: "500px",
autoplay: true,
language: "en-us",
}, function (player) {
console.log("The player is created.");
});英語の UI 要素を持つプレーヤーを作成する
var player = new Aliplayer({
"id": "player-con",
"source": "",
"language": "en-us" // zh-cn は中国語、en-us は英語を示します。
},
function (player) {}
);
プレーヤーにカスタム言語を指定する
中国語と英語以外の言語をサポートする必要がある場合は、カスタム言語機能を使用できます。これを行うには、languageTexts 属性を使用して言語リソースを指定します。languageTexts 属性はオブジェクトリテラルで、language 属性の値がキーとなり、JSON 値が指定された言語の翻訳済みリソースコンテンツになります。次のコードに例を示します。
どのリソースを翻訳すればよいかわからない場合は、オンラインツールを使用してください。[オンライン設定] ツールを開くにはクリックしてください。上部のナビゲーションバーで、[高度な設定] > [言語] を選択します。言語キーを選択または入力すると、翻訳ページが表示されます。このページで、リソースをターゲット言語に翻訳し、送信してコードを生成できます。
var player = new Aliplayer({
"id": "player-con",
"source": "",
"language": "CustomLanguage",// STRING 型で言語を指定します。
"languageTexts":{
"CustomLanguage":{
"Pause":"一時停止"
// その他のパラメーター。詳細については、https://player.alicdn.com/lang.json? spm=a2c4g.11186623.0.0.5a746515vnwUSi&file=lang.json をご参照ください。
}
}
},
function (player) {}
);
複数のリージョンに保存されているビデオリソースを再生する
ApsaraVideo Player SDK for Web を使用すると、中国 (上海)、ドイツ (フランクフルト)、シンガポールの各リージョンに保存されている動画を再生できます。動画 ID と再生認証情報を使用するか、Security Token Service (STS) を使用して動画を再生できます。プレーヤーはリージョン情報を解析し、対応するリージョンにある動画の再生 URL を取得します。
動画 ID と再生認証情報に基づく再生:プレーヤーは再生認証情報からリージョン情報を解析して、動画の再生 URL を取得します。この場合、設定でリージョンを指定する必要はありません。
-
STS ベースの再生:
regionプロパティを使用して動画のリージョンを指定します。デフォルト値は'cn-shanghai'です。その他の有効な値には、eu-central-1とap-southeast-1があります。例:var player = new Aliplayer({ id: "player-con", width: "100%", height: "500px", autoplay: true, language: "en-us", vid : '1e067a2831b641db90d570b6480f****', accessKeyId: '',// 一時的な STS トークンが発行されたときに生成される AccessKey ID。 securityToken: '',// 一時的な STS トークン。STS トークンを生成するには、AssumeRole 操作を呼び出します。 accessKeySecret: ''// 一時的な STS トークンが発行されたときに生成される AccessKey ID。 region:'eu-central-1',// ドイツ (フランクフルト) リージョン。 }, function (player) { console.log("The player is created."); });
H.265 および H.266 動画の再生
注意事項
ApsaraVideo Player SDK for Web V2.14.0 以降は H.265 動画の再生をサポートし、ApsaraVideo Player SDK for Web V2.20.2 以降は H.266 動画の再生をサポートします。H.265 動画を再生するには、ライセンスを申請し、「Web での H.265 動画の再生」付加価値サービスを購入する必要があります。詳細については、「ライセンスの管理」をご参照ください。
ApsaraVideo Player SDK for Web を使用して再生できる H.265 および H.266 のオーディオおよびビデオファイルの形式の詳細については、「サポートされているプロトコル」をご参照ください。
H.265 および H.266 動画を再生する前に、次の表に記載されている要件に注意してください。
項目
説明
環境要件
プレーヤーは AJAX range リクエストを送信してビデオリソースにアクセスします。ご利用のブラウザは次の要件を満たす必要があります。
HTTP Range リクエストをサポートしていること。詳細については、「HTTP range requests」をご参照ください。
OPTIONS メソッドをサポートしていること。Firefox などのブラウザは、range ヘッダー付きの AJAX リクエストを送信する前に、まず HTTP OPTIONS リクエストを送信します。
互換性
H.265
iOS 11 以降を実行しているデバイスは、H.265 動画の再生をサポートしています。
Android デバイスの特定のブラウザ (内蔵ブラウザ、WeChat ブラウザ、UC ブラウザ、QQ ブラウザなど) は、H.265 動画のハードウェアデコードをサポートしています。
Chrome、Microsoft Edge、Firefox などのブラウザでの H.265 動画のソフトウェアデコードのサポートは、ブラウザが WebAssembly API をサポートしているかどうかによって異なります。詳細については、「WebAssembly」をご参照ください。デバイスで Chrome または Chromium を使用している場合は、Chrome または Chromium を V74 以降に更新してください。V74 より前のバージョンの Chrome および Chromium では、WebAssembly は期待どおりに動作しません。
H.266
H.266 動画の再生をネイティブでサポートしているブラウザはありません。この場合、ブラウザで H.266 動画を再生するにはソフトウェアデコードが必要です。ブラウザでの H.266 動画のソフトウェアデコードのサポートは、ブラウザが WebAssembly API をサポートしているかどうかによって異なります。詳細については、「WebAssembly」をご参照ください。デバイスで Chrome または Chromium を使用している場合は、Chrome または Chromium を V74 以降に更新してください。V74 より前のバージョンの Chrome および Chromium では、WebAssembly は期待どおりに動作しません。
iOS 16.4 以前を実行しているデバイス、およびほとんどの中・低価格帯の Android デバイスは、H.266 動画のソフトウェアデコードをサポートしていません。
ソフトウェアデコードのパフォーマンス
H.265
PC のブラウザを使用して、マルチスレッドプロセスで 2K 以下の解像度の動画を再生したり、シングルスレッドプロセスで 1080p 以下の解像度の動画を再生したりできます。動画のフレームレートは 30 フレーム/秒 (FPS) を超えることはできません。
モバイルデバイスのブラウザを使用して、シングルスレッドプロセスで 720p 以下の解像度の動画を再生できます。動画のフレームレートは 30 FPS を超えることはできません。モバイルデバイスのソフトウェアデコードのパフォーマンスは、デバイスのチップ性能によって異なります。以下の項目は、シングルスレッドプロセスでの動画のソフトウェアデコードをサポートするチップについて説明しています。動画は 720p で、動画の FPS は 30 です。
Snapdragon 855 以降
Kirin 820 以降
Tianjic 800 以降
H.266
PC のブラウザを使用して、マルチスレッドプロセスで 1080p 以下の解像度の動画を再生したり、シングルスレッドプロセスで 720p 以下の解像度の動画を再生したりできます。動画のフレームレートは 30 FPS を超えることはできません。
モバイルデバイスのブラウザを使用して、シングルスレッドプロセスで 720p 以下の解像度の動画を再生できます。動画のフレームレートは 30 FPS を超えることはできません。モバイルデバイスのソフトウェアデコードのパフォーマンスは、デバイスのチップ性能によって異なります。以下の項目は、シングルスレッドプロセスでの動画のソフトウェアデコードをサポートするチップについて説明しています。動画は 720p で、動画の FPS は 30 です。
Snapdragon 855 以降
Kirin 820 以降
ApsaraVideo Player SDK for Web の統合
H.265 動画の再生
<div class="prism-player" id="player-con"></div>
<script>
var options = {
id: "player-con",
source: "//demo.example.com/video/test/h265/test_480p_mp4_h265.mp4",
enableH265: true,
license: {
domain: "example.com",
key: "example-key"
}
}
var player = new Aliplayer(options);
</script>H.266 動画の再生
<div class="prism-player" id="player-con"></div>
<script>
var options = {
id: "player-con",
source: "//demo.example.com/video/test/h266/test_480p_mp4_h266.mp4",
enableH266: true,
license: {
domain: "example.com",
key: "example-key"
}
}
var player = new Aliplayer(options);
</script>パラメーター | 説明 |
id | プレーヤーのコンテナ ID。コンテナ ID が DOM に含まれていることを確認してください。 |
source | 再生 URL。H.264、H.265、または H.266 動画の URL を指定できます。 |
enableH265/enableH266 | source パラメーターに H.265 または H.266 動画の URL を指定する場合は、このパラメーターを true に設定します。この場合、プレーヤーは少量のデータをロードしてビデオコーデックを検出し、現在のデバイスで H.265 または H.266 動画を再生できるかどうかを判断します。 説明 このパラメーターを true に設定すると、ApsaraVideo Player SDK for Web はビデオストリームをプルします。これにより、トラフィックが消費され、読み込み時間が増加します。 |
license.domain |
ライセンス申請時に登録したドメイン名。例えば、ApsaraVideo Player SDK for Web を example.com/product/vod に埋め込む場合、サイトのドメイン名 |
license.key | ライセンスファイルが生成されるときに発行されるキー。キーは 49 文字の文字列です。 |
次のサンプルコードは、source パラメーターに複数の解像度の動画の URL を指定する方法の例です。サポートされている解像度の詳細については、「多解像度再生」をご参照ください。
source パラメーターに複数の解像度の動画の URL を指定する場合、ビデオコーデックは同じでなければなりません。この場合、H.264、H.265、または H.266 動画の URL のみを指定できます。
{
//... 他のパラメーターを設定します。
source: JSON.stringify({
FD: '//h265_fd.mp4',
HD: '//h265_hd.mp4'
}),
}デコード方法の選択
ApsaraVideo Player SDK for Web は、ビデオコーデックとブラウザ環境に基づいて最適なデコードソリューションを選択します。次のロジックが適用されます。
H.265 動画の場合、プレーヤーはブラウザの機能を確認し、次の順序でデコード方法を選択します:ビデオソースに基づく再生 > Media Source Extensions (MSE) に基づく再生 > WebAssembly を使用したソフトウェアデコードと Canvas を使用した再生。これにより、デコードのパフォーマンスが保証されます。
ソフトウェアデコードに WebAssembly を使用する場合、プレーヤーはブラウザの機能に基づいてマルチスレッド処理または単一命令複数データ (SIMD) 処理を有効にして、最適なデコードパフォーマンスを提供します。詳細については、「Roadmap」をご参照ください。
再生にデグレードプロトコルを使用する
H.265 再生のデグレード
H.265 動画の再生に失敗した場合や再生中にコマ落ちが発生した場合は、エラーメッセージを設定してユーザーに通知することをお勧めします。また、H.265 動画の再生に失敗した場合や再生中にコマ落ちが発生した場合に、自動的に H.264 動画を再生するように指定することもできます。再生の失敗やコマ落ちの一般的な原因は次のとおりです。
原因 1:ご利用のブラウザが、WebAssembly、Canvas、Web Worker など、ソフトウェアデコードに必要な API オペレーションをサポートしていません。
原因 2:エンコーディングエラーまたはデコーダーの互換性の問題により、ビデオデコードに失敗しました。
原因 3:ご利用のデバイスのハードウェアパフォーマンスが低く、ソフトウェアデコードの速度が通常の再生速度と一致しません。
ApsaraVideo Player for Web のイベントをリッスンして、H.265 動画の再生中に発生するエラーに関する情報を取得できます。
プレーヤーのエラーイベントをリッスンします。4300 から 4304 のエラーコードが返された場合、H.265 または H.266 動画の再生中にエラーが発生しました。この場合、前述の原因 1 または原因 2 が適用されます。
プレーヤーの h265DecoderOverload イベントをリッスンします。h265DecoderOverload イベントが発生した場合、前述の原因 3 が適用されます。
次のサンプルコードは、イベントをリッスンする方法の例です。
player.on('error', (e) => {
var code = String(e.paramData.error_code);
if (['4300', '4301', '4302', '4303', '4304'].indexOf(code) > -1) {
// API がサポートされていないか、デコードエラーが発生した場合は、メッセージを表示するか、フォールバックを実装します。
}
});
player.on('h265DecoderOverload', (e) => {
var data = e.paramData;
// data.decodedFps - ソフトウェアデコーダーによって現在デコードされている 1 秒あたりのフレーム数。
// data.fps - ビデオの現在のフレームレート。
// data.playbackRate - 現在の再生速度。
// このイベントは、decodedFps < (fps * playbackRate) が 5 秒以上続く場合にトリガーされます。
// この時点で、再生がコマ落ちする可能性があり、ユーザーに通知するか、フォールバックを実装することを検討する必要があります。
});
次のサンプルコードは、デグレードロジックを設定する方法の例です。
var player;
// プレーヤーを作成します
function createPlayer(_options) {
player && player.dispose();
player = new Aliplayer(_options);
player.on('error', (e) => {
var code = String(e.paramData.error_code);
if (['4300', '4301', '4302', '4303', '4304'].indexOf(code) > -1) {
fallbackTo264(_options)
}
});
player.on('h265DecoderOverload', () => {
// 一時的なデコードの変動が原因である可能性があるため、このイベントが 2 回トリガーされた後にフォールバックを実装することをお勧めします。
fallbackTo264(_options)
})
return player;
}
// フォールバック関数
function fallbackTo264(_options) {
// ソースを H.264 フォールバックビデオ URL に設定します。
_options.source = '//h264.mp4';
// コーデック検出をスキップするために enableH265 を無効にします。
_options.enableH265 = false;
createPlayer(_options);
}
// プレーヤーを初期化します
var options = {
id: "player-con",
source: "//h265.mp4",
enableH265: true
}
createPlayer(options)
H.266 再生のデグレード
H.266 動画の再生に失敗した場合や再生中にコマ落ちが発生した場合は、エラーメッセージを設定してユーザーに通知することをお勧めします。また、H.266 動画の再生に失敗した場合や再生中にコマ落ちが発生した場合に、自動的に H.264 動画を再生するように指定することもできます。再生の失敗やコマ落ちの一般的な原因は次のとおりです。
原因 1:ご利用のブラウザが、WebAssembly、Canvas、Web Worker など、ソフトウェアデコードに必要な API オペレーションをサポートしていません。
原因 2:エンコーディングエラーまたはデコーダーの互換性の問題により、ビデオデコードに失敗しました。
ApsaraVideo Player for Web のイベントをリッスンして、H.266 動画の再生中に発生するエラーに関する情報を取得できます。
プレーヤーのエラーイベントをリッスンします。4300 から 4304 のエラーコードが返された場合、H.265 または H.266 動画の再生中にエラーが発生しました。この場合、前述の原因 1 または原因 2 が適用されます。
次のサンプルコードは、イベントをリッスンする方法の例です。
player.on('error', (e) => {
var code = String(e.paramData.error_code);
if (['4300', '4301', '4302', '4303', '4304'].indexOf(code) > -1) {
// ご利用のブラウザで API オペレーションがサポートされていない場合やビデオデコードに失敗した場合は、ユーザーに通知するか、デグレードプロトコルを使用して再生します。
}
}); 次のサンプルコードは、デグレードロジックを設定する方法の例です。
var player;
// プレーヤーを作成します
function createPlayer(_options) {
player && player.dispose();
player = new Aliplayer(_options);
player.on('error', (e) => {
var code = String(e.paramData.error_code);
if (['4300', '4301', '4302', '4303', '4304'].indexOf(code) > -1) {
fallbackTo264(_options)
}
});
return player;
}
// フォールバック関数
function fallbackTo264(_options) {
// ソースを H.264 フォールバックビデオ URL に設定します。
_options.source = '//h264.mp4';
// コーデック検出をスキップするために enableH266 を無効にします。
_options.enableH266 = false;
createPlayer(_options);
}
// プレーヤーを初期化します
var options = {
id: "player-con",
source: "//h266.mp4",
enableH266: true
}
createPlayer(options)
API
ApsaraVideo Player SDK for Web でサポートされている属性、メソッド、イベント、および対応する説明と例の詳細については、「API オペレーション」をご参照ください。次のセクションでは、H.265 および H.266 動画でサポートされている属性、メソッド、イベントについて説明します。
サポートされている属性
source、autoplay、rePlay、preload、cover、width、height、skinLayout、waitingTimeout、vodRetry、keyShortCuts、および keyFastForwardStep
サポートされているメソッド
play、pause、replay、seek、dispose、getCurrentTime、getDuration、getVolume、setVolume、loadByUrl、setPlayerSize、setSpeed、setSanpshotProperties、fullscreenService、getStatus、setRotate、getRotate、setImage、setCover、setProgressMarkers、setPreviewTime、getPreviewTime、および isPreview
サポートされているイベント
ready、play、pause、canplay、playing、ended、hideBar、showBar、waiting、timeupdate、snapshoted、requestFullScreen、cancelFullScreen、error、startSeek、completeSeek、h265PlayInfo、および h266PlayInfo
説明h265PlayInfo および h266PlayInfo コールバックは、H.265 または H.266 動画に使用される再生方法を返します。renderType は再生方法を示し、simd は SIMD 処理を示し、wasmThreads はマルチスレッド処理を示します。
エラーコード
次の表に、H.265 および H.266 の再生エラーで返される可能性のあるエラーコードを示します。その他のエラーコードの詳細については、「API オペレーション」をご参照ください。
エラーコード | 説明 |
4300 | wasm/worker/canvas/audiocontent/webgl はサポートされていません。H.265 および H.266 動画は再生できません。 |
4301 | 内部スケジューリングエラーが発生しました。 |
4302 | ビデオデコードに失敗しました。 |
4303 | バッファオーバーロードが発生しました。 |
4304 | 動画のコンテナ形式が MP4 ではありません。 |
マルチスレッド処理の有効化
ソフトウェアデコードに WebAssembly を使用する場合、マルチスレッド処理を有効にしてデコードパフォーマンスを向上させることができます。SharedArraryBuffer は、セキュリティ上の理由から主要なブラウザで無効になっています。WebAssembly スレッドは SharedArraryBuffer に依存しています。次のいずれかの方法で SharedArraryBuffer を有効にできます。
PC で Chrome を使用している場合は、Chrome Origin Trials ページでウェブサイトを登録します。
ブラウザのオリジン間分離を有効にします。詳細については、「オリジン間分離を有効にするためのガイド」をご参照ください。
例
画像、スクリプト、動画など、読み込む必要のあるリソースをローカルプロジェクトに保存し、リソースへのアクセス時に次のリクエストヘッダーを返します。
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corpデプロイ後、ブラウザの開発者コンソールでオリジン間分離のステータスと SharedArrayBuffer の可用性を確認します。self.crossOriginIsolated が true を返し、SharedArrayBuffer がネイティブコンストラクター関数を返す場合、設定は成功です。
> self.crossOriginIsolated
< true
> SharedArrayBuffer
< ƒ SharedArrayBuffer() { [native code] }
環境が正常に検証された後、プレーヤーを使用して H.265 または H.266 動画を再生し、h265PlayInfo または h266PlayInfo イベントをリッスンできます。event.paramData.wasmThreads が true の場合、プレーヤーがマルチスレッドデコードを有効にしていることを示します。さらに、コンソールで H265PlayInfo オブジェクトを表示し、wasmThreads と simdOption の両方が true であることを確認できます。これは、WASM マルチスレッドと SIMD 機能が正常に有効になっていることを示します。
[TEST LOG] [H265PlayInfo]
{
codecTag: "hvc1",
renderType: "wasm",
simd: true,
simdOption: true,
wasmThreads: true,
wasmThreadsOption: true
}
タイムシフト
-
タイムシフトの有効化
ApsaraVideo Live でタイムシフト機能を有効にする必要があります。詳細については、「タイムシフト」をご参照ください。
-
次の表に、プレーヤーのタイムシフトを有効にするために設定する必要がある属性を示します。
属性
説明
isLive
値を true に設定します。
liveTimeShiftUrl
タイムシフト情報をクエリするために使用される URL。
liveStartTime
ライブストリーミングの開始時刻。
liveOverTime
ライブストリーミングの終了時刻。
liveShiftSource
タイムシフト用の HLS URL。
説明この属性は FLV ライブストリームにのみ必須です。
liveShiftMinOffset
タイムシフト中に TS セグメントを生成するには、特定の時間が必要です。現在のライブストリーミング時間に非常に近い位置にシークすると、TS セグメントの生成に失敗し、404 エラーが報告されます。シーク位置と現在のライブストリーミング時間の間には、最小限の時間を指定する必要があります。このパラメーターを設定して、秒単位で時間を指定できます。デフォルト値:30。セグメントは 10 秒ごとに生成されます。これにより、少なくとも 3 つのセグメントが存在することが保証されます。
タイムシフト UI
タイムシフト UI は主にプログレスバーであり、タイムシフトをサポートする領域に時間を表示します。
説明時間領域には、現在の再生時間、ライブストリーミングの終了時間、および現在のライブストリーミング時間が左から右に表示されます。
-
ライブストリーミングの終了時刻の変更
再生中に、
liveShiftService.setLiveTimeRangeメソッドを呼び出して、ライブストリームの開始時刻と終了時刻を調整できます。UI はそれに応じて更新されます。例:player.liveShiftSerivce.setLiveTimeRange(""'2018/01/04 20:00:00') ライブストリーミングには FLV、タイムシフトには HLS
遅延を減らすために、ライブストリーミングには FLV を、タイムシフトには HLS を使用することをお勧めします。
ApsaraVideo Player SDK for Web の設定:
source:FLV 形式のライブストリームの URL。
liveShiftSource:HLS 形式のタイムシフトストリームの URL。
サンプルコード:
{ source:'http://localhost/live****/example.flv', liveShiftSource:'http://localhost/live****/example.m3u8', }
カスタムデプロイメント
デフォルトでは、JavaScript や CSS ファイルなどの ApsaraVideo VOD のリソースは Alibaba Cloud CDN に保存されています。これらのリソースをサーバーにデプロイするには、次の手順を実行します。
-
ApsaraVideo Player SDK のリソースをダウンロードします。
aliplayer-min.jsとaliplayer-min.cssの 2 つのメインファイルに加えて、ApsaraVideo Player SDK for Web は他のリソースファイルも動的に参照します。したがって、まず完全なリソースフォルダを取得する必要があります。 パッケージを解凍し、ファイルをデプロイします。
リソースパッケージを解凍し、フォルダ内のすべてのファイルをサーバーにデプロイします。ファイルのディレクトリレベルが変更されていないことを確認してください。
-
カスタムパスでプレーヤーを初期化します。
次のサンプルコードは、カスタムデプロイメント用の CSS および JavaScript ファイルの URL の例です。
https://player.alicdn.com/assets/skins/default/aliplayer-min.css https://player.alicdn.com/assets/aliplayer-min.jsプレーヤーを初期化するには、次の手順を実行します。
ページの上部で CSS および JavaScript ファイルの URL を参照します。
<head> <link rel="stylesheet" href="https://player.alicdn.com/assets/skins/default/aliplayer-min.css" /> <script charset="utf-8" type="text/javascript" src="https://player.alicdn.com/assets/aliplayer-min.js"></script> </head>-
プレーヤーを初期化し、
assetPrefixパラメーターを指定します。assetPrefixパラメーターは、カスタムデプロイメントアドレスのプレフィックスを指定します。プレーヤーが HLS 動画の再生に使用される場合、https://player.alicdn.com/assets/hls/aliplayer-hls2-min.jsファイルを動的に参照します。ファイルが正しいアドレスに配置されていることを確認してください。new Aliplayer({ assetPrefix: 'https://player.alicdn.com/assets' // 他のパラメーターを指定します。 })