全部產品
Search
文件中心

ApsaraVideo VOD:進階功能

更新時間:Nov 26, 2025

本文提供Flutter架構播放器SDK進階功能的使用樣本,完整功能說明請參見API說明。

播放

短視頻列表播放

  1. 建立列表播放器。

    FlutterAliListPlayer fAliListPlayer = FlutterAliPlayerFactory.createAliListPlayer();
  2. 添加資源、移除資源。

    列表播放器目前只支援兩種播放方式:UrlSource播放和VidSts播放。

    //uid是視頻的唯一標誌。用於區分視頻是否一樣。如果uid一樣,則認為是一樣的
    fAliListPlayer.addUrlSource(url,uid);
    fAliListPlayer.addVidSource(vid,uid);
    fAliListPlayer.removeSource(uid);
  3. 設定預先載入個數。

    合理設定預先載入個數,能夠有效提高起播的速度。樣本如下:

    //設定預先載入個數。總共載入的個數為: 1 + count*2。
    fAliListPlayer.setPreloadCount(count);
  4. 播放視頻源。

    //uid為必填項,如果是URL播放方式,只需要uid即可,如果是STS方式,則需要填寫STS資訊
    fAliListPlayer.moveTo();

軟硬解切換

Flutter架構播放器SDK提供了H.264、H.265的硬解碼能力,同時提供了setEnableHardwareDecoder開關。預設開,並且在硬解初始化失敗時,自動切換為軟解,保證視頻的正常播放。樣本如下:

//開啟硬解,預設開啟
fAliplayer.setEnableHardwareDecoder(enable);

網路自適應切換視訊清晰度

Flutter架構播放器SDK支援多碼率自適應HLS、DASH視頻流。在prepare成功之後,通過getMediaInfo可以擷取到各個碼流的資訊,即TrackInfo。樣本如下:

fAliplayer.getMediaInfo().then((value) {
//value為map,value['tracks']可以擷取對應的TrackInfos 列表資訊,可以參考Demo中AVPMediaInfo info = AVPMediaInfo.fromJson(value); 瞭解如何解析TrackInfo

});

在播放過程中,可以通過調用播放器的selectTrack方法切換播放的碼流,參數為TrackInfo中的trackIndex,切換的結果會在OnTrackChangedListener監聽之後會回調。

//多碼率切換
fAliplayer.selectTrack(index);
//多碼率切換並自適應
fAliplayer.selectTrack(-1);

截圖

Flutter架構播放器SDK提供了對當前視頻截圖的功能,由setOnSnapShot介面實現。

//截圖成功監聽
fAliplayer.setOnSnapShot((path,playerId) {

});
//截圖,path為圖片儲存路徑
fAliplayer.snapshot(path);

試看

Flutter架構播放器SDK通過配合點播服務配置,可以實現試看功能,VidAuth播放(推薦)和VidSts播放方式支援試看功能。如何配置和使用試看功能,請參見點播試看

配置試看功能之後,通過setVidAuth介面的previewTime方法設定播放器的試看時間長度。樣本如下:

//previewTime為試看時間,單位:秒
//VidAuth播放方式
fAliplayer.setVidAuth(
 vid: "填寫資源的vid",
 region: "填寫資源的region",
 playAuth: "填寫資源的region",
 previewTime: "填寫試看時間,單位:秒");

 //VidSts播放方式
 fAliplayer.setVidSts(
 vid: "填寫資源的vid",
 region: "填寫資源的region",
 accessKeyId: "填寫資源的鑒權id",
 accessKeySecret: "填寫資源的鑒權密鑰",
 securityToken: "填寫資源的安全Token",
 previewTime: "填寫試看時間,單位:秒");

其他配置

Flutter架構播放器SDK的其他播放配置。需要在prepare()方法之前設定給播放器。

