日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

基礎(chǔ)功能

更新時(shí)間:

本文提供Flutter框架播放器SDK基礎(chǔ)功能的使用示例,更多功能使用說明請參見進(jìn)階功能、API說明。

創(chuàng)建播放器

本節(jié)介紹如何用更簡單的方式讓Flutter框架播放器SDK播放視頻,按照播放方式的不同可以分為手動播放和自動播放。

說明

如需播放ARTC流,除了需要在集成時(shí)引入RTS相關(guān)依賴,Android端還需在創(chuàng)建播放器前調(diào)用FlutterAliPlayerFactory.loadRtsLibrary();加載RtsSDK動態(tài)庫。

  1. 創(chuàng)建播放器。

    創(chuàng)建單實(shí)例播放器。

    //創(chuàng)建播放器實(shí)例
    FlutterAliplayer fAliplayer = FlutterAliPlayerFactory.createAliPlayer();
    //建議傳入TraceID 
    fAliplayer.setTraceID("traceID");

    創(chuàng)建多實(shí)例播放器。

    需要在Flutter層管理playerId,在播放器的回調(diào)中會返回對應(yīng)的playerId,用來通知Flutter層。

    FlutterAliplayer fAliplayer = FlutterAliPlayerFactory.createAliPlayer(playerId: playerId);
  2. 設(shè)置監(jiān)聽器。

    播放器支持設(shè)置多個(gè)監(jiān)聽器。

    1. 創(chuàng)建手動播放時(shí),OnPrepard必須設(shè)置,因?yàn)槭謩硬シ判枰?span data-tag="ph" id="codeph-u1w-c9z-unh" class="ph">OnPrepard回調(diào)中調(diào)用play開始播放。

    2. OnTrackReadyOnError較為重要,建議您設(shè)置。

    以下示例僅展示部分接口,如下所示:

    // 準(zhǔn)備成功
    fAliplayer.setOnPrepard((playerId) {});
    // 首幀顯示
    fAliplayer.setOnRenderingStart((playerId) {});
    // 視頻寬高變化
    fAliplayer.setOnVideoSizeChanged((width, height,playerId) {});
    // 播放器狀態(tài)變化
    fAliplayer.setOnStateChanged((newState,playerId) {});
    // 加載狀態(tài)
    fAliplayer.setOnLoadingStatusListener(
        loadingBegin: (playerId) {},
        loadingProgress: (percent, netSpeed,playerId) {},
        loadingEnd: (playerId) {});
    // 拖動完成
    fAliplayer.setOnSeekComplete((playerId) {});
    // 播放器事件信息回調(diào),包括buffer、當(dāng)前播放進(jìn)度等等信息,根據(jù)infoCode來判斷,對應(yīng)FlutterAvpdef.infoCode
    fAliplayer.setOnInfo((infoCode, extraValue, extraMsg,playerId) {});
    // 播放完成
    fAliplayer.setOnCompletion((playerId) {});
    // 設(shè)置流準(zhǔn)備完成
    fAliplayer.setOnTrackReady((playerId) {});
    // 截圖結(jié)果
    fAliplayer.setOnSnapShot((path,playerId) {});
    // 錯(cuò)誤結(jié)果
    fAliplayer.setOnError((errorCode, errorExtra, errorMsg,playerId) {});
    // 切換流變化
    fAliplayer.setOnTrackChanged((value,playerId) {});
  3. 創(chuàng)建播放源。

    1. Flutter播放器SDK支持4種點(diǎn)播播放方式,包括:UrlSource播放、VidAuth播放(視頻點(diǎn)播用戶推薦使用)、VidSts播放、加密播放。

    2. Flutter播放器SDK僅支持1種直播播放方式,為UrlSource播放。

    點(diǎn)播視頻播放

    點(diǎn)播UrlSource播放

    使用點(diǎn)播UrlSource播放方式播放點(diǎn)播視頻,需要將播放器的setUrl屬性設(shè)置為播放地址。播放地址可以是第三方點(diǎn)播地址或阿里云點(diǎn)播服務(wù)中的播放地址。

    阿里云播放地址可以調(diào)用GetPlayInfo接口獲取。建議您通過SDK方式來獲取音視頻播放地址,免去自簽名的麻煩。調(diào)用接口獲取音視頻播放地址的示例請參見開發(fā)者門戶

    void onViewPlayerCreated(viewId) async {
      // 將渲染的View設(shè)置給播放器
      fAliplayer.setPlayerView(viewId);
      // 設(shè)置播放源
      switch (_playMode) {
          // UrlSource播放方式
        case ModeType.URL:
          this.fAliplayer.setUrl("播放地址"); // 必選參數(shù),播放地址,可以是第三方點(diǎn)播地址,或阿里云點(diǎn)播服務(wù)中的播放地址。
          break;
        default:
      }
    }

    點(diǎn)播VidAuth播放(推薦)

    使用VidAuth播放方式播放點(diǎn)播視頻,需要將播放器的vid屬性設(shè)置為音視頻ID,將playauth屬性設(shè)置為音視頻播放憑證。

    1. 音視頻ID可以在音視頻上傳完成后通過控制臺(路徑:媒資庫>音/視頻。)或服務(wù)端接口(SearchMedia)獲取。

    2. 音視頻播放憑證可以調(diào)用GetVideoPlayAuth接口獲取。建議您通過SDK方式來獲取音視頻播放憑證,免去自簽名的麻煩。調(diào)用接口獲取音視頻播放憑證的示例請參見開發(fā)者門戶

    推薦視頻點(diǎn)播用戶采用此播放方式。相比STS播放方式,PlayAuth播放方式在易用性和安全性上更有優(yōu)勢,對比詳情請參見憑證方式與STS方式對比

    void onViewPlayerCreated(viewId) async {
      // 將渲染的View設(shè)置給播放器
      fAliplayer.setPlayerView(viewId);
      //請注意 generatePlayerConfig 之前必須調(diào)用 createVidPlayerConfigGenerator()和setPreviewTime()
      FlutterAliplayer.createVidPlayerConfigGenerator();
      FlutterAliplayer.setPreviewTime(0);
      // 設(shè)置播放源
      FlutterAliplayer.generatePlayerConfig().then((value) {
          fAliplayer.setVidAuth(
              vid: "Vid信息",// 必選參數(shù),視頻ID(VideoId)。
              region: "接入地域",// 必選參數(shù),點(diǎn)播服務(wù)的接入地域,默認(rèn)為cn-shanghai。
              playAuth: "<yourPlayAuth>",// 必選參數(shù),播放憑證,需要調(diào)用點(diǎn)播服務(wù)的GetVideoPlayAuth接口生成。
              playConfig: value);
            });    
      }
    }

    點(diǎn)播VidSts播放

    使用點(diǎn)播VidSts播放方式播放點(diǎn)播視頻是指用STS臨時(shí)憑證而非點(diǎn)播音視頻播放憑證播放。STS安全令牌和STS臨時(shí)AK對(AccessKeyId和AccessKeySecret)需要提前獲取,獲取方式請參見使用STS臨時(shí)授權(quán)方案上傳視頻

    void onViewPlayerCreated(viewId) async {
      // 將渲染的View設(shè)置給播放器
      fAliplayer.setPlayerView(viewId);
      //請注意 generatePlayerConfig 之前必須調(diào)用 createVidPlayerConfigGenerator()和setPreviewTime()
      FlutterAliplayer.createVidPlayerConfigGenerator();
      FlutterAliplayer.setPreviewTime(0);
      // VidSts播放方式
      FlutterAliplayer.generatePlayerConfig().then((value) {
         fAliplayer.setVidSts(
              vid: "Vid信息",// 必選參數(shù),視頻ID(VideoId)。
              region: "接入地域",// 必選參數(shù),點(diǎn)播服務(wù)的接入地域,默認(rèn)為cn-shanghai。
              accessKeyId: "<yourAccessKeyId>",// 必選參數(shù),STS臨時(shí)AK對的訪問密鑰ID,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
              accessKeySecret: "<yourAccessKeySecret>",// 必選參數(shù),STS臨時(shí)AK對的訪問密鑰,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
              securityToken: "<yourSecurityToken>",// 必選參數(shù),STS安全令牌,需要調(diào)用STS服務(wù)的AssumeRole接口生成。
          	  playConfig: value);
        	});
           
    }

    點(diǎn)播加密播放

    點(diǎn)播視頻支持HLS標(biāo)準(zhǔn)加密、阿里云私有加密和DRM加密。加密播放請參見如何播放加密視頻

    直播視頻UrlSource播放

    使用UrlSource播放方式播放直播視頻,需要將播放器的setUrl屬性設(shè)置為直播拉流地址。播放地址可以是第三方直播地址或阿里云直播服務(wù)中的拉流地址。

    阿里云直播拉流地址可以通過直播控制臺的地址生成器生成。詳情請參見阿里云直播地址生成器

    void onViewPlayerCreated(viewId) async {
      // 將渲染的View設(shè)置給播放器
      fAliplayer.setPlayerView(viewId);
      // 設(shè)置播放源
      switch (_playMode) {
        // UrlSource播放方式
        case ModeType.URL:
          this.fAliplayer.setUrl("填寫資源的播放地址"); // 播放地址可以是第三方直播地址,或阿里云直播服務(wù)中的拉流地址。
          break;
        default:
      }
    }
  4. 設(shè)置顯示View。

    如果播放源有畫面,那么需要設(shè)置顯示的view到播放器中,用來顯示畫面。示例如下:

    @override
    Widget build(BuildContext context) {
      var x = 0.0;
      var y = 0.0;
      Orientation orientation = MediaQuery.of(context).orientation;
      var width = MediaQuery.of(context).size.width;
    
      var height;
      if (orientation == Orientation.portrait) {
        height = width * 9.0 / 16.0;
      } else {
        height = MediaQuery.of(context).size.height;
      }
      AliPlayerView aliPlayerView = AliPlayerView(
          onCreated: onViewPlayerCreated,
          x: x,
          y: y,
          width: width,
          height: height);
      return OrientationBuilder(
        builder: (BuildContext context, Orientation orientation) {
          return Scaffold(
            body: Column(
              children: [
                Container(
                    color: Colors.black,
                    child: aliPlayerView,
                    width: width,
                    height: height),
              ],
            ),
          );
        },
      );
  5. 可選:開啟自動播放,默認(rèn)為關(guān)閉狀態(tài)。

    fAliplayer.setAutoPlay(true);
  6. 準(zhǔn)備播放。

    調(diào)用prepare()方法準(zhǔn)備播放。

    fAliplayer.prepare();
  7. 開始播放。

    1. 如果未開啟自動播放,需要在OnPrepard回調(diào)中調(diào)用fAliplayer.play();開始播放視頻。

    2. 如果開啟了自動播放,則不需要調(diào)用fAliplayer.play();,數(shù)據(jù)解析完成后將開始自動播放視頻。

    fAliplayer.play();

控制播放

Flutter框架播放器SDK支持開始、暫停、從指定時(shí)間點(diǎn)播放等主流操作。

開始播放

開始播放視頻,由play接口實(shí)現(xiàn)。示例如下:

 fAliplayer.play();

從指定時(shí)間開始播放

跳轉(zhuǎn)到某個(gè)時(shí)刻進(jìn)行播放,由seek接口實(shí)現(xiàn)。適用于用戶拖拽進(jìn)度條,或續(xù)播等需要從指定時(shí)間點(diǎn)開始播放的場景。示例如下:

////posotion為指定的時(shí)間,單位:毫秒。seekMode取值:FlutterAvpdef.ACCURATE(精準(zhǔn)seek)和FlutterAvpdef.INACCURATE(非精準(zhǔn)seek)
fAliplayer.seek(position,seekMode);

以指定位置起播,僅生效一次,適用于用戶從指定時(shí)間點(diǎn)開始播放的場景。示例如下:

//以指定位置起播,每次prepare前調(diào)用,僅生效一次,time為指定的時(shí)間(毫秒),seekMode取值:FlutterAvpdef.ACCURATE(精準(zhǔn)seek)和FlutterAvpdef.INACCURATE(非精準(zhǔn)seek)
fAliplayer.setStartTime(time, seekMode);

暫停播放

暫停播放視頻,由pause接口實(shí)現(xiàn)。示例如下:

fAliplayer.pause();

停止播放

停止播放視頻,由stop接口實(shí)現(xiàn)。示例如下:

fAliplayer.stop();

銷毀播放器

銷毀播放器實(shí)例,有同步和異步兩種銷毀方式,示例如下:

//同步銷毀,內(nèi)部會自動調(diào)用stop接口
fAliplayer.destroy();
//異步銷毀,內(nèi)部會自動調(diào)用stop接口
fAliplayer.releaseAsync();

設(shè)置顯示模式

Flutter框架播放器SDK支持填充、旋轉(zhuǎn)、鏡像等顯示設(shè)置。

填充

支持設(shè)置寬高比適應(yīng)、寬高比填充和拉伸填充這3種畫面填充模式,由setScalingMode接口實(shí)現(xiàn)。示例如下:

//設(shè)置寬高比適應(yīng)(將按照視頻寬高比等比縮小到view內(nèi)部,不會有畫面變形)
fAliplayer.setScalingMode(FlutterAvpdef.AVP_SCALINGMODE_SCALEASPECTFIT);
//設(shè)置寬高比填充(將按照視頻寬高比等比放大,充滿view,不會有畫面變形)
fAliplayer.setScalingMode(FlutterAvpdef.AVP_SCALINGMODE_SCALEASPECTFILL);
//設(shè)置拉伸填充(如果視頻寬高比例與view比例不一致,會導(dǎo)致畫面變形)
fAliplayer.setScalingMode(FlutterAvpdef.AVP_SCALINGMODE_SCALETOFILL);

旋轉(zhuǎn)

畫面按指定角度旋轉(zhuǎn),由setRotateMode接口實(shí)現(xiàn)。設(shè)置后還可查詢旋轉(zhuǎn)角度。示例如下:

//設(shè)置畫面順時(shí)針旋轉(zhuǎn)0度
fAliplayer.setRotateMode(FlutterAvpdef.AVP_ROTATE_0);
//設(shè)置畫面順時(shí)針旋轉(zhuǎn)90度
fAliplayer.setRotateMode(FlutterAvpdef.AVP_ROTATE_90);
//設(shè)置畫面順時(shí)針旋轉(zhuǎn)180度
fAliplayer.setRotateMode(FlutterAvpdef.AVP_ROTATE_180);
//設(shè)置畫面順時(shí)針旋轉(zhuǎn)270度
fAliplayer.setRotateMode(FlutterAvpdef.AVP_ROTATE_270);
//獲取旋轉(zhuǎn)角度
fAliplayer.getRotateMode();

鏡像

支持水平鏡像、垂直鏡像和無鏡像,由setMirrorMode接口實(shí)現(xiàn)。示例如下:

//設(shè)置無鏡像
fAliplayer.setMirrorMode(FlutterAvpdef.AVP_MIRRORMODE_NONE);
//設(shè)置水平鏡像
fAliplayer.setMirrorMode(FlutterAvpdef.AVP_MIRRORMODE_HORIZONTAL);
//設(shè)置垂直鏡像
fAliplayer.setMirrorMode(FlutterAvpdef.AVP_MIRRORMODE_VERTICAL); 

獲取播放信息

Flutter框架播放器SDK支持獲取當(dāng)前的播放進(jìn)度和播放時(shí)長。

獲取當(dāng)前播放進(jìn)度

獲取當(dāng)前的播放時(shí)刻,在onInfo回調(diào)中獲取,單位毫秒。示例如下:

fAliplayer.setOnInfo((infoCode,extraValue,extraMsg,playerId){
 if(infoCode==FlutterAvpdef.CURRENTPOSITION){
 //extraValue為當(dāng)前播放進(jìn)度
}
});

獲取播放時(shí)長

獲取視頻總時(shí)長。需要在視頻加載完成以后才可以獲取到,可以在AVPEventPrepareDone事件后獲取duration。示例如下:

fAliplayer.getMediaInfo().then((value){
 _videoDuration=value['duration'];
});

監(jiān)聽播放狀態(tài)

監(jiān)聽播放器的狀態(tài),onStateChanged 回調(diào)參數(shù)為當(dāng)前播放器狀態(tài)。示例如下:

fAliplayer.setOnStateChanged((newState, playerId) {
  //newState為播放狀態(tài)
  switch (newState) {
    case FlutterAvpdef.AVPStatus_AVPStatusIdle: // 空轉(zhuǎn)、閑時(shí)、靜態(tài)
      break;
    case FlutterAvpdef.AVPStatus_AVPStatusInitialzed: // 初始化完成
      break;
    case FlutterAvpdef.AVPStatus_AVPStatusPrepared: // 準(zhǔn)備完成
      break;
    case FlutterAvpdef.AVPStatus_AVPStatusStarted: // 正在播放
      break;
    case FlutterAvpdef.AVPStatus_AVPStatusPaused: // 播放暫停
      break;
    case FlutterAvpdef.AVPStatus_AVPStatusStopped: // 播放停止
      break;
    case FlutterAvpdef.AVPStatus_AVPStatusCompletion: // 播放完成
      break;
    case FlutterAvpdef.AVPStatus_AVPStatusError: // 播放錯(cuò)誤
      break;
    default:
  }
});

設(shè)置音量

設(shè)置音量包括音量調(diào)節(jié)和靜音設(shè)置。

音量調(diào)節(jié)

調(diào)節(jié)音量大小,支持0~2倍,當(dāng)音量大于1時(shí),可能出現(xiàn)噪音,不推薦使用。由setVolume接口實(shí)現(xiàn)。設(shè)置后還可獲取音量信息。示例如下:

//volume的值為0~2之間的實(shí)數(shù)。
fAliPlayer.setVolume(1);
//獲取音量信息。
fAliPlayer.getVolume();

靜音設(shè)置

將播放中的視頻設(shè)置為靜音狀態(tài),由setMute接口實(shí)現(xiàn)。示例如下:

fAliplayer.setMute(true);

倍速播放

Flutter框架播放器SDK提供了倍速播放視頻的功能,通過設(shè)置setRate方法,能夠以0.5倍~5倍速去播放視頻。同時(shí)保持變聲不變調(diào)。示例如下:

//設(shè)置倍速播放:支持0.5~5倍速的播放,通常按0.5的倍數(shù)來設(shè)置,例如0.5倍、1倍、1.5倍等
fAliplayer.setRate(1.0);

多清晰度設(shè)置

如果使用VID方式(VidAuth(推薦)及VidSts)播放,無需額外設(shè)置。Flutter框架播放器SDK會從點(diǎn)播服務(wù)獲取清晰度列表。Flutter框架播放器SDK支持獲取和切換清晰度,UrlSource播放方式暫不支持此設(shè)置。

獲取清晰度

當(dāng)視頻加載完成后,可以獲取視頻的清晰度。

fAliplayer.setOnPrepared((playerId) {
  fAliplayer.getMediaInfo().then((value){
        AVPMediaInfoinfo info=AVPMediaInfo.fromJson(value);
        info.tracks.forEach((element){
          if(element.trackType==3){
            // 清晰度
            String definition=element.trackDefinition;
            // 流索引
            int index=element.trackIndex;
          }
        });
      });    
});

切換清晰度

通過selectTrack方法切換清晰度,傳遞對應(yīng)TrackInfo的index即可。

fAliplayer.selectTrack(trackIdx);

清晰度切換通知

清晰度切換成功回調(diào)。

fAliplayer.setOnTrackChanged((value,playerId){
 //有回調(diào)表示切換成功,切換失敗接口暫未提供
});

循環(huán)播放

Flutter框架播放器SDK提供了循環(huán)播放視頻的功能。調(diào)用setLoop開啟循環(huán)播放,播放完成后,將會自動從頭開始播放視頻。示例如下:

fAliplayer.setLoop(true);

同時(shí)循環(huán)開始的回調(diào)將會使用onInfo通知。示例如下:

fAliplayer.setOnInfo((infoCode, extraValue, extraMsg, playerId) {
 if(infoCode == FlutterAvpdef.LOOPINGSTART){
 //循環(huán)播放開始通知
 }
});

獲取播放日志

Flutter框架播放器SDK提供了獲取播放日志的功能。調(diào)用enableConsoleLog開啟日志打印。示例如下:

//開啟日志打印功能
FlutterAliplayer.enableConsoleLog(true);
//設(shè)置日志級別,默認(rèn)為AF_LOG_LEVEL_INFO,如需排查問題,可設(shè)置為AF_LOG_LEVEL_TRACE
FlutterAliplayer.setLogLevel(FlutterAvpdef.AF_LOG_LEVEL_INFO);