このトピックでは、ApsaraVideo Player SDK for Android を使用したプレーヤーインスタンスの作成方法および、音量設定、シーク再生、再生ステータスの監視、ループ再生、再生速度の設定、音声トラックの切り替えなど、基本的な再生機能の利用方法について説明します。
再生ソース(DataSource)の設定
ApsaraVideo Player SDK for Android は、ビデオ・オン・デマンド(VOD)再生のための 4 種類の方式をサポートしています:VidAuth(ApsaraVideo VOD ユーザー向け推奨)、VidSts、UrlSource、および暗号化再生です。
ApsaraVideo Player SDK for Android は、ライブストリーミング再生のための 2 種類の方式をサポートしています:UrlSource および暗号化再生です。
UrlSource は URL を直接使用して再生を行います。一方、VidSts および VidAuth は動画 ID(Vid)を使用して再生を行います。
リージョンに関する情報については、「ApsaraVideo VOD のリージョン ID」をご参照ください。
ビデオ・オン・デマンドの再生
VidAuth(推奨)
VidAuth を使用して VOD 動画を再生するには、vid プロパティにメディア ID を、playAuth プロパティにメディア再生認証情報を設定します。
メディア ID は、動画または音声ファイルのアップロード後に取得できます。ApsaraVideo VOD コンソールで、[メディアファイル] > [音声/動画] を選択します。また、ApsaraVideo VOD SDK が提供する SearchMedia 操作を呼び出すこともできます。
再生認証情報は、GetVideoPlayAuth 操作を呼び出して取得できます。再生認証情報の取得には、ApsaraVideo VOD サーバーサイド SDK を統合することを推奨します。これにより、手動による署名生成を回避できます。この操作の呼び出し例については、「OpenAPI Explorer」をご参照ください。
ApsaraVideo VOD をご利用の場合、VidAuth の利用を推奨します。STS をベースとした再生と比較して、VidAuth は使いやすさおよびセキュリティの面で優れています。詳細については、「認証情報と STS の比較」をご参照ください。
ApsaraVideo VOD コンソールで HLS 暗号化のパラメーター・パススルーを有効化した場合、デフォルトのパラメーター名は MtsHlsUriToken です。詳細については、「HLS 暗号化におけるパラメーター・パススルー」をご参照ください。以下のコードを使用して、MtsHlsUriToken の値を VOD ソースに追加します。
VidAuth vidAuth = new VidAuth();
vidAuth.setVid("動画 ID");// 必須。動画の ID(VideoId)。
vidAuth.setPlayAuth("<yourPlayAuth>");// 必須。再生認証情報。ApsaraVideo VOD の GetVideoPlayAuth 操作を呼び出して取得します。
vidAuth.setRegion("リージョン ID");// このパラメーターはプレーヤー SDK バージョン 5.5.5.0 以降では非推奨です。プレーヤーが自動的にリージョンを解析するため、設定不要です。プレーヤー SDK バージョンが 5.5.5.0 より前の場合は必須であり、ApsaraVideo VOD サービスのリージョンを指定します。デフォルト値は cn-shanghai です。
// vidAuth.setAuthTimeout(3600);// 再生 URL の有効期間(秒単位)。この値は、ApsaraVideo VOD コンソールで設定した URL 署名の有効期間を上書きします。このパラメーターを指定しない場合、デフォルト値 3600 が使用されます。このパラメーターを指定する場合は、再生完了前に再生 URL の有効期限が切れないよう、実際の動画再生時間より長い値を指定してください。
// ApsaraVideo VOD コンソールで HLS 暗号化のパラメーター・パススルーを有効化し、デフォルトのパラメーター名が MtsHlsUriToken の場合、以下のコードに示すように config を設定して vidAuth オブジェクトに渡す必要があります。
VidPlayerConfigGen vidConfig = new VidPlayerConfigGen();
vidConfig.setMtsHlsUriToken("<yourMtsHlsUriToken>");
vidAuth.setPlayerConfig(vidConfig);
aliPlayer.setDataSource(vidAuth);ビデオ・オン・デマンド VidSts 再生
VidSts 再生では、VOD 再生認証情報ではなく一時的な STS 認証情報を使用します。VOD 動画を再生する前に、STS トークンおよび AccessKey ペア(AccessKey ID および AccessKey Secret)を取得する必要があります。詳細については、「STS トークンの取得」をご参照ください。
ApsaraVideo VOD コンソールで HLS 暗号化のパラメーター・パススルーを有効化した場合、デフォルトのパラメーター名は MtsHlsUriToken です。詳細については、「HLS 暗号化におけるパラメーター・パススルー」をご参照ください。以下のコードを使用して、MtsHlsUriToken の値を VOD ソースに追加します。
VidSts vidSts = new VidSts();
vidSts.setVid("動画 ID"); // 必須パラメーター。動画の ID(VideoId)。
vidSts.setAccessKeyId("<yourAccessKeyId>"); // 必須パラメーター。一時的な STS AccessKey ペアの AccessKey ID。Security Token Service(STS)の AssumeRole 操作を呼び出して生成します。
vidSts.setAccessKeySecret("<yourAccessKeySecret>"); // 必須パラメーター。一時的な STS AccessKey ペアの AccessKey Secret。Security Token Service(STS)の AssumeRole 操作を呼び出して生成します。
vidSts.setSecurityToken("<yourSecurityToken>"); // 必須パラメーター。Security Token Service(STS)のトークン。Security Token Service(STS)の AssumeRole 操作を呼び出して生成します。
vidSts.setRegion("リージョン"); // 必須パラメーター。ApsaraVideo VOD サービスにアクセスするリージョン。デフォルト値:cn-shanghai。
// vidSts.setAuthTimeout(3600); // 再生 URL の有効期間(秒単位)。この値は、ApsaraVideo VOD コンソールで設定した URL 署名の有効期間を上書きします。このパラメーターを指定しない場合、デフォルト値 3600 が使用されます。このパラメーターを指定する場合は、再生完了前に再生 URL の有効期限が切れないよう、実際の動画再生時間より長い値を指定してください。
// ApsaraVideo VOD コンソールで HLS 暗号化のパラメーター・パススルーを有効化し、デフォルトのパラメーター名が MtsHlsUriToken の場合、vidConfig を設定して vidSts に渡す必要があります。詳細については、以下のコードをご参照ください。
// ApsaraVideo VOD コンソールで HLS 暗号化のパラメーター・パススルーを有効化していない場合は、以下のコードを統合する必要はありません。
VidPlayerConfigGen vidConfig = new VidPlayerConfigGen();
vidConfig.setMtsHlsUriToken("<yourMtsHlsUriToken>");
vidSts.setPlayerConfig(vidConfig);
aliPlayer.setDataSource(vidSts);ビデオ・オン・デマンド UrlSource 再生
UrlSource を使用して VOD 動画を再生するには、setUrl プロパティに再生 URL を設定します。
ApsaraVideo VOD で再生 URL を取得するには、GetPlayInfo 操作を呼び出します。再生 URL の取得には、ApsaraVideo VOD サーバーサイド SDK を統合することを推奨します。これにより、手動による署名生成を回避できます。この操作の呼び出し例については、「OpenAPI Explorer」をご参照ください。
ローカルファイルへのアクセス権限があることを確認してください。システム API を使用してローカル動画ファイルの完全なパスを取得できます。例:
/sdcard/xxx/xxx/xxx.mp4またはcontent://xxx/xxx/xx.mp4。
UrlSource urlSource = new UrlSource();
urlSource.setUri("再生 URL");// 必須。再生 URL。ApsaraVideo VOD またはサードパーティサービスによって生成された URL、またはローカル動画の URL です。
aliPlayer.setDataSource(urlSource);暗号化再生
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();プレーヤーの破棄
プレーヤーを同期的または非同期的に破棄できます。サンプルコード:
// 同期的にプレーヤーを破棄します。システムが自動的に stop 操作を呼び出します。
aliPlayer.release();
// 非同期的にプレーヤーを破棄します。システムが自動的に stop 操作を呼び出します。
aliPlayer.releaseAsync(); 同期的な破棄操作は、プレーヤーのリソースが解放された後に結果を返します。UI の応答速度が非常に重要である場合は、非同期的な破棄操作を呼び出すことを推奨します。使用上の注意点:
非同期破棄中は、プレーヤーオブジェクトに対して他の操作を実行しないでください。
非同期破棄操作には非同期の stop 処理が含まれるため、非同期破棄操作を呼び出す前に手動で stop を呼び出す必要はありません。
プレーヤーのステータス監視
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 形式の追加エラー情報が含まれます。例:
//{ "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) {
// ローディングの進捗状況(パーセントおよびネットワーク速度)を表示します。
// 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 を使用すると、再生時の表示設定を構成できます。たとえば、動画画像のスケーリング、回転、ミラー表示などを指定できます。
パディング
縦横比を維持したまま表示領域に収める「アスペクト比フィット」、縦横比を維持したまま表示領域を埋める「アスペクト比フィル」、表示領域を埋めるために伸縮する「ストレッチフィル」の 3 種類のスケーリングモードをサポートしており、setScaleMode インターフェイスで実装されます。以下に例を示します:
// 表示領域に収まるように動画を縮小します。動画のアスペクト比は維持されます。
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 を呼び出して、ミラー表示モードを指定します。水平方向のミラー表示、垂直方向のミラー表示、およびミラー表示なしの 3 種類がサポートされています。サンプルコード:
// 動画画像に対してミラー表示を行いません。
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();
}
}
});再生時間の取得
動画の総再生時間を照会できます。動画の再生時間が取得できるのは、動画が読み込まれた後のみです。onPrepared イベントが発生した後に getDuration を呼び出して、動画の再生時間を取得します。サンプルコード:
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);音声と動画の非同期(AV Not Sync)通知コールバック
極端な条件下(例:4K 再生時のソフトウェアデコード、低性能デバイスでの HD 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(), "非同期が開始されました" , Toast.LENGTH_SHORT).show();
}
@Override
public void onAVNotSyncEnd() {
Toast.makeText(getContext(), "非同期が終了しました" , Toast.LENGTH_SHORT).show();
}
});ボリュームの指定
ミュートモードおよび音量を設定できます。
音量の変更
動画の音量を最大で元の 2 倍まで変更できます。音量を 1 より大きい値に設定するとノイズが発生する可能性があるため、音量を 1 より大きい値に設定することは推奨しません。setVolume を呼び出して音量を変更します。また、現在の音量を照会することもできます。サンプルコード:
// 音量を 0 ~ 2 の実数で設定します。
aliPlayer.setVolume(1f);
// 音量を取得します。
aliPlayer.getVolume();ミュート設定
再生中の動画をミュートにするには、setMute を呼び出します。サンプルコード:
aliPlayer.setMute(true);再生速度の設定
ApsaraVideo Player SDK for Android を使用すると、setSpeed を呼び出して再生速度を変更できます。0.5 倍~5 倍の再生速度がサポートされており、音声のピッチは再生速度に関係なく一定です。サンプルコード:
// 0.5 倍~5 倍の再生速度がサポートされています。一般的な再生速度は 0.5 倍単位(例:0.5 倍、1 倍、1.5 倍など)です。
aliPlayer.setSpeed(1.0f);マルチ解像度設定
詳細なコード例については、「API-Example の MultiResolution モジュールをご参照ください。この Java ベースのサンプルプロジェクトでは、ApsaraVideo Player SDK for Android の主要機能の統合方法を紹介しています。
UrlSource ベースのライブストリーミング
詳細については、「標準ライブストリーミング再生」をご参照ください。
VidAuth または VidSts ベースの再生
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);解像度切り替え通知
定義の切り替えの成功時と失敗時のコールバックを設定します。
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 は音声トラックの切り替えをサポートしており、動画再生中に複数言語の音声トラックを切り替えることができます。
使用上の注意点
MP4 ストリーム、シングルビットレート混合 HLS ストリーム、シングルビットレート HLS ストリーム内の音声トラック、マルチビットレート混合 HLS ストリーム内のサブストリームなど、リスト再生で使用されないストリームにおいて、音声トラックの切り替えが可能です。以下の表に、さまざまなタイプの動画ストリームを示します。
動画ストリームの種類 | ファイル拡張子 | ビットレート数 | サブ-M3U8 ファイル数 | サブストリームの種類 | 切り替えに関する注意点 |
リスト再生で使用されないストリーム(例:MP4 ストリーム) | .mp4 | 1 | - | 1 つの動画トラック、複数の音声トラック、複数の字幕トラックを含むストリーム。 | 音声トラック間の切り替えが可能です。 |
シングルビットレート混合 HLS ストリーム | .m3u8 | 1 | 1 | 1 つの動画トラック、複数の音声トラック、複数の字幕トラックを含むストリーム。 | 音声トラック間の切り替えが可能です。 |
シングルビットレート HLS ストリーム | .m3u8 | 1 | n | m3u8:各サブストリームは、動画ストリーム、音声ストリーム、キャプションストリームのいずれかである必要があります。 | 音声トラック間の切り替えが可能です。 |
マルチビットレート混合 HLS ストリーム | .m3u8 | n | n | 1 つの動画トラック、複数の音声トラック、複数の字幕トラックを含む M3U8 ストリーム。サブストリームは異なるビットレートを持ちます。 | サブストリーム間の切り替えが可能です。ただし、サブストリーム内の音声トラック間の切り替えはできません。 |
使用例
コールバックを設定します。
aliPlayer.setOnSubTrackReadyListener(new IPlayer.OnSubTrackReadyListener() { @Override // onSubTrackReady コールバックを設定します。ほとんどの場合、onSubTrackReady コールバックは prepare コールバックよりも前に発生します。 public void onSubTrackReady(MediaInfo mediaInfo) { if (mPlayerTrackFragment != null) { //mPlayerTrackFragment.showMediaInfo(); // getSubMediaInfo 操作を呼び出して応答から MediaInfo を取得します。onSubTrackReady コールバックが発生した後に getSubMediaInfo 操作を呼び出す必要があります。それ以外の場合、空文字列が返されます。 MediaInfo subMediaInfo = aliPlayer.getSubMediaInfo(); TrackInfos = subMediaInfo.getTrackInfos(); // 切り替えたいトラックを検索します。 myTrack = myfunc(TrackInfos) } } });目的のトラックに切り替えます。
index = myTrack.getIndex(); aliPlayer.selectTrack(index);
サムネイルの使用
詳細なコード例については、「API-Example の Thumbnail モジュールをご参照ください。この Java ベースのサンプルプロジェクトでは、ApsaraVideo Player SDK for Android の主要機能の統合方法を紹介しています。
ApsaraVideo Player SDK でサムネイルを使用する前に、動画に対してサムネイルの設定が行われていることを確認してください。具体的には、動画のスプライトスナップショットを生成します。ApsaraVideo VOD コンソールでスナップショットテンプレートを作成し、「スナップショットの種類」に「イメージスプライト」を選択します。その後、このテンプレートを使用して動画を処理するワークフローを作成します。詳細については、「動画スナップショット」をご参照ください。以下のサンプルコードは、ApsaraVideo Player SDK でサムネイルを使用する方法を示しています:
mAliPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {
@Override
public void onPrepared() {
// 1. ThumbnailHelper クラスを作成します。
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 を使用すると、SDK ログが生成されます。ログには、リクエストステータス、呼び出し結果、権限申請結果などの詳細な情報が含まれます。SDK ログを表示することで、コードのデバッグおよび問題のトラブルシューティングを行い、開発を支援できます。SDK ログを取得する方法は以下のとおりです。
方法 1:開発ツールのコンソール経由でプレーヤー SDK ログを取得
この方法では、ローカルデバイス上でログをキャプチャします。デバイス上でエラーを確実に再現できる場合に適しています。
ログ記録機能を有効化し、ログレベルを設定します。
// ログは 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);フレームレベルのログを設定します。
// フレームレベルのログ出力を設定します。 // value パラメーターの有効値:0 および 1。0 の場合、無効。1 の場合、有効。 Logger.getInstance(this).setLogOption(Logger.LogOption.FRAME_LEVEL_LOGGING_ENABLED,value);説明この機能は、トラブルシューティングのシナリオで使用されます。
ログを収集します。
エラーを再現し、Logcat などの開発ツールのコンソールからエラーログを取得します。
方法 2:LogCallback を設定して ApsaraVideo Player SDK ログを受信
この方法では LogCallback を使用します。クライアント側でエラーが発生するものの、デバイス上でエラーを確実に再現およびログをキャプチャできない場合に適しています。LogCallback を呼び出して ApsaraVideo Player SDK のログ出力をリッスンし、エラーログをアプリケーションのログチャンネルに自動的にエクスポートできます。
ログ記録機能を有効化し、ログレベルを設定します。
// ログは 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(new Logger.OnLogCallback(){ @Override public void onLog(Logger.LogLevel logLevel,String s){ // ログ。 } });ログを収集します。
エラーが発生した後、システムが自動的にエラーログをアプリケーションのログチャンネルにエクスポートします。
参照
詳細については、「API リファレンス」をご参照ください。
高度な機能については、「高度な機能」をご参照ください。
一般的な再生エラーおよび対応する解決策については、「再生エラーのトラブルシューティング」、「Android プレーヤーのよくある質問」、「モバイルエラーコード」をご参照ください。