var configMap = {
 'mStartBufferDuration':_mStartBufferDurationController.text,//起播緩衝區時間長度,單位:毫秒
 'mHighBufferDuration':_mHighBufferDurationController.text,//高緩衝時間長度,單位:毫秒
 'mMaxBufferDuration':_mMaxBufferDurationController.text,//最大緩衝區時間長度,單位:毫秒
 'mMaxDelayTime': _mMaxDelayTimeController.text,//直播最大延遲,單位:毫秒。注意:僅直播有效
 'mNetworkTimeout': _mNetworkTimeoutController.text,//網路逾時時間,單位:毫秒
 'mNetworkRetryCount':_mNetworkRetryCountController.text,///網路逾時重試次數,單位:毫秒
 'mMaxProbeSize': _mMaxProbeSizeController.text,//最大probe大小
 'mReferrer': _mReferrerController.text,//設定referrer
 'mHttpProxy': _mHttpProxyController.text,//http代理
 'mEnableSEI': mEnableSEI,//是否啟用SEI
 'mClearFrameWhenStop': !mShowFrameWhenStop,///停止後是否清空畫面
 'mDisableVideo': mDisableVideo,//禁用Video
 'mDisableAudio': mDisableAudio,//禁用Audio
 'mUserAgent':mUserAgent,//設定UserAgent
};
//應用配置
fAliplayer.setConfig(configMap);

效能

預渲染

Flutter播放器SDK支援在起播之前快速渲染第一幀。

樣本如下:

fAliplayer.setOption(FlutterAvpdef.ALLOW_PRE_RENDER, 1);

本機快取

Flutter架構播放器SDK提供了本機快取(邊播邊緩衝)的功能,能夠讓使用者重複播放視頻時,達到省流量的目的。需要在prepare之前給播放器配置enableLocalCache即可實現此功能。樣本如下:

/**
 *  開啟本機快取,開啟之後,會緩衝到本地檔案中。
 *
 *  @param enable - 本機快取功能開關。true:開啟本機快取,false:關閉,預設關閉。
 *  @param maxBufferMemoryKB - 5.4.7.1及以後版本已廢棄,暫無作用
 *  @param localCacheDir - 本機快取的檔案目錄,為絕對路徑。
 *  @param mDocTypeForIOS - iOS 沙箱目錄類型
 */
FlutterAliplayer.enableLocalCache(bool enable,String maxBufferMemoryKB,String localCacheDir,DocTypeForIOS mDocTypeForIOS);

/**
  * 本機快取檔案清理相關配置。
  *
  * @param expireMin - 5.4.7.1及以後版本已廢棄,暫無作用。
  * @param maxCapacityMB - 最大緩衝容量。單位:兆,預設值20GB,在清理時,如果緩衝總容量超過此大小,則會以cacheItem為粒度,按緩衝的最後時間排序,一個一個的刪除最舊的快取檔案,直到小於等於最大緩衝容量。
  * @param freeStorageMB - 磁碟最小空餘容量。單位:兆,預設值0,在清理時,同最大緩衝容量,如果當前磁碟容量小於該值,也會按規則一個一個的刪除快取檔案,直到freeStorage大於等於該值或者所有緩衝都被清理掉。
  */
FlutterAliplayer.setCacheFileClearConfig(String expireMin,String maxCapacityMB,String freeStorageMB);

開啟或關閉單個URL的本機快取

如果想要針對單個URL開啟或關閉本機快取功能,可以在player config中設定。樣本如下:

//擷取配置
fAliplayer.getPlayConfig().then((config){
  //關閉/開啟本機快取
  config.enableLocalCache = false;
  //應用設定
  fAliplayer.setPlayConfig(config);
});

預先載入

Flutter架構播放器SDK提供預先載入的功能,預先載入是對本機快取功能的升級。通過設定視頻緩衝的記憶體佔用大小,達到提升視頻起播速度的效果。

