このトピックでは、Android プレーヤーインスタンスを作成する方法と、基本的な再生機能の使用方法の例を示します。これらの機能には、ボリュームの設定、シーク再生の有効化、再生状態のリスニング、ループ再生の有効化、再生速度の設定、音声トラックの切り替えなどがあります。
データソース (DataSource) の設定
ApsaraVideo Player SDK for Android は、VidAuth (ApsaraVideo VOD ユーザーに推奨)、VidSts、UrlSource、暗号化再生の 4 つのビデオオンデマンド (VOD) 再生メソッドをサポートしています。
ApsaraVideo Player SDK for Android は、UrlSource と暗号化再生の 2 つのライブストリーミング再生メソッドをサポートしています。
UrlSource は再生に URL を使用します。 VidSts と VidAuth は再生にビデオ ID (VID) を使用します。
リージョンの詳細については、「ApsaraVideo VOD のリージョン ID」をご参照ください。
VOD 再生
VidAuth を使用した VOD 再生 (推奨)
VidAuth を使用して VOD ビデオを再生するには、プレーヤーの vid プロパティをオーディオまたはビデオの ID に設定し、playauth プロパティをオーディオまたはビデオの再生認証情報に設定します。
オーディオまたはビデオファイルをアップロードした後、ApsaraVideo VOD コンソールからオーディオまたはビデオの ID を取得できます。これを行うには、[メディアファイル] > [オーディオ/ビデオ] に移動します。また、SearchMedia 操作を呼び出すことでも ID を取得できます。
GetVideoPlayAuth 操作を呼び出すことで、オーディオまたはビデオの再生認証情報を取得できます。ApsaraVideo VOD サーバーサイド SDK を統合して再生認証情報を取得することをお勧めします。これにより、自己署名の 手間が省けます。操作を呼び出して再生認証情報を取得する方法の例については、「API ポータル」をご参照ください。
ApsaraVideo VOD ユーザーは、この再生方法を使用することをお勧めします。VidSts と比較して、VidAuth は使いやすく、より安全です。詳細な比較については、「再生認証情報と STS の比較」をご参照ください。
ApsaraVideo VOD コンソールで HLS 暗号化パラメーターのパススルーを有効にする場合、デフォルトのパラメーター名は MtsHIsUriToken です。詳細については、「HLS 暗号化パラメーターのパススルー」をご参照ください。次のコードに示すように、VOD ソースで MtsHIsUriToken の値を設定します。
VidAuth vidAuth = new VidAuth();
vidAuth.setVid("The video ID.");// 必須。 ビデオ ID。
vidAuth.setPlayAuth("<yourPlayAuth>");// 必須。 再生認証情報。 ApsaraVideo VOD の GetVideoPlayAuth 操作を呼び出して認証情報を生成する必要があります。
vidAuth.setRegion("The region where ApsaraVideo VOD is activated.");// このパラメーターは ApsaraVideo Player SDK V5.5.5.0 以降では非推奨です。 プレーヤーが自動的に解析するため、リージョンを設定する必要はありません。 V5.5.5.0 より前のバージョンでは、このパラメーターは必須です。 ApsaraVideo VOD が有効化されているリージョン。 デフォルト値: cn-shanghai。
// vidAuth.setAuthTimeout(3600);// 再生 URL の有効期間 (秒単位)。 この値は、ApsaraVideo VOD コンソールで設定されている URL 署名の有効期間を上書きします。 このパラメーターを設定しない場合、デフォルト値の 3600 が使用されます。 このパラメーターを設定する場合は、再生が完了する前に再生 URL が期限切れにならないように、有効期間が実際のビデオの長さよりも長くなるようにしてください。
// ApsaraVideo VOD コンソールで HLS 暗号化パラメーターのパススルーを有効にし、デフォルトのパラメーター名が MtsHlsUriToken である場合は、config を設定して vid に渡す必要があります。 詳細については、次のコードをご参照ください。
VidPlayerConfigGen vidConfig = new VidPlayerConfigGen();
vidConfig.setMtsHlsUriToken("<yourMtsHlsUriToken>");
vidAuth.setPlayerConfig(config);
aliPlayer.setDataSource(vidAuth);VidSts を使用した VOD 再生
VidSts を使用した VOD 再生とは、VOD 再生認証情報の代わりに一時的なセキュリティトークンサービス (STS) 認証情報を使用して VOD ビデオを再生することを意味します。事前に STS トークンと一時的な AccessKey ペア (AccessKey ID と AccessKey Secret) を取得する必要があります。詳細については、「STS トークンの取得」をご参照ください。
ApsaraVideo VOD コンソールで HLS 暗号化パラメーターのパススルーを有効にする場合、デフォルトのパラメーター名は MtsHIsUriToken です。詳細については、「HLS 暗号化パラメーターのパススルー」をご参照ください。次のコードに示すように、VOD ソースで MtsHIsUriToken の値を設定します。
VidSts vidSts = new VidSts();
vidSts.setVid("The video ID.");// 必須。 ビデオ ID。
vidSts.setAccessKeyId("<yourAccessKeyId>");// 必須。 一時的な AccessKey ペアの AccessKey ID。 STS の AssumeRole 操作を呼び出して AccessKey ID を生成する必要があります。
vidSts.setAccessKeySecret("<yourAccessKeySecret>");// 必須。 一時的な AccessKey ペアの AccessKey Secret。 STS の AssumeRole 操作を呼び出して AccessKey Secret を生成する必要があります。
vidSts.setSecurityToken("<yourSecurityToken>");// 必須。 STS トークン。 STS の AssumeRole 操作を呼び出してトークンを生成する必要があります。
vidSts.setRegion("The region where ApsaraVideo VOD is activated.");// 必須。 ApsaraVideo VOD が有効化されているリージョン。 デフォルト値: cn-shanghai。
// vidSts.setAuthTimeout(3600);// 再生 URL の有効期間 (秒単位)。 この値は、ApsaraVideo VOD コンソールで設定されている URL 署名の有効期間を上書きします。 このパラメーターを設定しない場合、デフォルト値の 3600 が使用されます。 このパラメーターを設定する場合は、再生が完了する前に再生 URL が期限切れにならないように、有効期間が実際のビデオの長さよりも長くなるようにしてください。
// ApsaraVideo VOD コンソールで HLS 暗号化パラメーターのパススルーを有効にし、デフォルトのパラメーター名が MtsHlsUriToken である場合は、config を設定して vid に渡す必要があります。 詳細については、次のコードをご参照ください。
// ApsaraVideo VOD コンソールで HLS 暗号化パラメーターのパススルーを有効にしない場合は、次のコードを統合する必要はありません。
VidPlayerConfigGen vidConfig = new VidPlayerConfigGen();
vidConfig.setMtsHlsUriToken("<yourMtsHlsUriToken>");
vidSts.setPlayerConfig(config);
aliPlayer.setDataSource(vidSts);UrlSource を使用した VOD 再生
UrlSource を使用して VOD ビデオを再生するには、プレーヤーの setUrl プロパティを再生 URL に設定します。
ApsaraVideo VOD の再生 URL: GetPlayInfo 操作を呼び出して URL を取得できます。ApsaraVideo VOD サーバーサイド SDK を統合して、オーディオまたはビデオの再生 URL を取得することをお勧めします。これにより、自己署名の 手間が省けます。操作を呼び出して再生 URL を取得する方法の例については、「API ポータル」をご参照ください。
ローカルビデオアドレス: 必要なアクセス権限があることを確認してください。システム API を呼び出して、
/sdcard/xxx/xxx/xxx.mp4やcontent://xxx/xxx/xx.mp4など、アクセス可能なローカルビデオファイルの完全なパスを取得できます。
UrlSource urlSource = new UrlSource();
urlSource.setUri("The playback URL.");// 必須。 再生 URL。 URL は、サードパーティの VOD URL、ApsaraVideo VOD の再生 URL、またはローカルビデオアドレスにすることができます。
aliPlayer.setDataSource(urlSource);VOD 暗号化再生
VOD ビデオは、HLS 暗号化、Alibaba Cloud 専用の暗号化、および DRM 暗号化をサポートしています。暗号化再生の詳細については、「Android で暗号化されたビデオを再生する」をご参照ください。
ライブストリーミング再生
詳細については、「標準ライブストリーミング再生」をご参照ください。
再生の制御
ApsaraVideo Player SDK for Android は、指定した時間からの再生開始、再生開始、再生の一時停止、再生の停止などの操作をサポートしています。
再生の準備
prepare メソッドは、ビデオ再生のためにプレーヤーを準備します。次の例は、再生を準備する方法を示しています。
aliPlayer.prepare();再生を開始する
start メソッドはビデオ再生を開始します。次の例は、再生を開始する方法を示しています。
aliPlayer.start();指定した時間からの再生開始
seekTo メソッドを使用して、特定の時間から再生を開始できます。このメソッドは、ユーザーがプログレスバーをドラッグしたり、指定した時間から再生を再開したりするシナリオで役立ちます。次の例は、指定した時間から再生を開始する方法を示しています。
// position はミリ秒単位の指定時間です。
aliPlayer.seekTo(long position);指定した位置から再生を開始できます。これは、ユーザーが指定した時間から再生を開始するシナリオで役立ちます。この機能を使用するには、各 prepare 呼び出しの前に、関連するメソッドを 1 回呼び出す必要があります。次の例は、指定した位置から再生を開始する方法を示しています。
// プレーヤーの次の prepare 呼び出しの開始時刻をミリ秒単位で設定します。 この設定は、直後の prepare 呼び出しに対してのみ有効です。
// prepare を呼び出すと、この値は自動的にゼロにリセットされます。 次の prepare 呼び出しの前にこのメソッドを再度呼び出さない場合、再生は通常の方法で開始されます。
// seekMode を正確または不正確なモードに設定できます。
aliPlayer.setStartTime(time, seekMode);再生を一時停止する
pause メソッドはビデオ再生を一時停止します。次の例は、再生を一時停止する方法を示しています。
aliPlayer.pause();再生を再開する
start メソッドはビデオ再生も再開します。次の例は、再生を再開する方法を示しています。
aliPlayer.start();再生を停止する
stop メソッドはビデオ再生を停止します。次の例は、再生を停止する方法を示しています。aliPlayer.stop();
aliPlayer.stop();プレーヤーを破棄する
同期または非同期メソッドを使用してプレーヤーインスタンスを破棄できます。次の例は、プレーヤーを破棄する方法を示しています。
//同期破棄。 stop メソッドが自動的に呼び出されます。
aliPlayer.release();
//非同期破棄。 stop メソッドが自動的に呼び出されます。
aliPlayer.releaseAsync(); 同期破棄メソッドを呼び出すと、プレーヤーリソースが完全に解放された後にのみメソッドが返されます。インターフェイスの応答速度に対する要件が高い場合は、非同期破棄メソッドを使用し、次の点に注意してください。
非同期破棄中にプレーヤーオブジェクトに対して他の操作を実行しないでください。
プロセスにはすでに非同期停止プロシージャが含まれているため、非同期破棄メソッドを呼び出す前にプレーヤーを手動で停止する必要はありません。
プレーヤーの状態の監視
ApsaraVideo Player SDK for Android を使用すると、プレーヤーリスナーを設定し、プレーヤーの状態をリッスンできます。
プレーヤーリスナーの設定
プレーヤーは複数のリスナーの設定をサポートしています。
OnErrorListener、OnCompletionListener、OnLoadingStatusListener、およびOnInfoListenerは重要です。必要に応じて設定してください。
aliPlayer.setOnErrorListener(new IPlayer.OnErrorListener() {
//プレーヤーの使用中にエラーが発生した場合に、このコールバックが呼び出されます。
@Override
public void onError(ErrorInfo errorInfo) {
ErrorCode errorCode = errorInfo.getCode(); //エラーコード。
String errorMsg = errorInfo.getMsg(); //エラーの説明。
//errorExtra は、JSON 文字列形式の追加のエラー情報を示します。 例: ModuleCode は errorCode と完全に同等ではないことに注意してください。
//{ "Url": "xxx",
// "Module": "NetWork",
// "ModuleCode": "-377",
// "ModuleMessage": "Redirect to a url that is not a media"}
String errorExtra= errorInfo.getExtra();
//エラーが発生した後、プレーヤーを停止する必要があります。
aliPlayer.stop();
}
});
aliPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {
// aliPlayer.prepare() メソッドを呼び出すと、プレーヤーはデータの読み取りと解析を開始します。 操作が成功すると、このコールバックが呼び出されます。
@Override
public void onPrepared() {
// 準備が完了しました。
}
});
aliPlayer.setOnCompletionListener(new IPlayer.OnCompletionListener() {
//再生が完了すると、このコールバックが呼び出されます。
@Override
public void onCompletion() {
//stop を呼び出してビデオ再生を停止できます。
aliPlayer.stop();
}
});
aliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
//現在の進行状況やバッファリングされた位置など、プレーヤーに関する情報。
@Override
public void onInfo(InfoBean infoBean) {
InfoCode code = infoBean.getCode(); //情報コード。
String msg = infoBean.getExtraMsg();//情報コンテンツ。
long value = infoBean.getExtraValue(); //情報値。
//現在の進行状況: InfoCode.CurrentPosition
//現在のバッファリング位置: InfoCode.BufferedPosition
}
});
aliPlayer.setOnLoadingStatusListener(new IPlayer.OnLoadingStatusListener() {
//プレーヤーの読み込みステータス。 ネットワークが貧弱な場合、これは読み込み画面を表示するために使用されます。
@Override
public void onLoadingBegin() {
//読み込みが開始されます。 ビデオとオーディオは再生の準備ができていません。
//ここに読み込みサークルを表示できます。
}
@Override
public void onLoadingProgress(int percent, float netSpeed) {
//読み込みの進行状況。 パーセンテージとネットワーク速度。
//ネットワーク速度は予約済みのフィールドであり、一時的に 0 です。
}
@Override
public void onLoadingEnd() {
//読み込みが完了しました。 ビデオとオーディオは再生の準備ができています。
//ここで読み込みサークルを非表示にできます。
}
});再生ステータスのリッスン
プレーヤーのステータスをリッスンできます。onStateChanged コールバックパラメーターは、現在のプレーヤーのステータスです。次の例は、再生ステータスをリッスンする方法を示しています。
aliPlayer.setOnStateChangedListener(new IPlayer.OnStateChangedListener() {
@Override
public void onStateChanged(int newState) {
/*
int idle = 0;
int initalized = 1;
int prepared = 2;
int started = 3;
int paused = 4;
int stopped = 5;
int completion = 6;
int error = 7;
*/
}
});表示モードの設定
ApsaraVideo Player SDK for Android は、塗りつぶし、回転、ミラーなどの表示設定をサポートしています。
塗りつぶし
setScaleMode メソッドは塗りつぶしモードを設定します。SDK は、アスペクト比フィット、アスペクト比フィル、ストレッチして塗りつぶしの 3 つの塗りつぶしモードをサポートしています。次の例は、塗りつぶしモードを設定する方法を示しています。
// モードをアスペクト比フィットに設定します。 ビデオは、画像を変形させることなく、ビュー内に収まるように縮小されます。
aliPlayer.setScaleMode(ScaleMode.SCALE_ASPECT_FIT);
// モードをアスペクト比フィルに設定します。 ビデオは、画像を変形させることなく、ビューを埋めるように拡大されます。
aliPlayer.setScaleMode(ScaleMode.SCALE_ASPECT_FILL);
// モードをストレッチして塗りつぶしに設定します。 ビデオのアスペクト比がビューのアスペクト比と一致しない場合、画像は変形します。
aliPlayer.setScaleMode(ScaleMode.SCALE_TO_FILL);回転
setRotateMode メソッドは、指定された角度で画像を回転させます。回転を設定した後、回転角度をクエリすることもできます。次の例は、画像を回転させる方法を示しています。
// 画像を時計回りに 0 度回転させます。
aliPlayer.setRotateMode(RotateMode.ROTATE_0);
// 画像を時計回りに 90 度回転させます。
aliPlayer.setRotateMode(RotateMode.ROTATE_90);
// 画像を時計回りに 180 度回転させます。
aliPlayer.setRotateMode(RotateMode.ROTATE_180);
// 画像を時計回りに 270 度回転させます。
aliPlayer.setRotateMode(RotateMode.ROTATE_270);
// 回転角度を取得します。
aliPlayer.getRotateMode();ミラー
setMirrorMode メソッドは、異なるミラー効果で画像を表示します。SDK は、水平ミラー、垂直ミラー、およびミラーなしをサポートしています。次の例は、ミラーモードを設定する方法を示しています。
// モードをミラーなしに設定します。
aliPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_NONE);
// モードを水平ミラーに設定します。
aliPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_HORIZONTAL);
// モードを垂直ミラーに設定します。
aliPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_VERTICAL);再生情報の取得
ApsaraVideo Player SDK for Android は、現在の再生進行状況、再生時間、バッファリング進行状況などの情報へのアクセスを提供します。
現在の再生進行状況の取得
onInfo コールバックから現在の再生時間を取得できます。これを行うには、getExtraValue メソッドを呼び出します。次の例は、現在の再生進行状況を取得する方法を示しています。
aliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
@Override
public void onInfo(InfoBean infoBean) {
if(infoBean.getCode() == InfoCode.CurrentPosition){
// extraValue はミリ秒単位の現在の再生進行状況です。
long extraValue = infoBean.getExtraValue();
}
}
});再生時間の取得
getDuration メソッドを使用して、ビデオの合計時間を取得できます。時間は、ビデオがロードされた後、つまり onPrepared イベントの後にのみ利用可能です。次の例は、再生時間を取得する方法を示しています。
long duration = aliPlayer.getDuration();実際の再生時間の取得
実際の再生時間をリアルタイムで取得できます。この時間には、一時停止やスタッタリングに費やされた時間は含まれません。次の例は、この時間を取得する方法を示しています。
long duration = aliPlayer.getPlayedDuration();バッファリング進行状況の取得
onInfo コールバックで getExtraValue メソッドを呼び出すことで、ビデオの現在のバッファリング進行状況を取得できます。次のサンプルコードは例を示しています。
aliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
@Override
public void onInfo(InfoBean infoBean) {
if(infoBean.getCode() == InfoCode.BufferedPosition){
// extraValue パラメーターはバッファリングの進行状況を示します。 単位: ミリ秒。
long extraValue = infoBean.getExtraValue();
}
}
});リアルタイムレンダリングフレームレート、オーディオとビデオのビットレート、およびネットワークダウンロードビットレートの取得
例:
// 現在のレンダリングフレームレートを取得します。 返されるデータは FLOAT データ型です。
aliPlayer.getOption(IPlayer.Option.RenderFPS);
// 現在のビデオビットレートを取得します。 返されるデータは FLOAT データ型です。 単位: bit/s。
aliPlayer.getOption(IPlayer.Option.VideoBitrate);
// 現在のオーディオビットレートを取得します。 返されるデータは FLOAT データ型です。 単位: bit/s。
aliPlayer.getOption(IPlayer.Option.AudioBitrate);
// 現在のネットワークダウンリンクビットレートを取得します。 返されるデータは FLOAT データ型です。 単位: bit/s。
aliPlayer.getOption(IPlayer.Option.DownloadBitrate);オーディオとビデオの非同期のコールバック
4K ビデオのソフトウェアデコードやローエンドデバイスでの高解像度 H.265 ストリームの高速再生など、極端な条件下では、デコードパフォーマンスが再生速度に追いつかない場合があります。このような場合、コールバックがトリガーされます。次の例はコールバックを示しています。
aliPlayer.setOnAVNotSyncStatusListener(new IPlayer.OnAVNotSyncStatusListener() {
@Override
public void onAVNotSyncStart(int type) {
if (type == 0) {
// より低い再生速度を設定します。
if (aliPlayer.getSpeed() > 1) {
aliPlayer.setSpeed(1);
}
}
Toast.makeText(getContext(), "Out-of-sync starts" , Toast.LENGTH_SHORT).show();
}
@Override
public void onAVNotSyncEnd() {
Toast.makeText(getContext(), "Out-of-sync ends" , Toast.LENGTH_SHORT).show();
}
});ボリュームの設定
ボリュームの設定には、ボリュームの調整と再生のミュートが含まれます。
音量の調整
setVolume メソッドを使用してボリュームを調整できます。ボリュームは 0 から 2 の範囲で設定できます。ボリュームが 1 より大きい場合、ノイズが発生する可能性があります。ボリュームを 1 より大きい値に設定しないことをお勧めします。ボリュームを設定した後、現在のボリュームレベルを取得することもできます。次の例は、ボリュームを調整する方法を示しています。
// ボリュームは 0 から 2 までの実数です。
aliPlayer.setVolume(1f);
// ボリュームを取得します。
aliPlayer.getVolume();再生のミュート
setMute メソッドを使用してビデオをミュートできます。次の例は、再生をミュートする方法を示しています。
aliPlayer.setMute(true);再生速度の設定
ApsaraVideo Player SDK for Android は、再生速度を設定する機能を提供します。setSpeed メソッドを呼び出すことで、元のピッチを維持しながら、ビデオを元の速度の 0.5 倍から 5 倍の速度で再生できます。次の例は、再生速度を設定する方法を示しています。
// 再生速度を設定します。 サポートされている速度範囲は 0.5 から 5.0 です。 速度は 0.5、1.0、1.5 のように 0.5 の倍数で設定することをお勧めします。
aliPlayer.setSpeed(1.0f);複数の解像度の設定
詳細なコード例については、API-Example の MultiResolution モジュールをご参照ください。このプロジェクトは、開発者が SDK のコア機能を迅速に統合するのに役立つ、ApsaraVideo Player SDK for Android の Java ベースのサンプルプロジェクトです。
UrlSource を使用したライブストリーミング
詳細については、「標準ライブストリーミング再生」をご参照ください。
Vid (VidAuth または VidSts) を使用した VOD 再生
Vid ベースの再生 (VidAuth または VidSts) を使用する場合、追加の設定は必要ありません。ApsaraVideo Player SDK for Android は、ApsaraVideo VOD から解像度リストを取得します。
解像度の取得
ビデオがロードされた後、ビデオの解像度を取得できます。
//メディアアセットのすべてのストリーム情報を取得します。
List<TrackInfo> trackInfos = aliPlayer.getMediaInfo().getTrackInfos();
//ストリームを走査し、解像度を取得します。
for (TrackInfo trackInfo : trackInfos) {
if(trackInfo.getType() == TrackInfo.Type.TYPE_VOD){
//ビデオの解像度を取得します。
String vodDefinition = trackInfo.getVodDefinition();
}
}解像度の切り替え
selectTrack メソッドを呼び出して解像度を切り替えることができます。対応する TrackInfo のインデックスをパラメーターとして渡します。
aliPlayer.selectTrack(index);解像度切り替えの通知
SDK は、解像度の切り替えが成功した場合と失敗した場合のコールバックを提供します。
aliPlayer.setOnTrackChangedListener(new IPlayer.OnTrackChangedListener() {
@Override
public void onChangedSuccess(TrackInfo trackInfo) { }
@Override
public void onChangedFail(TrackInfo trackInfo, ErrorInfo errorInfo) { }
});高速切り替えモード
高速切り替えモードを有効にすると、selectTrack の手動呼び出しは高速な応答を受け取ります。
PlayerConfig config = aliPlayer.getConfig();
config.mSelectTrackBufferMode = 1;
aliPlayer.setConfig(config)ループ再生の有効化
ApsaraVideo Player SDK for Android は、ビデオのループ再生を有効にする機能を提供します。setLoop を呼び出してループ再生を有効にできます。再生が完了すると、ビデオは自動的に最初から再生を開始します。次の例は、ループ再生を有効にする方法を示しています。
aliPlayer.setLoop(true);ループの開始の通知は、onInfo コールバックを通じて送信されます。次の例は、コールバックを示しています。
aliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
@Override
public void onInfo(InfoBean infoBean) {
if (infoBean.getCode() == InfoCode.LoopingStart){
// ループ再生が開始されたときのイベントをリッスンします。
}
}
});オーディオトラックの切り替え
ApsaraVideo Player SDK for Android は、音声トラックを切り替える機能を提供します。これは、多言語音声付きのビデオを視聴する際に、ユーザーが異なる言語を切り替えることができるシナリオに適用されます。
命令
現在、SDK は、非プレイリストストリーム (MP4 ストリームなど)、シングルビットレート混合 HLS ストリーム、およびシングルビットレート非混合 HLS ストリームのオーディオストリーム間の切り替えをサポートしています。また、マルチビットレート混合 HLS ストリームのサブストリーム間の切り替えもサポートしています。次の表に、ビデオストリームの種類を示します。
ビデオストリームタイプ | ビデオストリームサフィックス | ビットレート数 | サブ m3u8 ファイル数 | サブストリームタイプ | 切り替え命令 |
非プレイリストストリーム (MP4 ストリームなど) | .mp4 | 1 | - | 再生ストリームには 1 つのビデオストリームが含まれ、複数のオーディオストリームと字幕ストリームが含まれる場合があります。 | 複数のオーディオストリーム間の切り替えがサポートされています。 |
シングルビットレート混合 HLS ストリーム | .m3u8 | 1 | 1 | 再生ストリームには 1 つのビデオストリームが含まれ、複数のオーディオストリームと字幕ストリームが含まれる場合があります。 | 複数のオーディオストリーム間の切り替えがサポートされています。 |
シングルビットレート非混合 HLS ストリーム | .m3u8 | 1 | n | m3u8。各サブストリームは、ビデオストリーム、音声ストリーム、または字幕ストリームのみにすることができます。 | 複数のオーディオストリーム間の切り替えがサポートされています。 |
マルチビットレート混合 HLS ストリーム | .m3u8 | n | n | m3u8。各サブストリームには 1 つのビデオストリームが含まれ、複数のオーディオストリームと字幕ストリームが含まれる場合があります。異なるサブストリームは異なるビットレートを持ちます。 | 現在、サブストリーム間の切り替えのみがサポートされています。サブストリーム内の複数のオーディオストリーム間の切り替えはサポートされていません。 |
例
コールバックを設定します。
aliPlayer.setOnSubTrackReadyListener(new IPlayer.OnSubTrackReadyListener() { @Override //onSubTrackReady コールバックは通常、prepare コールバックの前にトリガーされます。 public void onSubTrackReady(MediaInfo mediaInfo) { if (mPlayerTrackFragment != null) { //mPlayerTrackFragment.showMediaInfo(); //getSubMediaInfo を呼び出して MediaInfo 情報を取得できます。 このメソッドは、onSubTrackReady コールバックを受信した後にのみ呼び出すことができます。 それ以外の場合は、null が返されます。 MediaInfo subMediaInfo = aliPlayer.getSubMediaInfo(); TrackInfos = subMediaInfo.getTrackInfos(); //選択するトラックを決定します。 myTrack = myfunc(TrackInfos) } } });オーディオトラックを切り替えます。
index = myTrack.getIndex(); aliPlayer.selectTrack(index);
サムネイルの使用
詳細なコード例については、API-Example の Thumbnail モジュールをご参照ください。このプロジェクトは、開発者が SDK のコア機能を迅速に統合するのに役立つ、ApsaraVideo Player SDK for Android の Java ベースのサンプルプロジェクトです。
ApsaraVideo Player SDK でサムネイルを使用する前に、ビデオにサムネイルが設定されていることを確認してください。これには、ビデオのスプライトが生成されている必要があります。ApsaraVideo VOD コンソールで、スプライトスクリーンショットテンプレートを作成します。次に、ワークフローを使用して、スプライトスクリーンショットテンプレートでビデオを処理し、スプライトデータを生成します。詳細については、「ビデオスクリーンショット」をご参照ください。次の例は、ApsaraVideo Player SDK でサムネイルを使用する方法を示しています。
mAliPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {
@Override
public void onPrepared() {
//1. サムネイル URL を取得します。
List<Thumbnail> thumbnailList = mAliPlayer.getMediaInfo().getThumbnailList();
//2. サムネイルヘルパークラスを作成します。
ThumbnailHelper mThumbnailHelper = new ThumbnailHelper(thumbnailList.get(0).mURL);
//3. リスナーを設定します。
mThumbnailHelper.setOnPrepareListener(new ThumbnailHelper.OnPrepareListener() {
@Override
public void onPrepareSuccess() {
//5. サムネイルがロードされた後、指定した位置のサムネイルをリクエストできます。
}
@Override
public void onPrepareFail() {}
});
mThumbnailHelper.setOnThumbnailGetListener(new ThumbnailHelper.OnThumbnailGetListener() {
@Override
public void onThumbnailGetSuccess(long positionMs, ThumbnailBitmapInfo thumbnailBitmapInfo) {
//6. 指定した位置のサムネイルのビットマップを取得します。
Bitmap thumbnailBitmap = thumbnailBitmapInfo.getThumbnailBitmap();
}
@Override
public void onThumbnailGetFail(long positionMs, String errorMsg) {}
});
//4. サムネイルをロードします。
mThumbnailHelper.prepare();
}
});注: URL ベースの再生を使用する場合、AliPlayer は ThumbnailList を取得できない場合があります。サムネイル URL を直接指定してください。
mAliPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {
@Override
public void onPrepared() {
//1. サムネイルヘルパークラスを作成します。
ThumbnailHelper mThumbnailHelper = new ThumbnailHelper(URL);
//2. リスナーを設定します。
mThumbnailHelper.setOnPrepareListener(new ThumbnailHelper.OnPrepareListener() {
@Override
public void onPrepareSuccess() {
//4. サムネイルがロードされた後、指定した位置のサムネイルをリクエストできます。
}
@Override
public void onPrepareFail() {}
});
mThumbnailHelper.setOnThumbnailGetListener(new ThumbnailHelper.OnThumbnailGetListener() {
@Override
public void onThumbnailGetSuccess(long positionMs, ThumbnailBitmapInfo thumbnailBitmapInfo) {
//5. 指定した位置のサムネイルのビットマップを取得します。
Bitmap thumbnailBitmap = thumbnailBitmapInfo.getThumbnailBitmap();
}
@Override
public void onThumbnailGetFail(long positionMs, String errorMsg) {}
});
//3. サムネイルをロードします。
mThumbnailHelper.prepare();
}
});SDK ログの取得
ApsaraVideo Player SDK の実行中に、詳細なログ情報が生成されます。これには、ネットワークリクエストのステータス、システムコールの結果、権限リクエストなどが含まれます。これにより、開発者はコードのデバッグや問題のトラブルシューティングを行い、開発効率を向上させることができます。
方法 1: 開発ツールのコンソールから SDK ログを取得する
この方法は、問題をローカルで再現してログをキャプチャできるシナリオに適用されます。
ログを有効にし、ログレベルを設定します。
// Logger は com.cicada.player.utils にあります。 // ログを有効にします。 Logger.getInstance(context).enableConsoleLog(true); // ログレベルを設定します。 デフォルト値: AF_LOG_LEVEL_INFO。 問題をトラブルシューティングするには、レベルを AF_LOG_LEVEL_TRACE に設定できます。 Logger.getInstance(context).setLogLevel(Logger.LogLevel.AF_LOG_LEVEL_INFO);フレームレベルのログを設定します。
//フレームレベルのログ出力を設定します。 //オプションの値が 0 の場合は機能が無効であることを示し、値が 1 の場合は機能が有効であることを示します。 Logger.getInstance(this).setLogOption(Logger.LogOption.FRAME_LEVEL_LOGGING_ENABLED,value);説明フレームレベルのログ機能は、主にトラブルシューティングに使用されます。
ログを収集します。
問題を再現した後、Logcat などの開発ツールのコンソールからログを取得できます。
方法 2: LogCallback を使用して SDK の出力ログをリッスンする
この方法は、ユーザー側で問題が発生し、ローカルで再現してログをキャプチャできないシナリオに適用されます。LogCallback を使用して SDK の出力ログをリッスンし、アプリのログチャネルに自動的に出力できます。
ログを有効にし、ログレベルを設定します。
// Logger は com.cicada.player.utils にあります。 // ログレベルを設定します。 デフォルト値: AF_LOG_LEVEL_INFO。 問題をトラブルシューティングするには、レベルを AF_LOG_LEVEL_TRACE に設定できます。 Logger.getInstance(context).setLogLevel(Logger.LogLevel.AF_LOG_LEVEL_INFO); Logger.getInstance(mContext).setLogCallback(newLogger.OnLogCallback(){ @Override public void onLog(Logger.LogLevel logLevel,Strings){ // ログ } });ログを収集します。
問題を再現した後、ログはアプリのログチャネルを介してアプリのログファイルに自動的に出力されます。
参考資料
詳細な API の説明については、「API リファレンス」をご参照ください。
高度な機能の使用方法の詳細については、「高度な機能」をご参照ください。
再生例外に関する一般的な問題と解決策については、「再生例外のトラブルシューティング」、「ApsaraVideo Player for Android に関するよくある質問」、および「モバイルのエラーコード」をご参照ください。