このトピックでは、ApsaraVideo Player SDK for Androidの高度な機能について説明し、サンプルコードを提供します。 その他の機能の詳細については、「ApsaraVideo Player SDK For AndroidのAPI操作」をご参照ください。
再生の設定
短いビデオのリスト再生を有効にする
ApsaraVideo Player SDK for Androidは、ショートビデオの本格的なリスト再生機能を提供します。 SDKは、プリロードなどの機能を使用して、短いビデオの起動時間を最小限に抑えます。 長い動画ではこの機能を有効にしないことをお勧めします。
透明度設定のビデオを再生する
説明
ApsaraVideo Player SDKは、アルファチャンネルを使用した動画のレンダリングをサポートし、背景が透明な動的ギフト動画を再生します。 このようにして、誰かがストリーミングしているときにライブビデオコンテンツをブロックすることなく、ギフトの動的効果を表示できます。 これにより、視聴とインタラクティブな体験が大幅に向上します。
制限事項
ApsaraVideo MediaBox SDK V6.8.0以降およびApsaraVideo Player SDK V6.9.0以降を使用して、ビデオを透明にレンダリングできます。
メリット
透明なMP4ビデオを使用して、背景が透明なダイナミックギフトビデオを再生できます。 これにより、動的エフェクトとビデオ互換性のパフォーマンスが向上し、ビデオサイズが縮小され、開発が簡素化されます。 これはまた、ギフト効果の視聴体験を最適化し、ユーザーエクスペリエンスを向上させます。 透明性のあるMP4ビデオを使用してダイナミックギフトビデオを再生すると、次の利点があります。
より高いビデオ品質: MP4ビデオを使用して、元の画像の詳細や色など、元の品質で動的なギフト効果を表示できます。 APNやIXDなどの他のビデオフォーマットと比較して、MP4はデザイナーが意図した元の品質で動的効果を表示できます。
ビデオサイズが小さい: APNGやIXDなどの他のビデオフォーマットと比較して、MP4はより効率的な方法でファイルサイズを縮小します。 これにより、負荷が加速され、ネットワーク帯域幅の消費が削減されます。
より良い互换性: MP4は、さまざまなデバイスやブラウザで広くサポートされている一般的なビデオフォーマットです。 主流のデバイスでギフトエフェクトとして使用されるMP4ビデオを再生できます。
より高い開発効率: ダイナミックギフトビデオとしてMP4ビデオを使用するソリューションには、簡単な開発が必要です。 複雑な解析およびレンダリングロジックを研究および開発する代わりに、開発者は他の機能の実装に集中して開発効率を向上させることができます。
外部字幕の設定
ApsaraVideo Player SDK for Androidを使用すると、ビデオのSRT、SSA、ASS、またはVTT形式の外部字幕を追加または切り替えることができます。 サンプルコード:
字幕を表示するビューを作成します。
異なる形式の字幕に対して異なるビューを作成する必要があります。
字幕のリスナーを設定します。
字幕の追加
mAliPlayer.addExtSubtitle(url);
字幕を表示または非表示にします。
onSubtitleExtAdded
コールバックを受け取ったら、次のいずれかの方法を使用して字幕を表示または非表示にできます。//trackIndex: specifies whether to display subtitles. If the value is true, subtitles are displayed. If the value is false, subtitles are hidden. mAliPlayer.selectExtSubtitle(trackIndex, true);
オーディオのみの再生を有効にする
ビデオ画像の表示機能を無効にして、オーディオのみの再生を有効にすることができます。 prepareメソッドを呼び出す前に、PlayerConfigクラスを設定します。
PlayerConfig config = mAliPlayer.getConfig();
config.mDisableVideo = true; // Enable audio-only playback.
mAliPlayer.setConfig(config);
ソフトウェアデコードとハードウェアデコードの切り替え
デコード方法を変更する場合は、再生開始前に変更してください。 再生中に行われた変更は有効になりません。
ApsaraVideo Player SDK for Androidは、H.264およびH.265標準に基づくハードウェアデコードをサポートしています。 enableHardwareDecoder
を呼び出して、ハードウェアデコード機能を有効または無効にすることができます。 デフォルトでは、ハードウェアデコードが有効になっています。 ハードウェアデコードの初期化に失敗した場合は、ソフトウェアデコードに切り替えて正常な再生を保証します。 サンプルコード:
// Enable hardware decoding. Hardware decoding is enabled by default.
mAliyunVodPlayer.enableHardwareDecoder(true);
ハードウェアデコードをソフトウェアデコードに切り替えると、onInfo
コールバックが呼び出されます。 サンプルコード:
mApsaraPlayerActivity.setOnInfoListener(new IPlayer.OnInfoListener() {
@Override
public void onInfo(InfoBean infoBean) {
if (infoBean.getCode() == InfoCode.SwitchToSoftwareVideoDecoder) {
// Switch to software decoding.
}
}
});
H.265アダプティブ再生
セカンダリH.264ストリームを設定し、H.265ストリームのハードウェアデコードに失敗すると、システムは自動的にセカンダリH.264ストリームを再生します。 セカンダリストリームを設定しない場合、ハードウェアのデコードが失敗すると、ソフトデコードがH.265再生に自動的に使用されます。
この機能は、アダプティブ再生を有効にした後にのみ使用できます。 アダプティブ再生は付加価値サービスです。 付加価値サービスを有効にするには、Yidaでリクエストを送信してください。
アダプティブプレイバックサービスは、ハードウェアデコードされたデータの動的データ発行とH.264の自動切り替えの機能を提供します。
アダプティブ再生サービスを有効にしない場合でも、ハードウェアのデコードに失敗しても、プレーヤーSDKはソフトウェアのデコードを自動的に使用できます。
次のサンプルコードでは、セカンダリストリームを設定する方法について説明します。
// Create a map on the application layer to store the primary stream URLs and secondary stream URLs as key-value pairs. The system queries the corresponding secondary URL based on the primary stream URL during switching.
AliPlayerGlobalSettings.setAdaptiveDecoderGetBackupURLCallback(new AliPlayerGlobalSettings.OnGetBackupUrlCallback() {
@Override
public String getBackupUrlCallback(int oriBizScene, int oriCodecType, String original_url) {
String kurl = original_url;
if (!H265toH264Map.get(kurl).isEmpty()) {
return H265toH264Map.get(kurl);
} else {
return "";
}
}
});
アダプティブビットレートストリーミングの有効化
ApsaraVideo VODトランスコードテンプレートグループを使用して、ビデオをHTTP Live Streaming (HLS) アダプティブビットレートストリームにトランスコードできます。 詳細については、「ApsaraVideo VODによるアダプティブビットレートストリーミングの実装」をご参照ください。
ApsaraVideo VODによってトランスコードされるアダプティブビットレートストリームにVidベースの再生を使用する場合、デフォルトの再生定義として
AUTO
を指定する必要があります。 このようにして、プレーヤーは適応ビットレートストリームを取得して再生できます。 デフォルトの再生定義としてAUTOを指定しない場合、プレーヤーは自動的にビデオストリームを低解像度で再生します。 ビデオ定義に基づく再生順序の詳細については、「ビデオ解像度に関するよくある質問」をご参照ください。 次のサンプルコードは、VidAuthベースの再生の既定の再生定義を指定する方法の例を示しています。VidAuth vidAuth = new VidAuth(); List<Definition> list = new ArrayList<>(); list.add(Definition.DEFINITION_AUTO); vidAuth.setDefinition(list);
ApsaraVideo Player SDK for Androidは、HLSまたはDASHビデオストリームのアダプティブビットレートストリーミングをサポートしています。 prepare
メソッドが呼び出された後、getMediaInfo
を呼び出して、TrackInfo
で示されるビットレート情報を取得します。 サンプルコード:
List<TrackInfo> trackInfos = aliyunVodPlayer.getMediaInfo().getTrackInfos();
再生中に、selectTrack
メソッドを呼び出してビットレートを切り替えることができます。 AUTO_SELECT_INDEXを指定した場合、適応ビットレートストリーミングが有効になります。 サンプルコード:
int index = trackInfo.getIndex();
// Switch the bitrate.
aliyunVodPlayer.selectTrack(index);
// Enable adaptive bitrate streaming.
aliyunVodPlayer.selectTrack(TrackInfo.AUTO_SELECT_INDEX);
切り替え結果は、OnTrackChangedListener
コールバックで返されます。 selectTrack
メソッドを呼び出す前に、OnTrackChangedListenerコールバックを設定する必要があります。 サンプルコード:
aliyunVodPlayer.setOnTrackChangedListener(new IPlayer.OnTrackChangedListener() {
@Override
public void onChangedSuccess(TrackInfo trackInfo) {
// The bitrate switching is successful.
}
@Override
public void onChangedFail(TrackInfo trackInfo, ErrorInfo errorInfo) {
// The bitrate switching fails. You can call the errorInfo.getMsg() method to find the cause of the failure.
}
});
スナップショットの取得
ApsaraVideo Player SDK for Androidは、ビデオのスナップショットをキャプチャするためのスナップショット
方法を提供します。 スナップショットをキャプチャすると、プレーヤーはキャプチャするビデオイメージのソースデータを保存し、ソースデータをビットマップ
に変換します。 次に、OnSnapShotListener
を呼び出してビットマップを取得します。 サンプルコード:
// Set the callback for snapshot capture.
aliyunVodPlayer.setOnSnapShotListener(new OnSnapShotListener(){
@Override
public void onSnapShot(Bitmap bm, int with, int height){
// Obtain the bitmap and the width and height of the video image.
}
});
// Capture a snapshot of the current video image.
aliyunVodPlayer.snapshot();
ビデオプレビューの設定
ApsaraVideo Player SDK for Androidは、ApsaraVideo VODの特定の設定を統合してビデオプレビューをサポートします。 VidStsとVidAuthのソースのみをプレビューできます。 ApsaraVideo VODでVidAuthソースのみをプレビューすることを推奨します。 プレビュー機能を設定および使用する方法の詳細については、「プレビュー機能の設定」をご参照ください。
プレビュー機能を有効にした後、VidPlayerConfigGen.setPreviewTime()
メソッドを呼び出して、プレビュー期間を指定できます。 次のサンプルコードは、VidStsベースの再生のプレビュー期間を指定する方法の例を示しています。
VidSts vidSts = new VidSts;
....
VidPlayerConfigGen configGen = new VidPlayerConfigGen();
configGen.setPreviewTime(20); // Set the preview duration to 20s.
vidSts.setPlayConfig(configGen); // Specify the video source.
...
プレビュー期間を指定すると、ApsaraVideo Player SDK for Androidは、ビデオ全体ではなく、指定された期間持続するビデオのプレビューを生成します。
VidPlayerConfigGenを呼び出して、サーバーでサポートされているリクエストパラメーターを設定できます。 詳細は、「リクエストパラメーター」をご参照ください。
プレビュー機能は、Flash Video (FLV) およびMP3ファイルではサポートされていません。
ブラックリストの設定
ApsaraVideo Player SDK for Androidでは、ハードウェアデコード用のブラックリストを設定できます。 デバイスでハードウェアのデコードが許可されていない場合は、ソフトウェアのデコードを使用して、デコードの失敗を防ぐことができます。 サンプルコード:
DeviceInfo deviceInfo = new DeviceInfo();
deviceInfo.model="Lenovo K320t";
AliPlayerFactory.addBlackDevice(BlackType.HW_Decode_H264 ,deviceInfo );
アプリケーションが終了すると、ブラックリストは無効になります。
リファラーの設定
ApsaraVideo Player SDK for Androidには、リクエストリファラーを設定するためのPlayerConfig
クラスが用意されています。 ApsaraVideo VODコンソールで設定されたリファラーホワイトリストまたはブラックリストと一緒にリファラーを使用して、アクセス制御を実装できます。 サンプルコード:
// Obtain the configuration information.
PlayerConfig config = mAliyunVodPlayer.getConfig();
// Set the referer. Example: http://example.aliyundoc.com. You must add the protocol header when you set the referer.
config.mReferrer = referrer;
....// Configure other settings.
// Configure the settings for the player.
mAliyunVodPlayer.setConfig(config);
User-Agentヘッダーの指定
ApsaraVideo Player SDK for Androidは、リクエストユーザーエージェントを指定するためのPlayerConfig
クラスを提供します。 ユーザーエージェントを指定すると、プレイヤーはリクエストにユーザーエージェント情報を含めます。 サンプルコード:
// Obtain the configuration information.
PlayerConfig config = mAliyunVodPlayer.getConfig();
// Set the user agent.
config.mUserAgent = "Required user agent";
....// Configure other settings.
// Configure the settings for the player.
mAliyunVodPlayer.setConfig(config);
ネットワークのタイムアウト期間とリトライ回数の設定
ApsaraVideo Player SDK for Androidは、ネットワークのタイムアウト期間と再試行回数を設定するためのPlayerConfig
クラスを提供しています。 サンプルコード:
// Obtain the configuration information.
PlayerConfig config = mAliyunVodPlayer.getConfig();
// Specify the network timeout period. Unit: milliseconds.
config.mNetworkTimeout = 5000;
// Specify the maximum number of retries upon a network timeout. The retry interval equals the timeout period specified by the NetworkTimeout parameter. The NetworkRetryCount parameter specifies the number of retries. A value of 0 indicates zero retry. The application determines the number of retries. Default value: 2.
config.mNetworkRetryCount=2;
....// Configure other settings.
// Configure the settings for the player.
mAliyunVodPlayer.setConfig(config);
NetworkRetryCountパラメーターを0以外の値に設定した場合、ネットワークエラーが原因でプレーヤーがデータの読み込みを開始したときに、プレーヤーは再生を再試行します。 再試行の最大数は、NetworkRetryCountパラメーターの値に等しくなります。 再試行間隔は、NetworkTimeoutパラメーターの値に等しくなります。
再試行の最大数に達しても読み込みが続く場合、
onError
メソッドによってコールバックが呼び出されます。 この場合、ErrorInfo.getCode() メソッドはErrorCode.ERROR_LOADING_TIMEOUTを返します。NetworkRetryCountパラメーターを0に設定すると、ネットワークタイムアウトが発生したときに
onInfo
メソッドによってコールバックが呼び出されます。 この場合、InfoBean.getCode() はInfoCode.NetworkRetryを返す。 この問題を解決するには、ApsaraVideo Player SDK for Androidのreload
メソッドを呼び出して、ネットワークパケットをリロードしたり、必要に応じて他の操作を実行したりできます。
バッファとレイテンシの制御
ApsaraVideo Player SDK for Androidは、バッファーとレイテンシの設定を行うためのPlayerConfig
クラスを提供します。 サンプルコード:
HTTP ヘッダーの設定
ApsaraVideo Player SDK for Androidは、リクエストにHTTPヘッダーを追加するためのPlayerConfig
クラスを提供します。 サンプルコード:
// Obtain the configuration information.
PlayerConfig config = mAliyunVodPlayer.getConfig();
// Define a header.
String[] headers = new String[1];
headers[0]="Host:example.com"; // For example, add the host information to the header.
// Configure the headers.
config.setCustomHeaders(headers);
....// Configure other settings.
// Configure the settings for the player.
mAliyunVodPlayer.setConfig(config);
代替RTS URLの設定
再生劣化は、リアルタイムストリーミング (RTS) によってサポートされる。 HLSまたはFLV形式の再生URLなど、代替のRTS URLを指定できます。 RTS経由のストリームプルが失敗すると、このURLで指定されたビデオが自動的に再生されます。 サンプルコード:
PlayerConfig config = player.getConfig();
// Optional. Configure playback degradation.
UrlSource urlSource = new UrlSource();
urlSource.setUri(downgradeUrl);
// Specify an alternative RTS URL.
player.enableDowngrade(urlSource, config);
RTS再生の劣化を有効にする
RTS再生の劣化機能を有効にしても、ブラウザがRTSをサポートしていない場合、またはRTSを介したストリームのプルが失敗した場合、システムは自動的に劣化したプロトコルを介してストリームを再生します。 サンプルコード:
// 1 indicates that the RTS playback degradation feature is enabled and 0 indicates that the RTS playback degradation feature is disabled. The RTS playback degradation feature is enabled by default.
AliPlayerGlobalSettings.setOption(AliPlayerGlobalSettings.ALLOW_RTS_DEGRADE, 1);
左右のオーディオチャンネルを切り替える
outputAudioChannel
は、出力オーディオチャネルを指定します。 入力ファイルに2つのオーディオチャンネルが含まれている場合にのみ、左右のオーディオチャンネルを切り替えることができます。 入力ファイルにオーディオチャネルが1つしか含まれていない場合、outputAudioChannel設定は無効です。
次の出力チャネル設定は、オーディオレンダリングとPCMデータコールバックの両方に影響します。
/*
Specify OutputAudioChannel.OUTPUT_AUDIO_CHANNEL_LEFT to use the left audio channel for playback.
Specify OutputAudioChannel.OUTPUT_AUDIO_CHANNEL_RIGHT to use the right audio channel for playback.
Specify OutputAudioChannel.OUTPUT_AUDIO_CHANNEL_NONE to use the audio channel settings of the input file.
*/
player.setOutputAudioChannel();
オーディオストリームの解析
オーディオおよびビデオストリームに関する情報を取得するようにリスナーを設定できます。 暗号化されたオーディオおよびビデオストリームは解析できません。
プレーヤーの背景色を設定する
ApsaraVideo Player SDK for Androidは、プレーヤーのレンダリングの背景色を設定する方法を提供します。 次のサンプルコードは、メソッドを宣言して呼び出す方法の例を示しています。
Declare the method
/**
* Set the background color of the video.
*
* @param color ARGB
*
*/
/****
* Set video background color
* @param color ARGB
*/
abstract public void setVideoBackgroundColor(int color);
メソッドの呼び出しCall the method
// The parameter value is an eight-digit hexadecimal ARGB color value. The first two digits of an eight-digit ARGB color value represent alpha, the next two represent red, the next two represent green, and the last two represent blue.
// For example, a value of 0x0000ff00 specifies green.
player.setVideoBackgroundColor(0x0000ff00);
vidAuthベースの再生のドメイン名の指定
再生にvidAuthを使用する場合は、ドメイン名などのパラメーターを指定できます。 パラメーターの詳細については、「GetPlayInfo」をご参照ください。 次のコンテンツでは、vidAuthベースの再生のドメイン名を指定する方法とサンプルコードを示します。
サンプルコード
/**
* Specify the playback parameters.
*
* @param playConfig The playback parameters.
*/
public void setPlayConfig(VidPlayerConfigGen playConfig);
使用上の注意
VidPlayerConfigGenでaddPlayerConfigを呼び出すときにplayDomainパラメーターを指定します。
vidAuth = new VidAuth();
VidPlayerConfigGen configGen = new VidPlayerConfigGen();
// Specify the playDomain parameter. For more information, visit https://www.alibabacloud.com/help/en/vod/developer-reference/api-vod-2017-03-21-getplayinfo.
//https://www.alibabacloud.com/help/zh/vod/developer-reference/api-vod-2017-03-21-getplayinfo
configGen.addPlayerConfig("playDomain", "com.xxx.xxx");
vidAuth.setPlayConfig(configGen);
パフォーマンスの設定
事前レンダリングの設定
ApsaraVideo Player SDK for Androidは、再生開始前の最初のフレームのプレレンダリングをサポートしています。 サンプルコード:
player.setOption(ALLOW_PRE_RENDER, 1);
ローカルキャッシュの設定
ApsaraVideo Player SDK for Androidを使用すると、再生中にビデオをキャッシュできます。 これにより、起動ロード時間が短縮され、シークプロセスが加速され、再生待ち時間が短縮され、ループ再生中のトラフィック消費が削減されます。
ローカルキャッシュの有効化
デフォルトでは、ローカルキャッシュ機能は無効になっています。 この機能を使用するには、有効にする必要があります。 AliPlayerGlobalSettings
クラスでenableLocalCache
を呼び出して、ローカルキャッシュ機能を有効にします。 サンプルコード:
ビデオファイルの再生URLに認証パラメータが含まれている場合、認証パラメータの値は、ビデオファイルのローカルキャッシュおよび再生中に変更されます。 認証パラメーターを削除した後、
setCacheUrlHashCallback
操作を呼び出してMD5ハッシュ値を計算できます。 たとえば、http:// ****.mp4?aaa
は、認証パラメーターを含むビデオファイルの再生URLです。 この場合、URLhttp:// ****.mp4
は、ビデオファイルがロードされるときにMD5ハッシュ値を計算するために使用されます。 ただし、暗号化されたM3U8ビデオのキーURLの認証パラメーターを削除した後にMD5ハッシュ値を計算すると、同じキーURLが異なるビデオにヒットするため、再生は失敗します。 解決策:setCacheUrlHashCallback
コールバックのキーURLhttp(s):// yyyy?bbbb
ではなく、再生URLhttp(s):// xxxxx.m3u8?aaaa
からのみ認証パラメーターを削除します。サーバーがHTTPとHTTPSをサポートしており、同じ要素で異なるプロトコルを持つ2つのURLを使用してビデオファイルを指定できる場合は、URLのプロトコルヘッダーを削除するか、HTTPまたはHTTPSプロトコルを使用してMD5ハッシュ値を計算できます。 例:
ビデオファイルの再生URLが
https:// ****.mp4
およびhttp:// ****.mp4
の場合、MD5ハッシュ値は、ビデオファイルのロード時に****.mp4
を使用して計算されます。ビデオファイルの再生URLが
https:// ****.mp4
の場合、MD5ハッシュ値は、ビデオファイルのロード時にURLhttp:// ****.mp4
を使用して計算されます。
ApsaraVideo Player SDK V5.5.4.0以降の場合、再生URLに認証パラメーターが含まれているHLSストリームを再生する場合は、
PlayerConfig.mEnableStrictAuthMode
を設定して認証モードを指定します。 デフォルトでは、PlayerConfig.mEnableStrictAuthModeはfalseに設定されています。 PlayerConfig.mEnableStrictAuthModeの有効な値:false: ビデオコンテンツをキャッシュし、認証を実行します。 ビデオが完全にキャッシュされていない場合、プレーヤーは、キャッシュされていないビデオコンテンツを再生するときに、キャッシュされたコンテンツに関する認証情報を使用してURL署名要求を送信します。 署名付きURLの有効期間が短すぎると、再生エラーが発生します。
true: 認証を実行し、ビデオコンテンツをキャッシュしません。 再生ごとにURL署名が必要です。 ネットワーク接続が再生の失敗につながることはありません。
単一URLのローカルキャッシュの有効化または無効化
player config
では、単一のURLに対してローカルキャッシュを有効または無効にできます。
// Obtain the configuration information.
PlayerConfig config = mAliyunVodPlayer.getConfig();
// Configure whether to enable local caching for the playback URL. Default value: true. Local caching for the URL takes effect only when local caching is enabled in AliPlayerGlobalSettings and the value of this parameter is true. If the value of this parameter is false, the local caching for the URL is disabled.
config.mEnableLocalCache = false;
....// Configure other settings.
// Configure the settings for the player.
mAliyunVodPlayer.setConfig(config);
デフォルトのキャッシュパスを使用
次のサンプルコードでは、デフォルトのキャッシュパスを使用するようにAliPlayerGlobalSettings
を設定する方法について説明します。
/**
* Enable local caching. After this feature is enabled, a media file is cached on your device.
* @param enable true: enables local caching. false: disables local caching. Default value: false.
*/
/****
* Enable local cache. When enabled, it will be cached in local files.
* @param enable true: enables the local cache. false: disable. This function is disabled by default.
* @param context The context.
*/
public static String enableLocalCache(boolean enable, Context context)
大容量キャッシュの設定
再生中にビデオデータをメモリにキャッシュする最大バッファ時間を設定できます。これにより、再生パフォーマンスとユーザーエクスペリエンスが向上します。 最大バッファ持続時間が大きすぎると、バッファは過剰なメモリを消費する。 大容量キャッシュ機能を使用してファイル内のビデオデータをキャッシュできます。これにより、メモリ使用量が削減され、プレーヤーのパフォーマンスがさらに向上します。
mMaxBufferDurationが50,000ミリ秒を超える場合、ローカルキャッシュを有効にして、大きなキャッシュを自動的にトリガーできます。 手順:
グローバルローカルキャッシュ機能を有効にします。
デフォルトでは、ローカルキャッシュ機能は無効になっています。 この機能を使用するには、手動で有効にする必要があります。
AliPlayerGlobalSettings
クラスでenableLocalCache
を呼び出して、ローカルキャッシュを有効にします。 サンプルコードの詳細については、このトピックの「ローカルキャッシュの構成」をご参照ください。URLのローカルキャッシュを有効にします。
サンプルコードの詳細については、このトピックの「単一URLのローカルキャッシュの有効化または無効化」をご参照ください。
大容量キャッシュを有効にします。 サンプルコード:
AliPlayerGlobalSettings.enableBufferToLocalCache(true);
ビデオプリロードの設定
ApsaraVideo Player SDK for Androidは、ローカルキャッシング機能のアップグレードであるビデオプリロードをサポートしています。 ビデオプリロード機能を使用すると、キャッシュされたビデオが占有できるメモリの最大サイズを指定できます。 これにより、起動時の読み込み時間を短縮できます。
ビデオのプリロード機能には、次の制限があります。
一度にプリロードできるMP4、MP3、FLV、またはHLSファイルは1つだけです。
URLに基づいて再生されるビデオのみをプリロードできます。 VidAuthまたはVidStsを使用して再生するビデオをプリロードすることはできません。
デフォルトでは、ApsaraVideo Player SDK for Androidを使用してビデオをプリロードすると、ネットワークリソースのスケジューリングが有効になります。 これにより、再生中のビデオの品質が保証されます。 ネットワークリソースのスケジューリングが有効になっている場合、プリロード要求は、再生されているビデオのバッファリングされたコンテンツが特定の制限に達した後にのみ送信されます。 リアルタイムのプリロードリクエストを管理する場合は、ネットワークリソースのスケジューリングを無効にできます。 サンプルコード:
AliPlayerGlobalSettings.enableNetworkBalance(false);
ローカルキャッシュ機能を有効にします。 詳細については、このトピックの「ローカルキャッシュの構成」をご参照ください。
AliMediaLoaderインスタンスを取得します。
AliMediaLoaderインスタンスはシングルトンです。 インスタンスの取得時間に関係なく、作成できるAliMediaLoaderインスタンスは1つだけです。
MediaLoader mediaLoader = MediaLoader.getInstance();
AliMediaLoaderインスタンスを設定します。
リスナーを設定し、ビデオファイルの読み込みを開始します。
説明prepare
inplayer
とmediaLoader.load
を同時に呼び出すと、Application Not Responding (ANR) エラーが発生することがあります。 これは、システムが両方の操作ですべてのローカルファイルをトラバースする必要があるためです。player
でonPrepared
コールバックが起動された後、読み込みを開始することを推奨します。オプション: ロードしたビデオファイルを削除します。
ロードしたビデオファイルを削除して、占有スペースを減らすことができます。 ApsaraVideo Player SDK for Androidは、ロードしたビデオファイルを削除する方法を提供していません。 アプリケーションの対応するディレクトリにあるビデオファイルを削除する必要があります。
動的プリロード
動的プリロード機能を使用すると、再生中のビデオとプリロードされたビデオのキャッシュを管理できます。 プリロードされるビデオの数を制御することもできます。 これは、再生経験とコストのバランスを維持するのに役立ちます。
マルチビットレートHLSビデオのプリロード
マルチビットレートのHLSビデオの再生中にlistPlayer
メソッドを呼び出すと、現在のビデオストリームと同じ定義でビデオをプリロードできます。 ビジネス要件に基づいて、さまざまなプリロードモードを使用できます。
ダウンロード速度を取得する
ApsaraVideo Player SDK for Androidは、指定されたビデオのダウンロード速度を照会するためのgetExtraValue
メソッドを提供します。 onInfoコールバックは、クエリ結果を取得するために呼び出されます。 サンプルコード:
mAliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
@Override
public void onInfo(InfoBean infoBean) {
if(infoBean.getCode() == InfoCode.CurrentDownloadSpeed){
// The download speed.
long extraValue = infoBean.getExtraValue();
}
}
});
ネットワークの設定
HTTPDNS
HTTPDNS機能は、DNS解決テクノロジを使用して、特定のHTTPDNSサーバーにドメイン名解決要求を送信し、迅速かつ安定した方法で解決結果を取得します。 これにより、DNSハイジャックが防止されます。
ApsaraVideo Player SDKは、Alibaba Cloud CDNによって高速化されるドメイン名のHTTPDNSサービスを提供します。 強化されたHTTPDNS機能を使用して、正確なスケジューリングを実装し、リアルタイムドメイン解決の結果がすぐに有効になるようにすることができます。 これにより、ネットワークのパフォーマンスが向上します。
拡張されたHTTPDNS機能は、ApsaraVideo Player SDK V6.7.0以降でサポートされています。 ApsaraVideo Player SDK V6.7.0 ~ V6.11.0で拡張HTTPDNS機能を使用するには、
チケットを起票するか、Alibaba Cloudアカウントマネージャーにお問い合わせください。 ApsaraVideo Player SDK V6.12.0以降を使用する場合、拡張HTTPDNS機能はデフォルトで有効になっており、アプリケーションは必要ありません。拡張HTTPDNS機能を使用するためのサンプルコード
強化されたHTTPDNS機能は、高速化ドメイン名にのみ使用できます。 この機能を使用する前に、高速化ドメイン名が追加および構成されていることを確認してください。 ApsaraVideo VODでCDNのドメイン名を追加および設定する方法の詳細については、「CDNのドメイン名の追加」をご参照ください。 高速化ドメイン名の詳細については、Alibaba Cloud CDNとは.
// Enable the enhanced HTTPDNS feature.
AliPlayerGlobalSettings.enableEnhancedHttpDns(true);
// Optional. Add an HTTPDNS pre-resolved domain name.
DomainProcessor.getInstance().addPreResolveDomain("player.***alicdn.com");
HTTP/2
デフォルトでは、ApsaraVideo Player SDK for Android V5.5.0.0以降でHTTP/2が有効になっています。
ApsaraVideo Player SDK for AndroidはHTTP/2をサポートしています。 HTTP/2を有効にして、リクエストの多重化を実装できます。 これにより、HOL (head-of-line) ブロッキングが防止され、再生性能が向上する。 サンプルコード:
AliPlayerGlobalSettings.setUseHttp2(true);
HTTPで再生リクエストを開始する前にTCP接続を作成
再生要求がHTTP経由で開始される前に、伝送制御プロトコル (TCP) 接続を作成できます。 これにより、待ち時間が短縮され、ビデオ再生の適時性と一貫性が保証され、ユーザーエクスペリエンスが向上し、ネットワークとシステムリソースの使用が最適化されます。 サンプルコード:
// Specify the domain parameter in the host[:port] format. Separate multiple domain names with semicolons (;). The port parameter is optional.
// Specify global settings.
// Add or delete TCP connections. If you specify an empty string, no TCP connections are created.
AliPlayerGlobalSettings.setOption(AliPlayerGlobalSettings.SET_PRE_CONNECT_DOMAIN, "domain1;domain2");
ビデオダウンロードの設定
ApsaraVideo Player SDK for Androidを使用すると、ローカルデバイスにビデオをダウンロードして、ApsaraVideo Playerでオフライン再生できます。 通常のダウンロードモードと安全なダウンロードモードがサポートされています。
通常のダウンロード
通常のダウンロードモードでダウンロードされたビデオは、Alibaba Cloudによって暗号化されず、サードパーティのプレーヤーを使用して再生できます。
安全なダウンロード
セキュアダウンロードモードでダウンロードされた動画は、Alibaba Cloudによって暗号化されます。 サードパーティのプレーヤーを使用してダウンロードしたビデオを再生することはできません。 ApsaraVideo Playerのみを使用して再生できます。
使用上の注意
VidStsまたはVidAuthに基づいて再生されるビデオのみをダウンロードできます。
ビデオダウンロード機能を使用するには、ApsaraVideo VODコンソールでこの機能を有効にし、ダウンロードモードを設定する必要があります。 詳細については、「ダウンロード設定の構成」をご参照ください。
再開可能なダウンロードがサポートされています。
手順
オプション:暗号化検証用のセキュリティファイルを設定します。 安全なダウンロードモードを使用する場合にのみ、セキュリティファイルを設定する必要があります。
説明暗号化検証用セキュリティファイルの情報がアプリケーション情報と一致していることを確認してください。 それ以外の場合、ビデオのダウンロードは失敗します。
セキュアダウンロードモードを使用する場合、ApsaraVideo VODコンソールで生成されるキーファイルをApsaraVideo Player SDKで設定する必要があります。 キーファイルは、ダウンロードと再生のためにビデオを解読して検証するために使用されます。 キーファイルを生成する方法の詳細については、「ダウンロード設定の構成」トピックの安全なダウンロードの有効化セクションをご参照ください。
キーファイルを1回だけ設定することを推奨します。 サンプルコード:
PrivateService.initService(getApplicationContext(), "The path in which the encryptedApp.dat file is stored"); // We recommend that you store the encryptedApp.dat file on your mobile phone and set this parameter to the path in which the file is stored.
ビデオダウンローダーを作成して設定します。
AliDownloaderFactoryクラスを使用して、ダウンロードオブジェクトを作成します。 サンプルコード:
AliMediaDownloader mAliDownloader = null; ...... // Create a download object. mAliDownloader = AliDownloaderFactory.create(getApplicationContext()); // Specify the path for storing downloaded files. mAliDownloader.setSaveDir("The storage path");
リスナーを設定します。
ダウンローダは複数のリスナーを提供します。 サンプルコード:
ダウンロードソースを準備します。
prepare
メソッドを呼び出して、ダウンロードソースを準備できます。 VidStsおよびVidAuthソースがサポートされています。 サンプルコード:VidSts
// Create the VidSts download source. VidSts aliyunVidSts = new VidSts(); aliyunVidSts.setVid("Vid");// The ID of the video. aliyunVidSts.setAccessKeyId("<yourAccessKeyId>");// The AccessKey ID that is generated when the temporary STS token is issued. To generate the AccessKey ID, call the AssumeRole operation in STS. aliyunVidSts.setAccessKeySecret"<yourAccessKeySecret>");// The AccessKey secret that is generated when the temporary STS token is issued. To generate the AccessKey secret, call the AssumeRole operation in STS. aliyunVidSts.setSecurityToken("<yourSecurityToken>");// The STS token. To obtain the STS token, call the AssumeRole operation in STS. aliyunVidSts.setRegion("Access region");// The region in which ApsaraVideo VOD is activated. Default value: cn-shanghai. // Prepare the download source. mAliDownloader.prepare(aliyunVidSts)
VidAuth
// Create the VidAuth download source. VidAuth vidAuth = new VidAuth(); vidAuth.setVid("Vid"); // The ID of the video. vidAuth.setPlayAuth("<yourPlayAuth>");// The playback credential. To obtain the playback credential, call the GetVideoPlayAuth operation. vidAuth.setRegion("Access region"); // This parameter is deprecated in ApsaraVideo Player SDK V5.5.5.0 or later. If you use ApsaraVideo Player SDK V5.5.5.0 or later, the player automatically parses the region information. If you use ApsaraVideo Player SDK V5.5.5.0 or earlier, this parameter is required. Specify the ID of the region in which ApsaraVideo VOD is activated for this parameter. Default value: cn-shanghai. // Prepare the download source. mAliDownloader.prepare(vidAuth);
説明出力ファイルと入力ファイルは同じ形式であり、変更できません。
準備したダウンロードソースからダウンロードするコンテンツを選択します。
ダウンロードソースの準備が完了すると、OnPreparedListenerコールバックが発生します。
TrackInfoパラメーターの値は、ビデオ定義などのビデオトラックに関する情報を示します。 ダウンロードするトラックを選択します。 サンプルコード:
public void onPrepared(MediaInfo mediaInfo) { // Prepare the content to be downloaded. List<TrackInfo> trackInfos = mediaInfo.getTrackInfos(); // Download the information about tracks, such as the first track. mAliDownloader.selectItem(trackInfos.get(0).getIndex()); // Start the download. mAliDownloader.start(); }
オプション。 ダウンロードソースを更新します。
VidStsまたはVidAuthソースは、ダウンロード前に期限切れになる場合があります。 したがって、ダウンロードを開始する前にダウンロードソースを更新することをお勧めします。 サンプルコード:
// Update the download source. mAliDownloader.updateSource(VidSts); // Start the download. mAliDownloader.start();
ダウンロードが成功または失敗した後、ダウンロードオブジェクトをリリースします。
ダウンロードが成功したら、
release
メソッドを呼び出してダウンロードオブジェクトをリリースします。onCompletion
またはonError
コールバックが呼び出された後、ダウンロードオブジェクトをリリースできます。 サンプルコード:mAliDownloader.stop(); mAliDownloader.release();
オプション: ダウンロードしたファイルを削除します。
ダウンロードしたファイルは、ダウンロード中またはダウンロード完了後に削除できます。 サンプルコード:
// Delete the file by using the download object. mAliDownloader.deleteFile(); // Delete the file by using the static method. If 0 is returned, the file is deleted. AliDownloaderFactory.deleteFile("The path of the downloaded file","Video ID","Video format","The index of the downloaded video");
次に何をすべきか
ApsaraVideo Playerを使用してダウンロードしたビデオを再生するには、次の操作を実行します。
ダウンロードしたビデオファイルの絶対パスを取得します。
String path = mAliDownloader.getFilePath();
UrlSourceをダウンロードしたビデオファイルの絶対パスに設定して、ビデオを再生します。
UrlSource urlSource = new UrlSource(); urlSource.setUri("Playback URL");// Specify the absolute path of the downloaded video file. aliPlayer.setDataSource(urlSource);
暗号化されたビデオを再生する
ApsaraVideo Player SDK for Androidでは、HLS暗号化、Alibaba Cloud独自の暗号化、またはデジタル著作権管理 (DRM) 暗号化に基づいて暗号化されたオンデマンドビデオを再生できます。 SDKを使用すると、DRM暗号化のみに基づいて暗号化されたライブストリームを再生できます。 暗号化ビデオの再生方法の詳細については、「暗号化ビデオの再生」をご参照ください。
ネイティブRTS SDKの設定
Android用ApsaraVideo Player SDKをネイティブRTS SDKと統合して、リアルタイムストリーミング (RTS) 機能を使用できます。 詳細については、「Native RTS SDK For Android」をご参照ください。