預先載入功能的使用限制如下:

  • 目前支援MP4、MP3、FLV、HLS等單個媒體檔案的載入。

  • 僅支援UrlSource播放方式播放視頻的預先載入,暫不支援VidAuth、VidSts方式播放視頻的預先載入。

  1. 開啟本機快取功能,詳細操作請參見本機快取

  2. 建立FlutterAliMediaLoaderV2執行個體。

    FlutterAliMediaLoaderV2 loaderV2 = FlutterAliMediaLoaderV2();
  3. 設定預先載入任務監聽。

    1. onError:異常監聽。

      loaderV2.onError = (ErrorInfo error) {
      };
    2. onCompleted:任務完成監聽。

      loaderV2.onCompleted = (taskId, urlOrVid) {
      };
    3. onCanceled:任務取消監聽。

      loaderV2.onCanceled = (taskId, urlOrVid) {
      };
  4. 設定預先載入任務參數(可選,僅適用於多碼率)。

    defaultQualitydefaultBandWidthdefaultResolution三者任選其一即可。

    PreloadConfig config = PreloadConfig();
    config.duration = 1000;  // 預設為 1000
    config.defaultQuality = "FD";
    config.defaultBandWidth = 200000;
    config.defaultResolution  = 1920 * 1080;
    loaderV2.setPreloadConfig(config);
  5. 添加預先載入任務並擷取任務ID。

    VidAuth(推薦)

    VidAuth auth = VidAuth(
       vid: "your videoId",
       playAuth: "your playAuth",
       region: "your region",
    );
    loaderV2.addTask(auth).then((taskId) {
        print("MediaLoaderV2: taskId: $taskId");
    });

    VidSts

    VidSts vidSts = VidSts(
        vid: "your vid",
        accessKeyId: "your accessKeyId",
        accessKeySecret: "your accessKeySecret",
        securityToken: "your securityToken",
    );
    loaderV2.addTask(vidSts).then((taskId) {
       print("MediaLoaderV2: taskId: $taskId");
    });

    UrlSource

    loaderV2.addTask(UrlSource(videoUrl: "videoUrl")).then((taskId) {
       print("MediaLoaderV2: taskId: $taskId");
    });
  6. 暫停預先載入任務。

    loaderV2.pauseTask(taskId);
  7. 恢複預先載入任務。

    loaderV2.resumeTask(taskId);
  8. 取消預先載入任務。

    loaderV2.cancelTask(taskId);
  9. 銷毀FlutterAliMediaLoaderV2執行個體。

    loaderV2.dispose();

視頻下載

Flutter架構播放器SDK提供了點播服務視頻的下載功能,允許使用者通過阿里雲播放器將視頻緩衝至本地觀看。同時,提供了普通下載和安全下載兩種下載方式。

  • 普通下載

    下載後的視頻資料未經過阿里雲加密,使用者可以用第三方播放器播放。

  • 安全下載

    下載後的視頻資料經過阿里雲加密。第三方播放器無法播放,僅支援使用阿里雲的播放器SDK進行播放。

使用說明

  • 僅VidSts和VidAuth方式可使用視訊下載功能。

  • 使用播放器的視頻下載功能,需要在點播控制台開啟並配置下載模式,詳細操作請參見離線下載

  • 視頻下載支援斷點續傳。

操作步驟

  1. 可選:配置安全下載的加密校正檔案。僅安全下載需要配置,普通下載無需配置。

    說明

    請確保配置的加密校正檔案與App資訊一致,否則會導致視頻下載失敗。

    如果設定為安全下載方式,則需要將在點播控制台產生的密鑰檔案配置到播放器SDK中,用於視頻下載和播放的解密驗證,密鑰檔案的產生請參見安全下載

    配置一次即可,樣本如下:

    FlutterAliPlayerFactory.initService(byteData);
  2. 建立並設定下載器。

    樣本如下:

    FlutterAliDownloader downloader = FlutterAliDownloader.init();
    ///設定儲存路徑
    downloader.setSaveDir(path)
  3. 開始下載。

    調用了開始下載後,會自動化佈建監聽,並將回調資訊返回。樣本如下:

    ///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,對應Demo中的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'] 可以擷取對應的錯誤碼,和錯誤資訊
     }
     });
     });
  4. 停止下載。

    樣本如下:

    downloader.stop(vid, index)
  5. 刪除下載。

    刪除下載選項,如果刪除成功,則下載的本地檔案也會隨之刪除。樣本如下:

    downloader.delete(vid, index)
  6. 釋放下載對象。

    當某個下載對象不再使用時,使用release方法將其釋放,防止記憶體流失。樣本如下:

    downloader.release(vid, index)

視頻加密播放

點播視訊支援HLS標準加密、阿里雲私人加密和DRM加密。加密播放請參見如何播放加密視頻