このトピックでは、ApsaraVideo Player SDK for Android の使用時に発生する可能性のある一般的な問題とその解決策について説明します。
ライセンス関連の問題
無効または期限切れのライセンスに関する問題は、「ライセンスに関する FAQ」をご参照ください。
プラットフォーム共通の問題
プラットフォームに依存しない問題については、「クロスプラットフォームプレーヤーの FAQ」をご参照ください。
経験豊富な開発者は、独自に再生エラーのトラブルシューティングを行うこともできます。
開発に関する問題
現在の再生進捗の取得
プレーヤー SDK は、デフォルトで 500 ms ごとに再生進捗を報告します。コールバック間隔を短縮することで、現在の再生進捗をより頻繁に取得できます。
// コールバック間隔を変更します。
PlayerConfig config = mAliyunLivePlayer.getConfig();
config.mPositionTimerIntervalMs = 100; // コールバック間隔 (ms 単位)。
mAliyunLivePlayer.setConfig(config);
mAliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
@Override
public void onInfo(InfoBean infoBean) {
if(infoBean.getCode() == InfoCode.CurrentPosition){
// 現在の再生進捗。
long currentPosition = infoBean.getExtraValue();
}
}
});raw オーディオ/ビデオデータの取得
raw オーディオ/ビデオデータは、ソフトウェアデコーディングに切り替えて暗号化されていないビデオを再生する場合にのみ返されます。
// ソフトウェアデコーディングに切り替えます。
mAliPlayer.enableHardwareDecoder(false);
IPlayer.RenderFrameCallbackConfig renderFrameCallbackConfig = new IPlayer.RenderFrameCallbackConfig();
// ビデオデータのアドレスのみを返すかどうかを指定します。デフォルト値: true。
renderFrameCallbackConfig.mVideoDataAddr = false;
// オーディオデータのアドレスのみを返すかどうかを指定します。デフォルト値: false。
renderFrameCallbackConfig.mAudioDataAddr = false;
mAliPlayer.setRenderFrameCallbackConfig(renderFrameCallbackConfig);
mAliPlayer.setOnRenderFrameCallback(new IPlayer.OnRenderFrameCallback() {
@Override
public boolean onRenderFrame(FrameInfo frameInfo) {
return false;
}
});ビデオの幅と高さの取得
ビデオの幅と高さは、以下の方法で取得できます。
ApsaraVideo Player の
AliPlayerインスタンスがprepareメソッドを実行した後、インスタンスが少なくとも準備完了状態であることを確認し、次のメソッドを呼び出します。
mAliyunPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {
@Override
public void onPrepared() {
mAliyunPlayer.getVideoWidth();
mAliyunPlayer.getVideoHeight();
}
});ビデオサイズの変更コールバックをリッスンします。
mAliyunPlayer.setOnVideoSizeChangedListener(new IPlayer.OnVideoSizeChangedListener() {
@Override
public void onVideoSizeChanged(int width, int height) {
}
});トラックごとに値を取得します。
mAliyunPlayer.setOnTrackReadyListener(new IPlayer.OnTrackReadyListener() {
@Override
public void onTrackReady(MediaInfo mediaInfo) {
List<TrackInfo> trackInfos = mediaInfo.getTrackInfos();
for (TrackInfo trackInfo : trackInfos) {
if(trackInfo.getType() == TrackInfo.Type.TYPE_VIDEO){
trackInfo.getVideoWidth();
trackInfo.getVideoHeight();
}
}
}
});プレーヤー内の各ビデオフレームのピクセルデータの取得
Android プレーヤーの場合、OnRenderFrameCallback コールバックをリッスンします。
player.setOnRenderFrameCallback(frameInfo -> {
if (frameInfo.frameType == FrameInfo.FrameType_video) {
// ビデオデータ
} else {
// オーディオデータ
}
return false;
});自動ビットレート切り替えロジック
mAliPlayer.selectTrack(TrackInfo.AUTO_SELECT_INDEX) を呼び出して自動ビットレート切り替えを有効にすると、プレーヤー SDK は現在のネットワーク速度を追跡します。10 秒以内に次のビットレートに達した場合、プレーヤーはそのビットレートに切り替えます。10 秒以内に次のビットレートに達しない場合、切り替えは行われません。
高ビットレートから低ビットレートに切り替える際、ネットワーク速度が 10 秒以内に次のビットレートに達した場合、プレーヤーはキャッシュされた高ビットレートのコンテンツの再生を終えてから切り替えます。
低ビットレートから高ビットレートに切り替える際、ネットワーク速度が 10 秒以内に次のビットレートに達した場合、プレーヤーはすぐに切り替えます。
自動ビットレート切り替えを使用するには、まずコンソールでビデオをアダプティブビットレートストリームにトランスコードし、次にプレーヤーがアダプティブビットレートストリームを取得するように設定します。次の例では、
VidAuth再生方式を使用します。
VidAuth vidAuth = new VidAuth();
List<Definition> list = new ArrayList<>();
list.add(Definition.DEFINITION_AUTO);
vidAuth.setDefinition(list);カスタムリトライロジック
ネットワークリトライのシナリオでは、プレーヤー SDK はデフォルトで 2 回リトライし、ネットワークタイムアウトは 15 秒です。リトライが失敗すると、Error コールバックがトリガーされます。
カスタムリトライロジックを使用すると、リトライイベントがアプリケーションに報告され、アプリケーションが実際のリトライ動作を決定できます。
PlayerConfig config = mAliPlayer.getConfig();
// 1. リトライ回数を設定します。この例では 0 に設定されています。
config.mNetworkRetryCount = 0;
mAliPlayer.setConfig(config);
mAliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
@Override
public void onInfo(InfoBean infoBean) {
// 2. リトライイベントをリッスンします。
if(infoBean.getCode() == InfoCode.NetworkRetry){
// TODO: 必要に応じてロジックを処理します。
}
}
});Alibaba Real-Time Communication (ARTC) ストリーム再生中の unsupported protocol エラー
原因 1:プレーヤー SDK は統合されていますが、プレーヤーと RTS 低遅延ライブストリーミングコンポーネント (AlivcArtc) 間のブリッジレイヤー、および RTS 低遅延ライブストリーミングコンポーネント (RtsSDK) が統合されていません。
解決策:「Android での RTS ストリームプリングの実装」に従って統合してください。
原因 2:ブリッジレイヤー (AlivcArtc) のバージョンがプレーヤーのバージョンと一致しません。
解決策:ブリッジレイヤー (AlivcArtc) とプレーヤーは同じバージョン番号を使用する必要があります。実装については、「Android での RTS ストリームプリングの実装」をご参照ください。
原因 3:RTS 低遅延ライブストリーミングコンポーネント (RtsSDK) がロードされていません。
解決策:要件に応じて、Application ファイルまたはターゲットの Activity で RTS 低遅延ライブストリーミングコンポーネント (RtsSDK) をロードしてください。
static {
System.loadLibrary("RtsSDK");
}原因 4:minSDK のバージョンが高すぎるため、ブリッジレイヤー (AlivcArtc) が正しくロードされません。
解決策:
// 1. minSdk を変更します
// minSdk を 21 にダウングレードします
// 2. ARTC ライブラリを手動でロードします
static {
System.loadLibrary("RtsSDK");
System.loadLibrary("cicada_plugin_artcSource");
}シーク操作後にプログレスバーが逆戻りする
原因:プレーヤーはデフォルトで不正確なシークを使用します。シーク操作後、プレーヤーはシークポイントに最も近いキーフレームから再生を開始します。
解決策:正確なシークモードに切り替えてください。
正確なシークと不正確なシークモードの切り替え方法
次の例は、シークモードの切り替え方法を示しています。
// 不正確なシーク。
mAliPlayer.seekTo(1000);
mAliPlayer.seekTo(1000, IPlayer.SeekMode.Inaccurate);
// 正確なシーク。
mAliPlayer.seekTo(1000,IPlayer.SeekMode.Accurate);正確なシークモードに切り替えてもプログレスバーが逆戻りする
原因:正確なシークは、不正確なシークよりも時間がかかります。シークポイントから最も近いキーフレーム (GOP の開始点) までの距離が大きすぎて、最大正確シーク間隔を超えると、プレーヤー SDK は自動的に不正確なシークにフォールバックし、プログレスバーが逆戻りします。
解決策:インターフェースを通じて最大正確シーク間隔を増やしてください。これにより、正確なシークが不正確なシークにフォールバックする頻度が減り、シークの精度が向上します。ただし、シークポイントから最も近いキーフレーム (GOP) までの距離が長いほど、シーク時間も長くなります。ビジネスの特性に基づいて、最大正確シーク間隔を設定してください。
// 単位: ms。
mAliPlayer.setMaxAccurateSeekDelta(10000);ローカルキャッシュ:キャッシュディレクトリを内部ストレージディレクトリに設定可能か
はい。Android デバイスの外部ストレージディレクトリを内部ストレージディレクトリに置き換えることができます。内部ストレージディレクトリにアクセス権限があれば、キャッシュは正常に機能します。
ビデオキャッシュ中の encrypt check fail エラー
キャッシュはダウンロード操作です。セキュアダウンロードが有効になっている場合は、暗号化検証ファイルがアプリ情報と一致していることを確認してください。「オフラインダウンロード」で生成された暗号化検証ファイルをダウンロードし、プレーヤー SDK に保存してください。詳細については、「ビデオダウンロード」をご参照ください。不一致があると、キャッシュまたはダウンロードが失敗します。
ローカルキャッシュ有効後のマルチビットレート (HLS) ビデオのキャッシュミス
症状:ドキュメントの説明に従ってローカルキャッシュとプリロードを有効にしましたが、次の一つ以上の事象が発生します。
すでに再生された位置にシークバックしてもキャッシュにヒットしません。
ネットワークが切断されると再生を続行できません。
isCacheExistがfalseを返します。プリロードを無効にすると、キャッシュディレクトリが空になります。
原因:マルチビットレート (HLS) のシナリオでは、再生中にストリームを明示的に選択しない場合、プレーヤーはアダプティブビットレートストリーミング (ABR) を使用します。ABR モードのデータはディスクに書き込まれないため、ローカルキャッシュは生成されません。明示的に
selectTrackを呼び出して選択したストリームのみがローカルにキャッシュされます。selectTrackを呼び出さない場合、またはTrackInfo.AUTO_SELECT_INDEXを渡した場合、プレーヤーは再生を ABR として処理します。
解決策:プリロードと再生で同じ画質と再生 URL を使用し、再生中にそのストリームを明示的に選択する必要があります。
プリロード中に、ローカルキャッシュを有効にし、指定された画質のストリームをプリロードしてください。
再生中に、
setOnPreparedListenerのonPreparedコールバックでselectTrackを呼び出して、プリロードに使用したのと同じ画質を選択してください。プリロードに使用したのと同じ再生 URL をsetDataSourceに渡してから、prepareとstartを呼び出してください。起動時のビットレートがデフォルトで開かれるビットレートと異なる場合、バッファリングがトリガーされます。
setDefaultBandWidthを呼び出して起動時のビットレートを設定し、切り替え時のカクつきを減らしてください。
オフラインダウンロードした HLS (m3u8) ビデオ再生時の No such file or directory エラー
症状:HLS をオフラインダウンロードした後、ローカルアドレスを再生すると No such file or directory が報告されます。この問題は必ずしも再現されるわけではなく、ページ間の素早いスワイプなどのシナリオでより頻繁に発生します。
原因:ストレージ容量を節約するため、HLS のオフラインダウンロードでは通常、540p のような 1 つの画質の TS セグメントと m3u8 ファイルのみをダウンロードします。しかし、ローカルに保存されたマスター m3u8 ファイルには、1080p、720p、540p、360p など、すべての画質のレコードが含まれています。prepare を呼び出す前にダウンロードした画質を指定しない場合、プレーヤーはデフォルトまたはアダプティブロジックに従い、ローカルに存在しない他の画質のセグメントをリクエストします。これにより、ファイルが見つからないというエラーが報告されます。この問題の一般的なトリガーとして、画質を指定する呼び出しの欠落や、prepare より後に行われる呼び出しが挙げられます。
解決策:
prepareの前にsetDefaultResolutionを呼び出して、オフラインダウンロードに使用したのと同じ画質を指定してください。素早いスワイプ、マルチインスタンスの再利用、プリロードの切り替えなどの分岐を含め、すべての再生エントリーポイントでデフォルトの画質が設定されていることを確認し、パスが漏れないようにしてください。
getCurrentTrackを呼び出して、起動時の再生で実際に使用されている画質がダウンロードされた画質であることを確認してください。
ビデオ切り替え後の音声と映像の同期ズレ、または同じビデオの再再生でのキャッシュミス
症状:ローカルキャッシュを有効にした後、エピソードの切り替えなどビデオを切り替えると、音声と映像が同期しなくなります。例えば、ビデオは新しいエピソードのものなのに、音声は前のエピソードのままという状態です。あるいは、同じビデオを再再生してもキャッシュにヒットしません。キャッシュをクリアすると通常の動作に戻ります。
原因:ローカルキャッシュを有効にすると、プレーヤーは setCacheUrlHashCallback コールバックから返されるハッシュを各再生 URL の一意のキャッシュ識別子として使用します。カスタムコールバックが、同じ再生 URL が常に同じハッシュを返し、異なるコンテンツが異なるハッシュを返すことを保証しない場合、キャッシュキーが不一致になります。その結果、異なるコンテンツが同じキャッシュにヒットし、音声と映像の同期ズレとして現れます。あるいは、同じ URL が毎回異なるハッシュを返し、キャッシュにまったくヒットしなくなります。
解決策:
コールバックは、同じ再生 URL に対しては常に同じハッシュを返し、異なるメディアに対しては異なるハッシュを返す必要があります。
キャッシュヒット率を向上させるために認証パラメーターを削除する場合、ハッシュを計算する前に再生 URL (m3u8 または mp4) からのみ削除してください。暗号化された m3u8 ファイルの keyURL からは認証パラメーターを削除しないでください。そうしないと、異なるビデオのキーが同じキャッシュにヒットし、再生が失敗します。コールバック内でドメイン名によって 2 つのケースを個別に処理できます。
同じファイルに HTTP アドレスと HTTPS アドレスの両方がある場合は、プロトコルを統一するか、ハッシュを計算する前にプロトコルヘッダーを削除してください。
詳細については、「ローカルキャッシュ」をご参照ください。
Alibaba Cloud 独自暗号化ビデオ再生時の認証失敗
症状:Alibaba Cloud 独自暗号化で暗号化されたビデオを再生すると、認証失敗が報告されるか、ビデオが再生できません。
原因:Alibaba Cloud 独自暗号化は、プレーヤーとサーバー間の相互作用を通じて復号を完了するため、再生は vid ベースの再生方式で開始する必要があります。標準の独自暗号化が施されたビデオの再生 URL を直接 ApsaraVideo VOD の UrlSource に渡すと、認証と復号が完了できず、再生が失敗します。
解決策:
ネイティブクライアントでは、ApsaraVideo VOD の
VidAuthまたはVidStsを介して独自暗号化ビデオを再生してください。出力ストリームに独自暗号化されていないストリームも含まれている場合は、VidPlayerConfigGen.setEncryptType(AliyunVoDEncryption)を呼び出して、独自暗号化されたストリームをフィルタリングしてください。License 独自暗号化のみが ApsaraVideo VOD の
UrlSource再生をサポートします。MP4 の場合、URL の末尾にetavirp_nuyila=1を追加してください。HLS の場合、バージョン 6.17.0 以降では元の URL を直接使用できます。これらのオプションは、標準の独自暗号化には適用されません。詳細については、「暗号化ビデオの再生」をご参照ください。
再生に関する問題
プレーヤー作成時のクラッシュ
原因の切り分けとして、以下を確認してください。
CPU アーキテクチャが x86 アーキテクチャであるかどうかを確認してください。
プレーヤー SDK は arm64-v8a および armeabi-v7a アーキテクチャのみをサポートしており、x86 アーキテクチャはサポートしていません。
プロジェクトでプレーヤー SDK の
.soファイルと Maven 依存関係が混在していないか確認してください。たとえば、
build.gradleで Maven 依存関係を介してプレーヤー SDK を統合し、さらにプロジェクトモジュールのlibsディレクトリにプレーヤー関連のダイナミックライブラリを統合している場合などです。
推奨される解決策:両方を使用している場合は、ダイナミックライブラリを削除し、Maven 依存関係を使用してください。ダイナミックライブラリを統合する必要がある場合は、プレーヤー SDK の .so ファイルに一貫性があり、同じバージョンからのものであることを確認してください。プレーヤー SDK の統合方法とダイナミックライブラリの取得方法については、「SDK の統合」をご参照ください。プレーヤー関連のダイナミックライブラリファイルは、libalivcffmpeg.so、libsaasCorePlayer.so、および libsaasDownloader.so です。
部分的なパッケージを統合した場合、AlivcFFmpeg のバージョン依存関係が正しいことを確認してください。
AlivcFFmpeg のバージョン依存関係については、「AlivcFFmpeg のバージョン依存関係」をご参照ください。
プレーヤー実行中のクラッシュ
原因の切り分けとして、以下を確認してください。
クラッシュがプレーヤー SDK 内で発生したかどうかを確認してください。
クラッシュスタックに
AliyunPlayerプレフィックスが含まれているかどうかを確認してください。含まれている場合、問題はプレーヤー SDK で発生しています。プレーヤー SDK の最新バージョンにアップグレードし、問題が修正されたかどうかを確認してください。
問題が解決しない場合は、関連するクラッシュファイル (すべてのスレッドを含む)、クラッシュログ、クラッシュシナリオの詳細を準備し、「問題ログの取得方法」をご参照ください。
ビデオ再生中に黒帯が表示される
原因の切り分けとして、以下を確認してください。
ソースビデオ自体に黒帯があるかどうかを確認してください。
次のインターフェースを介してプレーヤーのスケーリングモードを調整してください。
/*
SCALE_ASPECT_FILL: 画面に比例して塗りつぶします。ビデオはクロップされます。
SCALE_ASPECT_FIT: ビデオを比例してスケーリングします。黒帯が表示されることがあります。
SCALE_TO_FILL: 比率を維持せずに画面を塗りつぶします。ビデオは歪みます。
*/
mAliPlayer.setScaleMode();スケーリングモードが要件を満たさない場合は、アプリケーションレイヤーで
SurfaceViewまたはTextureViewのサイズを調整してください。
音声は再生されるが映像が表示されない
原因の切り分けとして、以下を確認してください。
別のプレーヤーでビデオを再生し、ビデオが音声のみであるかどうかを確認してください。
ビデオのレンダリングに使用されるビューが正しく設定されていることを確認してください。たとえば、プレーヤーに表示ビューが設定されていない、または表示ビューが再生インターフェースから削除されているなどです。表示ビューの設定方法については、「基本機能」の手順 4 をご参照ください。
読み取り権限があるローカルビデオ再生時の Invalid argument エラー
読み取り権限がすでにあるローカルビデオで Invalid argument エラーが発生した場合、ファイル名とファイルの絶対パスを確認してください。パスに中国語文字やスペースが含まれないようにしてください。
読み取り権限があるローカルビデオ再生時の Permission denied エラー
Android 10 (Android Q) で対象範囲別ストレージ機能が導入されました。Android デバイスのストレージ権限を正常に使用するには、AndroidManifest.xml の application タグに android:requestLegacyExternalStorage="true" を追加してください。
ビデオ再生中に Redirect to a url エラーが時々発生する
このエラーは、ビデオソースがハイジャックされたことが原因で発生する可能性があります。プレーヤーの HTTPDNS 機能を有効にして対処してください。詳細については、「Android の HTTPDNS の設定」をご参照ください。
全画面再生中にノッチ付き画面で黒い通知バーが点滅する
この問題を解決するには、没入型ステータスバーを設定してください。
MOV ビデオの再生に失敗する
Android プレーヤー SDK は MOV ビデオをサポートしています。MOV ビデオの再生に失敗した場合は、ソースビデオの moov アトム (オーディオおよびビデオデータインデックス) が mdat アトム (オーディオおよびビデオデータ) の後にあるかどうかを確認してください。ソースビデオをトランスコードして、moov アトムを mdat アトムの前に移動してください。詳細については、「手順 2:ストリームのトラブルシューティング」をご参照ください。
初期化または再生中にプレーヤー SDK の .so ダイナミックライブラリが見つからないというエラー
原因の切り分けとして、以下を確認してください。
CPU アーキテクチャが要件を満たしているか確認してください。
プレーヤー SDK は、arm64-v8a および armeabi-v7a アーキテクチャ用のダイナミックライブラリのみを提供します。
プレーヤー SDK のバージョンが古すぎないか確認してください。
プレーヤー SDK のバージョンが 5.4.6.0-full 以前の場合は、5.4.6.0-full-15467853 以降にアップグレードしてください。プレーヤー SDK の最新および過去のバージョンについては、「Android SDK リリースノート」をご参照ください。
リストプレーヤー AliListPlayer を使用して HLS (m3u8) ビデオを再生する際のエラー
プレーヤー SDK V5.4.5.0 以前では、リストプレーヤー AliListPlayer での HLS (m3u8) ビデオの再生はサポートされていません。V5.4.5.0 より後のバージョンでは HLS (m3u8) のリスト再生がサポートされていますが、ローカルキャッシュを有効にする必要があります。ローカルキャッシュを有効にする方法については、「ローカルキャッシュ」をご参照ください。
Android プレーヤー SDK は、Android プロジェクトの assets および raw フォルダ内のビデオ再生をサポートしているか
いいえ。ビデオをスマートフォンのストレージにコピーし、その絶対パスを使用してビデオを再生してください。
HLS ビデオストリームにローカルキャッシュを設定した後、403 エラーが発生して再生が失敗する
症状:ローカルキャッシュを有効にして VidAuth 再生方式で HLS (M3U8) ビデオストリームを再生すると、再生が失敗し 403 エラーが報告されます。
原因:ローカルキャッシュを有効にした後、ビデオが完全にキャッシュされる前に再生を終了した場合、次回再生を開始するときに、キャッシュされていない部分は前回のセッションの期限切れの Vid 認証情報でリクエストされます。これにより、認証が失敗し、403 エラーが発生します。
解決策:プレーヤー SDK V5.5.4.0 以降では、ビデオ再生 URL に認証パラメーターが含まれ、再生プロトコルが HLS の場合、PlayerConfig.mEnableStrictAuthMode フィールドを設定して認証モードを選択できます。デフォルト値は false です。
-
非厳密認証 (false):認証はキャッシュされます。以前にメディアの一部のみがキャッシュされた場合、プレーヤーは後続のリクエストにキャッシュされた認証を使用します。URL 認証の有効期間が短い場合や、長時間の休止後に再生を再開した場合、認証が期限切れになる可能性があります。再生ソースの自動更新と統合して、認証の有効期限切れを処理してください。
-
厳密認証 (true):認証はキャッシュされません。認証は起動ごとに発生し、ネットワークがないと起動に失敗します。
Non-strict authentication (false): Authentication is cached. If only part of the media was cached previously, the player uses the cached authentication for subsequent requests. If URL authentication has a short validity period or playback resumes after a long pause, authentication may expire. Integrate with auto-refresh playback sources to handle authentication expiration.
Strict authentication (true): Authentication is not cached. Authentication occurs on every startup, causing startup failure without network.
Android プレーヤー SDK は、ビデオをダウンロードしながら再生することをサポートしているか
いいえ。Android プレーヤー SDK は、ローカルキャッシュが有効な場合に再生中にビデオファイルをキャッシュおよびダウンロードでき、次回はキャッシュされたビデオファイルが直接再生されます。ローカルにキャッシュされたビデオファイルをそのファイルディレクトリから取り出して個別に再生することはサポートされていません。
Android プレーヤー SDK は、ビデオのバッファリング速度の取得をサポートしているか
はい。Android プレーヤー SDK は、バッファリング速度、リアルタイムのレンダリングフレームレート、オーディオとビデオのビットレート、およびネットワークのダウンロードビットレートを取得できます。詳細については、「再生情報の取得」をご参照ください。
HDR ビデオの再生が異常になる
Android プレーヤー SDK は現在、回転角度のある HDR ビデオをサポートしていないため、これらのビデオの再生は異常になります。
ビデオが複数の画質にトランスコードされている場合、プレーヤー SDK はデフォルトでどの画質を再生するか
デフォルトの画質の再生順序は、FD、LD、SD、HD、2K、4K、OD です。各用語の定義については、「画質」をご参照ください。プレーヤー SDK は左から右に検索し、最初に見つかった画質を再生します。
デフォルトの再生画質を指定する方法
次の例は、デフォルトの再生画質を指定する方法を示しています。
// VidSts 再生方式を例として使用します。
VidSts vidSts = new VidSts();
// vid、AccessKeyId、AccessKeySecret、token などのパラメーターを設定するコードは省略されています。詳細については、「基本機能」トピックのプレーヤー作成設定をご参照ください。
/*
パラメーター 1:希望の再生画質。有効な値:FD、LD、SD、HD、2K、4K、OD。
パラメーター 2:希望の画質の再生を強制するかどうかを指定します。false:希望の画質の再生を強制しません。プレーヤー SDK はデフォルトの順序に基づいて再生する画質を検索します。true:希望の画質の再生を強制します。希望の画質が見つからない場合、ビデオは再生されません。
*/
vidSts.setQuality("",false);1 つの画質に複数のストリームがある場合、プレーヤー SDK はどのストリームを再生するか
1 つの画質に複数のストリームがある場合、プレーヤー SDK は最新のストリームを再生します。
その他の問題
ウォーターマークなしでビデオを再生し、ウォーターマーク付きでダウンロードする方法
ビデオを複数の画質にトランスコードしてください。ウォーターマークのない画質を再生し、ウォーターマークのある画質をダウンロードしてください。
問題ログの取得方法
Alibaba Cloud に技術サポートを依頼する際は、問題をより効率的に解決するために、問題ログをリクエストと一緒に提出してください。問題ログは次のように取得してください。
問題ログを取得してください。
問題ログを取得する前に、ログレベルを
AF_LOG_LEVEL_TRACEに設定してください。詳細な手順については、「SDK ログの取得」をご参照ください。生成されたログを Alibaba Cloud の技術サポートに提供してください。