このトピックでは、ApsaraVideo Player SDK for Flutter の高度な機能の使用例について説明します。機能の完全なリストについては、API リファレンスをご参照ください。
再生
ショートビデオリストの再生
リストプレーヤーを作成します。
FlutterAliListPlayer fAliListPlayer = FlutterAliPlayerFactory.createAliListPlayer();リソースの追加と削除
リストプレーヤーは、UrlSource または VidSts からの再生のみをサポートします。
// uid パラメーターはビデオの一意の ID を指定します。UID を使用してビデオを識別できます。同じ UID を持つビデオは同一と見なされます。 fAliListPlayer.addUrlSource(url,uid); fAliListPlayer.addVidSource(vid,uid); fAliListPlayer.removeSource(uid);プリロードするビデオ数を設定します。
起動速度を向上させるために、プリロードするビデオの数を適切に設定します。以下にコード例を示します。
// プリロードするビデオの数を設定します。ロードされるビデオの総数は、次の式で計算されます:1 + count * 2。 fAliListPlayer.setPreloadCount(count);ビデオソースを再生します。
// uid パラメーターは必須です。URL ベースの再生の場合は、uid のみを指定します。STS ベースの再生の場合は、STS 情報を指定します。 fAliListPlayer.moveTo();
ハードウェアデコードとソフトウェアデコードの切り替え
ApsaraVideo Player SDK for Flutter は、H.264 および H.265 のハードウェアデコードをサポートしています。また、デフォルトで有効になっている setEnableHardwareDecoder メソッドも提供します。ハードウェアデコードの初期化に失敗した場合、プレーヤーは自動的にソフトウェアデコードに切り替わり、再生が中断されないようにします。以下にコード例を示します。
// ハードウェアデコードを有効にします。この機能はデフォルトで有効になっています。
fAliplayer.setEnableHardwareDecoder(enable);ネットワーク状況に応じたビデオ解像度の適応的切り替え
ApsaraVideo Player SDK for Flutter は、HLS および HTTP による動的アダプティブストリーミング (DASH) ビデオストリームのアダプティブビットレートストリーミングをサポートしています。prepare メソッドが成功した後、getMediaInfo を呼び出して、各ストリームの情報を TrackInfo オブジェクトとして取得します。以下にコード例を示します。
fAliplayer.getMediaInfo().then((value) {
// value は map 型です。value['tracks'] を使用して、対応する TrackInfos リストを取得できます。TrackInfo の解析方法の詳細については、デモの AVPMediaInfo info = AVPMediaInfo.fromJson(value); をご参照ください。
});再生中に selectTrack メソッドを呼び出して、アクティブなストリームを切り替えることができます。TrackInfo オブジェクトの trackIndex 値をパラメーターとして渡します。切り替えの結果は、OnTrackChangedListener リスナーがトリガーされた後のコールバックで返されます。
// ビットレートを切り替えます。
fAliplayer.selectTrack(index);
// ビットレートを切り替え、アダプティブストリーミングを有効にします。
fAliplayer.selectTrack(-1);スナップショットのキャプチャ
ApsaraVideo Player SDK for Flutter は、setOnSnapShot メソッドで実装されるスナップショットキャプチャ機能を提供します。
// スナップショットのキャプチャ成功時のリスナー。
fAliplayer.setOnSnapShot((path,playerId) {
});
// スナップショットをキャプチャします。path は画像が保存されるパスを指定します。
fAliplayer.snapshot(path);ビデオプレビュー
ApsaraVideo Player SDK for Flutter は、ApsaraVideo VOD の設定と連携してビデオプレビューをサポートします。VidAuth (推奨) および VidSts の再生方式がこの機能をサポートしています。ビデオプレビューの設定と使用方法の詳細については、「ビデオプレビュー」をご参照ください。
プレビュー機能を設定した後、setVidAuth インターフェイスの previewTime メソッドを呼び出してプレビュー時間を設定します。以下にコード例を示します。
// previewTime はプレビュー時間を秒単位で指定します。
// VidAuth ベースの再生
fAliplayer.setVidAuth(
vid: "リソースの VID を入力してください",
region: "リソースのリージョンを入力してください",
playAuth: "リソースの PlayAuth を入力してください",
previewTime: "プレビュー時間を秒単位で入力してください");
// VidSts ベースの再生
fAliplayer.setVidSts(
vid: "リソースの VID を入力してください",
region: "リソースのリージョンを入力してください",
accessKeyId: "リソースの AccessKey ID を入力してください",
accessKeySecret: "リソースの AccessKey Secret を入力してください",
securityToken: "リソースのセキュリティトークンを入力してください",
previewTime: "プレビュー時間を秒単位で入力してください");その他の設定
ApsaraVideo Player SDK for Flutter の追加の再生設定を構成できます。これらの設定は、prepare() メソッドを呼び出す前に行います。
var configMap = {
'mStartBufferDuration':_mStartBufferDurationController.text,// 再生開始前のバッファ期間。単位:ミリ秒。
'mHighBufferDuration':_mHighBufferDurationController.text,// 高バッファ期間。単位:ミリ秒。
'mMaxBufferDuration':_mMaxBufferDurationController.text,// 最大バッファ期間。単位:ミリ秒。
'mMaxDelayTime': _mMaxDelayTimeController.text,// ライブストリーミングの最大レイテンシー。単位:ミリ秒。注意:このパラメーターはライブストリーミングでのみ有効です。
'mNetworkTimeout': _mNetworkTimeoutController.text,// ネットワークタイムアウト期間。単位:ミリ秒。
'mNetworkRetryCount':_mNetworkRetryCountController.text,// ネットワークタイムアウト後の再試行回数。
'mMaxProbeSize': _mMaxProbeSizeController.text,// 最大プローブサイズ。
'mReferrer': _mReferrerController.text,// リファラー。
'mHttpProxy': _mHttpProxyController.text,// HTTP プロキシ。
'mEnableSEI': mEnableSEI,// 補足的な拡張情報 (SEI) を有効にするかどうかを指定します。
'mClearFrameWhenStop': !mShowFrameWhenStop,// 再生停止時にフレームをクリアするかどうかを指定します。
'mDisableVideo': mDisableVideo,// ビデオを無効にするかどうかを指定します。
'mDisableAudio': mDisableAudio,// オーディオを無効にするかどうかを指定します。
'mUserAgent':mUserAgent,// User-Agent。
};
// 設定を適用します。
fAliplayer.setConfig(configMap);パフォーマンス
プリレンダリング
ApsaraVideo Player SDK for Flutter は、再生開始前に最初のビデオフレームを高速でレンダリングすることをサポートしています。
この機能はデフォルトで無効になっています。
フレームの準備ができたときに
Viewに迅速にレンダリングされるように、Prepareを呼び出す前にViewを設定する必要があります。この機能を有効にすると、準備完了イベントと最初のフレームのレンダリングイベントのトリガー順序に影響します。無効にすると、準備完了イベントが最初のフレームのレンダリングイベントの前にトリガーされます。有効にすると、デコードとレンダリングの速度の違いにより、最初のフレームのレンダリングイベントが準備完了イベントの前にトリガーされる場合があります。これは再生には影響しません。
以下にコード例を示します。
fAliplayer.setOption(FlutterAvpdef.ALLOW_PRE_RENDER, 1);ローカルキャッシュ
ApsaraVideo Player SDK for Flutter は、再生中にビデオを保存するローカルキャッシュ機能を提供します。これにより、ユーザーがビデオを再再生する際のトラフィックを削減できます。この機能を使用するには、prepare を呼び出す前に、プレーヤーの enableLocalCache を有効にします。以下にコード例を示します。
/**
* ローカルキャッシュを有効にします。この機能を有効にすると、ビデオはローカルファイルにキャッシュされます。
*
* @param enable - ローカルキャッシュ機能のスイッチ。true: ローカルキャッシュを有効にする。false: ローカルキャッシュを無効にする。デフォルト値:false。
* @param maxBufferMemoryKB - このパラメーターは非推奨であり、v5.4.7.1 以降では効果がありません。
* @param localCacheDir - キャッシュファイルのディレクトリ。これは絶対パスである必要があります。
* @param mDocTypeForIOS - iOS デバイス上のサンドボックスディレクトリのタイプ。
*/
FlutterAliplayer.enableLocalCache(bool enable,String maxBufferMemoryKB,String localCacheDir,DocTypeForIOS mDocTypeForIOS);
/**
* ローカルキャッシュファイルをクリアするための設定。
*
* @param expireMin - このパラメーターは非推奨であり、v5.4.7.1 以降では効果がありません。
* @param maxCapacityMB - 最大キャッシュサイズ。単位:MB。デフォルト値:20 GB。システムがキャッシュをクリアする際、合計キャッシュサイズがこの制限を超えた場合、システムはキャッシュ項目を最終アクセス時間でソートし、合計キャッシュサイズが制限以下になるまで最も古いキャッシュファイルを 1 つずつ削除します。
* @param freeStorageMB - 最小空きディスク領域。単位:MB。デフォルト値:0。システムがキャッシュをクリアする際、現在の空きディスク領域がこの値より小さい場合、システムは空きディスク領域がこの値以上になるか、すべてのキャッシュファイルがクリアされるまで、ルールに従ってキャッシュファイルを 1 つずつ削除します。
*/
FlutterAliplayer.setCacheFileClearConfig(String expireMin,String maxCapacityMB,String freeStorageMB);単一 URL のローカルキャッシュの有効化または無効化
特定の URL のローカルキャッシュを有効または無効にするには、player config で対応するパラメーターを設定します。以下にコード例を示します。
// 設定を取得します。
fAliplayer.getPlayConfig().then((config){
// ローカルキャッシュを無効または有効にします。
config.enableLocalCache = false;
// 設定を適用します。
fAliplayer.setPlayConfig(config);
});プリロード
ApsaraVideo Player SDK for Flutter は、ローカルキャッシュを強化したプリロード機能を提供します。これにより、ビデオキャッシュに割り当てるメモリサイズを指定することで、ビデオの起動速度を向上させることができます。
プリロード機能には以下の制限があります。
MP4、MP3、FLV、HLS などの単一メディアファイルの読み込みをサポートします。
UrlSource 方式で再生されるビデオのプリロードのみをサポートします。VidAuth または VidSts 方式で再生されるビデオのプリロードはサポートされていません。
ローカルキャッシュ機能を有効にします。詳細については、「ローカルキャッシュ」をご参照ください。
FlutterAliMediaLoaderV2インスタンスを作成します。FlutterAliMediaLoaderV2 loaderV2 = FlutterAliMediaLoaderV2();プリロードタスクのリスナーを設定します。
onError:エラーのリスナー。loaderV2.onError = (ErrorInfo error) { };onCompleted:タスク完了のリスナー。loaderV2.onCompleted = (taskId, urlOrVid) { };onCanceled:タスクキャンセルのリスナー。loaderV2.onCanceled = (taskId, urlOrVid) { };
任意:プリロードタスクのパラメーターを設定します。このステップは、アダプティブビットレートストリーミングにのみ適用されます。
以下のパラメーターのいずれか 1 つを設定するだけで十分です:
defaultQuality、defaultBandWidth、またはdefaultResolution。PreloadConfig config = PreloadConfig(); config.duration = 1000; // デフォルト値:1000 config.defaultQuality = "FD"; config.defaultBandWidth = 200000; config.defaultResolution = 1920 * 1080; loaderV2.setPreloadConfig(config);プリロードタスクを追加し、タスク ID を取得します。
VidAuth (推奨)
VidAuth auth = VidAuth( vid: "ご自身の videoId", playAuth: "ご自身の playAuth", region: "ご自身のリージョン", ); loaderV2.addTask(auth).then((taskId) { print("MediaLoaderV2: taskId: $taskId"); });VidSts
VidSts vidSts = VidSts( vid: "ご自身の vid", accessKeyId: "ご自身の accessKeyId", accessKeySecret: "ご自身の accessKeySecret", securityToken: "ご自身の securityToken", ); loaderV2.addTask(vidSts).then((taskId) { print("MediaLoaderV2: taskId: $taskId"); });UrlSource
loaderV2.addTask(UrlSource(videoUrl: "videoUrl")).then((taskId) { print("MediaLoaderV2: taskId: $taskId"); });プリロードタスクを一時停止します。
loaderV2.pauseTask(taskId);プリロードタスクを再開します。
loaderV2.resumeTask(taskId);プリロードタスクをキャンセルします。
loaderV2.cancelTask(taskId);FlutterAliMediaLoaderV2インスタンスを破棄します。loaderV2.dispose();
ビデオダウンロード
ApsaraVideo Player SDK for Flutter は、オンデマンドビデオをダウンロードしてオフライン再生することをサポートしています。通常ダウンロードとセキュアダウンロードの 2 つのダウンロードモードが利用可能です。
通常ダウンロード
このモードでダウンロードされたビデオは Alibaba Cloud によって暗号化されておらず、サードパーティ製プレーヤーで再生できます。
セキュアダウンロード
このモードでダウンロードされたビデオは Alibaba Cloud によって暗号化されており、ApsaraVideo Player SDK を使用してのみ再生できます。
使用方法
ビデオダウンロード機能は、VidSts および VidAuth 方式でのみ利用可能です。
ビデオダウンロード機能を使用するには、ApsaraVideo VOD コンソールでこの機能を有効にし、ダウンロードモードを設定する必要があります。詳細については、「オフラインダウンロード」をご参照ください。
レジュームダウンロードがサポートされています。
操作手順
任意: 暗号化検証用のセキュリティファイルを設定します。このステップは、セキュアダウンロードの場合にのみ必要です。通常ダウンロードの場合は、このステップをスキップできます。
説明設定されたセキュリティファイルがアプリ情報と一致していることを確認してください。一致しない場合、ビデオのダウンロードは失敗します。
セキュアダウンロードを使用する場合、ApsaraVideo VOD コンソールで生成されたキーファイルを ApsaraVideo Player SDK に設定する必要があります。このキーファイルは、ビデオのダウンロードおよび再生中の復号と検証に使用されます。キーファイルの生成方法の詳細については、「セキュアダウンロード」をご参照ください。
以下は一度限りの設定です。
FlutterAliPlayerFactory.initService(byteData);ダウンローダーを作成して設定します。
以下にコード例を示します。
FlutterAliDownloader downloader = FlutterAliDownloader.init(); /// 保存パスを設定します。 downloader.setSaveDir(path)ダウンロードを開始します。
ダウンロードを開始すると、リスナーが自動的に登録され、コールバック情報が返されます。以下にコード例を示します。
/// 1. prepare /// パラメーターの説明:type パラメーターは FlutterAvpdef.DOWNLOADTYPE_STS または FlutterAvpdef.DOWNLOADTYPE_AUTH に設定できます。type を DOWNLOADTYPE_STS に設定した場合、vid、accessKeyId、accessKeySecret、および securityToken パラメーターが必要です。type を DOWNLOADTYPE_AUTH に設定した場合、vid および playAuth パラメーターが必要です。 downloader.prepare(type, vid).then((value) { // value は map 型です。デモのカスタムダウンロードクラス DownloadModel に対応します。 DownloadModel downloadModel = DownloadModel.fromJson(value); // 2. selectItem。trackInfo に基づいてダウンロードするビデオの解像度を選択します。 List<TrackInfoModel> trackInfos = downloadModel.trackInfos; downloader.selectItem(vid,trackInfos[0].index); // 3. start downloader.start(vid, trackInfos[0].index).listen((event) { // 注意:event パラメーターにはさまざまな種類の情報が含まれる場合があります。詳細については、FlutterAvpdef.EventChanneldef をご参照ください。以下のセクションで詳細を説明します。 if (event[EventChanneldef.TYPE_KEY] == EventChanneldef.DOWNLOAD_PROGRESS){ // ダウンロード進捗率 (%)。ダウンロード進捗を取得するには:event[EventChanneldef.DOWNLOAD_PROGRESS]。 }else if(event[EventChanneldef.TYPE_KEY] == EventChanneldef.DOWNLOAD_PROCESS){ // 処理進捗率 (%)。処理進捗を取得するには:event[EventChanneldef.DOWNLOAD_PROCESS]。 }else if(event[EventChanneldef.TYPE_KEY] == EventChanneldef.DOWNLOAD_COMPLETION){ // ダウンロードが完了しました。event['vid'] と event['index'] を使用して、ダウンロードされたビデオを識別するための対応する vid と index を取得できます。event['savePath'] を使用して、ダウンロードされたビデオのローカルパスを取得できます。 }else if(event[EventChanneldef.TYPE_KEY] == EventChanneldef.DOWNLOAD_ERROR){ // ダウンロードに失敗しました。event['vid'] と event['index'] を使用して、ダウンロードに失敗したビデオを識別するための対応する vid と index を取得できます。event['errorCode'] と event['errorMsg'] を使用して、エラーコードとエラーメッセージを取得できます。 } }); });ダウンロードを停止します。
以下にコード例を示します。
downloader.stop(vid, index)ダウンロードを削除します。
ダウンロードオプションを削除すると、ダウンロードされたローカルファイルも削除されます。以下に例を示します。
downloader.delete(vid, index)ダウンロードオブジェクトを解放します。
ダウンロードオブジェクトが不要になった場合は、
releaseメソッドを呼び出して解放し、メモリリークを防ぎます。以下にコード例を示します。downloader.release(vid, index)
暗号化ビデオの再生
ApsaraVideo VOD は、HLS 暗号化、Alibaba Cloud 専用の暗号化、およびデジタル著作権管理 (DRM) 暗号化をサポートしています。暗号化再生の詳細については、「暗号化されたビデオの再生」をご参照ください。