このトピックでは、ApsaraVideo Player SDK for Android の基本機能の使用方法について説明します。再生ソースの設定、音量と再生速度の調整、解像度と音声トラックの切り替えなどの方法を学びます。
デモを実行してテストするには、ApsaraVideo Player SDK をダウンロードし、「デモの実行」に従ってコンパイルおよび実行してください。
ビデオソースの設定
ApsaraVideo Player SDK for Android は、ビデオオンデマンド (VOD) とライブストリーミングの両方の再生をサポートしています。
VOD の再生方法: VidAuth (ApsaraVideo VOD ユーザーに推奨)、VidSts、UrlSource、暗号化再生。
ライブストリームの再生方法: UrlSource と暗号化再生。
UrlSource は URL からメディアを再生します。VidSts と VidAuth はメディア ID (Vid) を使用してメディアを再生します。
サポートされているリージョンについては、「ApsaraVideo VOD リージョン ID」をご参照ください。
VOD 再生
VidAuth (推奨)
VidAuth を使用して VOD ビデオを再生するには、vid プロパティをメディア ID に設定し、playAuth プロパティを再生認証情報に設定します。
メディア ID:メディアファイルをアップロードした後にメディア ID を取得できます。ApsaraVideo VOD コンソールで、[Media Files] > [Audio/Video] を選択します。また、SearchMedia API を呼び出すこともできます。
再生認証情報:GetVideoPlayAuth API を呼び出して再生認証情報を取得します。手動での署名生成を避けるために、ApsaraVideo VOD のサーバーサイド SDK を統合することを推奨します。例については、OpenAPI Explorer をご参照ください。
ApsaraVideo VOD ユーザーには、VidSts よりも VidAuth を使用することを推奨します。VidAuth の方がユーザビリティとセキュリティに優れているためです。詳細については、「認証情報方式と STS 方式の比較」をご参照ください。
ApsaraVideo VOD コンソールで HLS 暗号化パラメーターのパススルーを有効にすると、デフォルトのパラメーター名は MtsHlsUriToken です。詳細については、「HLS 暗号化のパラメーターパススルー」をご参照ください。
サンプルコード:
VidAuth vidAuth = new VidAuth();
vidAuth.setVid("Vid"); // 必須。 ビデオ ID (VideoId) 。
vidAuth.setPlayAuth("<yourPlayAuth>"); // 必須。 GetVideoPlayAuth から取得した再生認証情報。
vidAuth.setRegion("region-id"); // SDK V5.5.5.0 以降では非推奨です。プレーヤーはリージョンを自動的に解析します。以前のバージョンでは、このパラメーターは必須です。デフォルト: cn-shanghai。
// vidAuth.setAuthTimeout(3600); // オプション。 再生 URL の有効期間を秒単位で設定します。この値は、ApsaraVideo VOD コンソールで設定された有効期間を上書きします。デフォルト: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 認証情報を使用します。VidSts を使用して VOD ビデオを再生する前に、STS トークンと AccessKey ペア (AccessKey ID と AccessKey Secret) を取得する必要があります。詳細については、「STS トークンの取得」をご参照ください。
ApsaraVideo VOD コンソールで HLS 暗号化パラメーターのパススルーを有効にした場合、デフォルトのパラメーター名は MtsHlsUriToken です。 詳細については、「HLS 暗号化のパラメーターパススルー」をご参照ください。
サンプルコード
VidSts vidSts = new VidSts();
vidSts.setVid("Vid"); // 必須。 ビデオ ID (VideoId) 。
vidSts.setAccessKeyId("<yourAccessKeyId>"); // 必須。 STS (AssumeRole) から取得した一時的な AccessKey ID。
vidSts.setAccessKeySecret("<yourAccessKeySecret>"); // 必須。 STS (AssumeRole) から取得した一時的な AccessKey Secret。
vidSts.setSecurityToken("<yourSecurityToken>"); // 必須。 AssumeRole から取得した STS トークン。
vidSts.setRegion("RegionID"); // 必須。 ApsaraVideo VOD のリージョン。デフォルト: cn-shanghai。
// vidSts.setAuthTimeout(3600); // オプション。 再生 URL の有効期間を秒単位で設定します。この値は、ApsaraVideo VOD コンソールで設定された有効期間を上書きします。デフォルト:3600。再生中に URL の有効期限が切れないように、ビデオの長さを超える値を設定してください。
// ApsaraVideo VOD コンソールで HLS 暗号化パラメーターのパススルーを有効にする場合、デフォルトのパラメーターは MtsHlsUriToken です。config を指定し、vidSts データソースとあわせて渡します。
// 有効になっていない場合、以下の設定は不要です。
VidPlayerConfigGen vidConfig = new VidPlayerConfigGen();
vidConfig.setMtsHlsUriToken("<yourMtsHlsUriToken>");
vidSts.setPlayerConfig(vidConfig);
aliPlayer.setDataSource(vidSts);UrlSource
UrlSource を使用して VOD ビデオを再生するには、再生 URL を直接渡します。
ApsaraVideo VOD から再生 URL を取得するには、GetPlayInfo API を呼び出します。ApsaraVideo VOD のサーバーサイド SDK を統合することを推奨します。例については、OpenAPI Explorer をご参照ください。
ローカルファイルの場合は、
/sdcard/video/sample.mp4やcontent://media/video/123などのフルパスを使用し、そのファイルへのアクセス権限があることを確認してください。
UrlSource urlSource = new UrlSource();
urlSource.setUri("your-playback-url"); // 必須。 VOD URL、サードパーティ URL、またはローカルファイルパス。
aliPlayer.setDataSource(urlSource);暗号化再生
VOD ビデオは、HLS 暗号化、Alibaba Cloud 独自暗号化、DRM 暗号化をサポートしています。再生については、「暗号化されたビデオの再生」をご参照ください。
ライブストリームの再生
ライブストリームの再生については、「標準ライブストリーミング再生」をご参照ください。
再生の制御
ApsaraVideo Player SDK for Android は、再生の開始、一時停止、停止、シークを行うためのメソッドを提供します。
プレーヤーの準備
prepare を呼び出し、メディアデータをロードしてパースします。
aliPlayer.prepare();再生の開始
start を呼び出して、再生を開始または再開します。
aliPlayer.start();特定の位置へのシーク
特定の位置にジャンプするには、seekTo を呼び出します。このメソッドは、ユーザーがプログレスバーをドラッグする場合や、保存した位置から再生を再開する場合に便利です。
// ターゲット時間をミリ秒単位で指定します。
aliPlayer.seekTo(long position);prepare を呼び出す前に再生開始位置を設定するには、setStartTime を使用します。この設定は、prepare の呼び出しごとに 1 回だけ有効になり、その後自動的にクリアされます。
// 開始位置をミリ秒単位で設定します。seekMode は、正確なシークか不正確なシークかを指定します。
aliPlayer.setStartTime(time, seekMode);再生の一時停止
pause を呼び出して再生を一時停止します。
aliPlayer.pause();再生の停止
stop を呼び出して再生を停止します。
aliPlayer.stop();プレーヤービューのバインド解除
再生を停止した後、プレーヤーインスタンスを破棄する前に、プレーヤービューのバインドを解除してレンダリングリソースを解放し、メモリリークを防ぎます。使用しているプレーヤービューのタイプに基づいて、バインド解除メソッドを選択します。
SurfaceView / TextureView
setSurface に null を指定して呼び出し、バインドを解除します。
// プレーヤービューのバインドを解除
aliPlayer.setSurface(null);AliDisplayView
バインドを解除するには、setDisplayView を null で呼び出します。
// プレーヤービューのバインドを解除
aliPlayer.setDisplayView(null);プレーヤービューのバインドは、stop を呼び出した後、release または releaseAsync を呼び出す前に解除します。完全な再生終了シーケンスは、stop → ビューのバインド解除 → release / releaseAsync です。
プレーヤーの破棄
プレーヤーは同期的または非同期的に破棄できます。
// 同期的な破棄。 プレーヤーリソースが解放されるまでブロックします。自動的に stop を呼び出します。
aliPlayer.release();
// 非同期的な破棄。 すぐに戻ります。自動的に stop を呼び出します。
aliPlayer.releaseAsync();UI 応答速度に高い要件がある場合は、releaseAsync を使用してください。次の点にご注意ください。
非同期の破棄中は、プレーヤーオブジェクトに対して一切の操作を行わないでください。
非同期破棄には非同期停止プロセスが含まれているため、
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 文字列で提供します。例:
//{ "Url": "xxx",
// "Module": "NetWork",
// "ModuleCode": "-377",
// "ModuleMessage": "Redirect to a url that is not a media"}
// ModuleCode の値は、必ずしも errorCode の値と同じではないことにご注意ください。
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;
*/
}
});ビデオ表示の設定
再生中にビデオをどのようにスケーリング、回転、ミラーリングするかを設定します。
スケーリングモード
SDK は 3 つのスケーリングモードをサポートしています:
// アスペクト比を維持したままビューに収まるようにスケーリングします (レターボックス)。
aliPlayer.setScaleMode(ScaleMode.SCALE_ASPECT_FIT);
// アスペクト比を維持したままビューを埋めるようにスケーリングします (クロッピング)。
aliPlayer.setScaleMode(ScaleMode.SCALE_ASPECT_FILL);
// ビューを埋めるように引き伸ばします。アスペクト比は維持されません。画像の歪みが発生する可能性があります。
aliPlayer.setScaleMode(ScaleMode.SCALE_TO_FILL);回転
setRotateMode を呼び出してビデオを回転させます。getRotateMode で現在の回転角度を取得できます。
// 回転なし。
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);再生情報の取得
再生中に、再生進捗、再生時間、バッファリング進捗を取得できます。
再生進捗
onInfo コールバックで、getExtraValue を呼び出して現在の再生位置をミリ秒単位で取得します。
aliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
@Override
public void onInfo(InfoBean infoBean) {
if(infoBean.getCode() == InfoCode.CurrentPosition){
// 現在の再生位置 (ミリ秒)。
long extraValue = infoBean.getExtraValue();
}
}
});総再生時間
動画の再生時間は、メディアがロードされた後にのみ取得できます。getDuration は、onPrepared コールバックがトリガーされた後に呼び出してください。
long duration = aliPlayer.getDuration();実際の再生時間
実際の再生時間をリアルタイムで取得できます。この値には、再生が一時停止またはバッファリングされている時間は含まれません。
long playedDuration = aliPlayer.getPlayedDuration(); バッファリング進捗
onInfo コールバックでは、InfoCode.BufferedPosition を確認して現在のバッファリング進捗を取得します。
aliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
@Override
public void onInfo(InfoBean infoBean) {
if(infoBean.getCode() == InfoCode.BufferedPosition){
// 現在のバッファリング進捗 (ミリ秒)。
long extraValue = infoBean.getExtraValue();
}
}
});リアルタイムのレンダリングとビットレートのメトリクス
レンダリングフレームレート、オーディオとビデオのビットレート、ネットワークの下りビットレートをリアルタイムで取得します。
// ビデオレンダリングのフレームレート。float 値を返します。
aliPlayer.getOption(IPlayer.Option.RenderFPS);
// ビデオビットレート。bit/s 単位の float 値を返します。
aliPlayer.getOption(IPlayer.Option.VideoBitrate);
// オーディオビットレート。bit/s 単位の float 値を返します。
aliPlayer.getOption(IPlayer.Option.AudioBitrate);
// ネットワークの下りビットレート。bit/s 単位の float 値を返します。
aliPlayer.getOption(IPlayer.Option.DownloadBitrate);A/V 同期ズレイベントの処理
4K 再生中のソフトウェアデコードや、ローエンドデバイスでの HD H.265 ストリームの高速再生など、極端な条件下では、デコード性能が再生速度に追いつかなくなることがあります。SDK はコールバックをトリガーして、このイベントを通知します。
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 detected" , Toast.LENGTH_SHORT).show();
}
@Override
public void onAVNotSyncEnd() {
Toast.makeText(getContext(), "Out-of-sync resolved" , Toast.LENGTH_SHORT).show();
}
});音量の制御
音量の変更
setVolume を呼び出して音量を変更します。有効な値の範囲は 0 から 2 で、1 は元の音量を表します。1 より大きい値は音声を増幅し、ノイズが発生する可能性があります。音量を 1 より大きい値に設定しないことをお勧めします。
// 音量を設定します。有効な値:0〜2。
aliPlayer.setVolume(1f);
// 現在の音量を取得します。
aliPlayer.getVolume();プレーヤーのミュート
setMute を呼び出して、プレーヤーをミュートまたはミュート解除します。
aliPlayer.setMute(true); 再生速度の設定
setSpeed を呼び出して再生速度を変更します。有効な値の範囲は 0.5 から 5 です。速度が異なっても、音声のピッチは変わりません。
// 一般的な速度: 0.5x、1x、1.5x、2x。
aliPlayer.setSpeed(1.0f);解像度の切り替え
詳細なコード例については、API-Example プロジェクトの MultiResolution モジュールをご参照ください。
UrlSource ベースのライブストリーミング
詳細については、「標準ライブストリーミング再生」をご参照ください。
VidAuth または VidSts ベースの再生
VOD 再生に VidAuth または VidSts を使用する場合、SDK は 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);ループ再生の有効化
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) | .mp4 | 1 | 1 つのビデオトラック、複数の音声トラックと字幕トラック | 音声トラックを切り替えられます。 |
シングルビットレート混合 HLS | .m3u8 | 1 | 1 つのビデオトラック、複数の音声トラックと字幕トラック | 音声トラックを切り替えられます。 |
シングルビットレート HLS | .m3u8 | 1 | 個別のビデオ、オーディオ、キャプションのサブストリーム | 音声トラックを切り替えられます。 |
マルチビットレート混合 HLS | .m3u8 | n | ビットレートが異なるサブストリーム、各サブストリームに 1 つのビデオと複数の音声トラック | サブストリーム内での音声トラック切り替えはできず、サブストリーム間の切り替えのみ可能です。 |
使用例
onSubTrackReadyコールバックを設定します。このコールバックは通常、onPreparedコールバックの前にトリガーされます。aliPlayer.setOnSubTrackReadyListener(new IPlayer.OnSubTrackReadyListener() { @Override // onSubTrackReady。通常、onPrepared コールバックの前にトリガーされます。 public void onSubTrackReady(MediaInfo mediaInfo) { if (mPlayerTrackFragment != null) { //mPlayerTrackFragment.showMediaInfo(); // このコールバックがトリガーされた後に getSubMediaInfo を呼び出します。このコールバックの前に呼び出すと、空の結果が返されます。 MediaInfo subMediaInfo = aliPlayer.getSubMediaInfo(); TrackInfos = subMediaInfo.getTrackInfos(); // トラックリストからターゲットの音声トラックを見つけます。 myTrack = myfunc(TrackInfos) } } });ターゲットの音声トラックに切り替えます。
index = myTrack.getIndex(); aliPlayer.selectTrack(index);
サムネイルの使用
詳細なコード例については、API-Example プロジェクトの Thumbnail モジュールをご参照ください。
サムネイルを使用する前に、ビデオのスプライトスナップショットを設定する必要があります。ApsaraVideo VOD コンソールで、スナップショットタイプとして [Sprite] を指定したスナップショットテンプレートを作成し、ビデオを処理するワークフローを作成します。詳細については、「ビデオスナップショット」をご参照ください。
mAliPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {
@Override
public void onPrepared() {
// 1. スプライトスナップショットの URL を使用して 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 ログの取得
SDK ログには、リクエストステータス、呼び出し結果、権限リクエストなどの詳細情報が含まれています。これらのログを使用して、開発中の問題をデバッグできます。SDK はログを取得するための 2 つの方法を提供します。
方法 1:開発ツールのコンソールでログを表示する
この方法は、デバイスで問題を確実に再現できる場合に使用します。
ロギングを有効にし、ログレベルを設定します。
// ログは 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 を設定してプログラムでログを受信する
この方法は、デバイスで問題を確実に再現できない場合に使用します。コールバックは、ログをアプリケーションのログチャネルにエクスポートします。
ロギングを有効にし、ログレベルを設定します。
// ログは com.cicada.player.utils 配下に保存されます。 // デフォルト: AF_LOG_LEVEL_INFO。トラブルシューティングには AF_LOG_LEVEL_TRACE を使用します。 Logger.getInstance(context).setLogLevel(Logger.LogLevel.AF_LOG_LEVEL_INFO); Logger.getInstance(context).setLogCallback(new Logger.OnLogCallback(){ @Override public void onLog(Logger.LogLevel logLevel, String s){ // ログエントリを処理します。 } });エラーが発生すると、SDK は自動的にエラーログをアプリケーションのログチャネルにエクスポートします。
関連ドキュメント
API の詳細については、「API リファレンス」をご参照ください。
高度なプレーヤー機能を使用するには、「高度な機能」をご参照ください。
再生の問題をトラブルシューティングするには、「ビデオ再生の問題のトラブルシューティング」、「Android プレーヤー FAQ」、「モバイルエラーコード」をご参照ください。