全部產品
Search
文件中心

ApsaraVideo VOD:基礎功能

更新時間:Dec 21, 2024

本文為您介紹如何建立Android播放器執行個體並提供設定音量、設定拖拽播放、監聽播放狀態、設定迴圈播放、設定倍速播放、切換音軌等基礎播放功能的使用樣本。

建立播放器

本節介紹如何用簡單的方式通過Android播放器SDK播放視頻,按照播放方式的不同可以分為手動播放和自動播放。

  1. 建立播放器。

    通過AliPlayerFactory類建立AliPlayer播放器。

    說明

    播放器提供的播放品質監控(可查看播放器整體播放品質相關資料)、單點追查(可定位到具體的使用者或裝置,分析其播允許存取為,快速定位播放異常等問題)及視頻播放統計功能都依賴埋點日誌上報功能而實現。

    在建立播放器時,根據setTraceId參數的設定不同,其後續可實現的功能不同,具體如下:

    • setTraceId參數不傳(預設):埋點日誌上報功能開啟,後續可以使用播放品質監控和視頻播放統計功能,無法使用單點追查功能。

    • setTraceId參數傳入traceid:traceid的值由您自行定義,需為您的使用者或使用者裝置的唯一識別碼,例如傳入您業務的userid或者IMEI、IDFA等您業務使用者的裝置ID。傳入traceid後,埋點日誌上報功能開啟,後續可以使用播放品質監控、單點追查和視頻播放統計功能。

    • setTraceId參數設定為DisableAnalytics:關閉埋點日誌上報,後續無法使用播放品質監控、單點追查和視頻播放統計功能。

    // 建立播放器
    AliPlayer aliPlayer = AliPlayerFactory.createAliPlayer(context);
    // 建議傳入traceId
    aliPlayer.setTraceId("traceId");  

    說明

    當前埋點日誌上傳至中國上海節點,後續會開放新加坡服務地區。

  2. 設定監聽器。

    播放器支援設定多個監聽器。

    • OnPreparedListener必須設定,因為手動播放需要在OnPreparedListener回調中調用aliPlayer.start()開始播放。

    • OnErrorListenerOnCompletionListenerOnLoadingStatusListenerOnInfoListener較為重要,建議您設定。

    aliPlayer.setOnErrorListener(new IPlayer.OnErrorListener() {
        //此回調會在使用播放器的過程中,出現了任何錯誤,都會回調此介面。
    
        @Override
        public void onError(ErrorInfo errorInfo) {
            ErrorCode errorCode = errorInfo.getCode(); //錯誤碼。
            String errorMsg = errorInfo.getMsg(); //錯誤描述。
            //errorExtra為額外錯誤資訊,形式為json字串,樣本如下,需要注意ModuleCode並不完全等同於errorCode
            //{ "Url": "xxx",
       		//	"Module": "NetWork",
        	//	"ModuleCode": "-377",
       		//  "ModuleMessage": "Redirect to a url that is not a media"}
            String errorExtra= errorInfo.getExtra();         
            //出錯後需要停止掉播放器。
            aliPlayer.stop();
        }
    });
    aliPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {
        // 調用aliPlayer.prepare()方法後,播放器開始讀取並解析資料。成功後,會回調此介面。
    
        @Override
        public void onPrepared() {
            //一般調用start開始播放視頻。
            aliPlayer.start();
        }
    });
    aliPlayer.setOnCompletionListener(new IPlayer.OnCompletionListener() {
        //播放完成之後,就會回調到此介面。
        @Override
        public void onCompletion() {
            //一般調用stop停止播放視頻。
            aliPlayer.stop();
        }
    });
    aliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
        //播放器中的一些資訊,包括:當前進度、緩衝位置等等。
        @Override
        public void onInfo(InfoBean infoBean) {
            InfoCode code = infoBean.getCode(); //資訊碼。
            String msg = infoBean.getExtraMsg();//資訊內容。
            long value = infoBean.getExtraValue(); //資訊值。
    
            //當前進度:InfoCode.CurrentPosition
            //當前緩衝位置:InfoCode.BufferedPosition
        }
    });
    aliPlayer.setOnLoadingStatusListener(new IPlayer.OnLoadingStatusListener() {
        //播放器的載入狀態, 網路不佳時,用於展示載入畫面。
    
        @Override
        public void onLoadingBegin() {
            //開始載入。畫面和聲音不足以播放。
            //一般在此處顯示圓形載入。
        }
    
        @Override
        public void onLoadingProgress(int percent, float netSpeed) {
            //載入進度。百分比和網速。
        }
    
        @Override
        public void onLoadingEnd() {
            //結束載入。畫面和聲音可以播放。
            //一般在此處隱藏圓形載入。
        }
    });
  3. 建立DataSource。

    • Android播放器SDK支援4種點播播放方式,包括:UrlSource播放、VidAuth播放(ApsaraVideo for VOD使用者推薦使用)、VidSts播放、加密播放。

    • Android播放器SDK支援2種直播播放方式,UrlSource播放和加密播放。

    說明
    • UrlSource是直接通過URL播放,VidSts,VidAuth是通過Vid進行播放。

    • 接入地區Region的設定,請參見點播地區標識

    點播視訊播放

    點播UrlSource播放

    使用點播UrlSource播放方式播放點播視訊,需要將播放器的setUrl屬性設定為播放地址。

    • 阿里雲ApsaraVideo for VOD服務中的播放地址:可以調用GetPlayInfo介面擷取。建議您整合點播服務端SDK來擷取音視頻播放地址,免去自簽名的麻煩。調用介面擷取音視頻播放地址的樣本請參見開發人員門戶

    • 本地視頻地址:請確保有存取權限,可以通過系統API擷取到可訪問的本地視頻檔案完整路徑,例如:/sdcard/xxx/xxx/xxx.mp4content://xxx/xxx/xx.mp4

     UrlSource urlSource = new UrlSource();
            urlSource.setUri("播放地址");// 必選參數,播放地址,可以是第三方點播地址,或阿里雲ApsaraVideo for VOD服務中的播放地址,也可以是本地視頻地址。
            aliPlayer.setDataSource(urlSource);

    點播VidAuth播放(推薦)

    使用VidAuth播放方式播放點播視訊,需要將播放器的vid屬性設定為音視頻ID,將playauth屬性設定為音視頻播放憑證。

    • 音視頻ID:可以在音視頻上傳完成後通過控制台(路徑:媒資庫>音/視頻。)或服務端介面(SearchMedia)擷取。

    • 音視頻播放憑證:可以調用GetVideoPlayAuth介面擷取。建議您整合點播服務端SDK來擷取音視頻播放憑證,免去自簽名的麻煩。調用介面擷取音視頻播放憑證的樣本請參見開發人員門戶

    推薦ApsaraVideo for VOD使用者採用此播放方式。相比STS播放方式,PlayAuth播放方式在易用性和安全性上更有優勢,對比詳情請參見憑證方式與STS方式對比

    VidAuth vidAuth = new VidAuth();
            vidAuth.setVid("Vid資訊");// 必選參數,視頻ID(VideoId)。
            vidAuth.setPlayAuth("<yourPlayAuth>");// 必選參數,播放憑證,需要調用點播服務的GetVideoPlayAuth介面產生。
            vidAuth.setRegion("接入地區");// 5.5.5.0及之後版本播放器SDK,本參數已棄用,無需設定region,播放器會自動解析region;5.5.5.0之前版本播放器SDK,本參數必選,點播服務的接入地區,預設為cn-shanghai。
            // vidAuth.setAuthTimeout(3600);// 播放地址的有效時間長度,單位:秒。該時間長度會覆蓋在ApsaraVideo for VOD控制台設定的URL鑒權的有效時間長度。如果不傳,則取預設值3600。如需設定此參數,請確保該時間大於視頻的實際時間長度,防止播放地址在播放完成前到期。
            aliPlayer.setDataSource(vidAuth);

    點播VidSts播放

    使用點播VidSts播放方式播放點播視訊是指用STS臨時憑證而非點播音視頻播放憑證播放。STS安全性權杖和STS臨時AK對(AccessKeyId和AccessKeySecret)需要提前擷取,擷取方式請參見使用STS臨時授權方案上傳視頻

    VidSts vidSts = new VidSts();
            vidSts.setVid("Vid資訊");// 必選參數,視頻ID(VideoId)。
            vidSts.setAccessKeyId("<yourAccessKeyId>");// 必選參數,STS臨時AK對的存取金鑰ID,需要調用STS服務的AssumeRole介面產生。
            vidSts.setAccessKeySecret("<yourAccessKeySecret>");// 必選參數,STS臨時AK對的存取金鑰,需要調用STS服務的AssumeRole介面產生。
            vidSts.setSecurityToken("<yourSecurityToken>");// 必選參數,STS安全性權杖,需要調用STS服務的AssumeRole介面產生。
            vidSts.setRegion("接入地區");// 必選參數,點播服務的接入地區,預設為cn-shanghai。
            // vidSts.setAuthTimeout(3600);// 播放地址的有效時間長度,單位:秒。該時間長度會覆蓋在ApsaraVideo for VOD控制台設定的URL鑒權的有效時間長度。如果不傳,則取預設值3600。如需設定此參數,請確保該時間大於視頻的實際時間長度,防止播放地址在播放完成前到期。
            aliPlayer.setDataSource(vidSts);

    點播加密播放

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

    直播視頻播放

    直播UrlSource播放

    使用UrlSource播放方式播放直播視頻,需要將播放器的setUrl屬性設定為直播拉流地址。播放地址可以是第三方直播地址或阿里雲直播服務中的拉流地址。

    阿里雲直播拉流地址可以通過直播控制台的地址產生器產生。詳情請參見直播地址產生器

    UrlSource urlSource = new UrlSource();
            urlSource.setUri("播放地址");// 播放地址,可以是第三方直播地址,或阿里雲直播服務中的拉流地址。
            aliPlayer.setDataSource(urlSource);

    直播DRM加密播放

    直播DRM加密播放請參見播放DRM加密視頻-Web端

  4. 設定顯示View。

    播放器支援SurfaceView和TextureView,任選其中一種即可。

    • 設定SurfaceView,樣本如下:

      SurfaceView surfaceView = findViewById(R.id.surface_view);
      surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
          @Override
          public void surfaceCreated(SurfaceHolder holder) {
              aliPlayer.setSurface(holder.getSurface());
          }
      
          @Override
          public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
              aliPlayer.surfaceChanged();
          }
      
          @Override
          public void surfaceDestroyed(SurfaceHolder holder) {
              aliPlayer.setSurface(null);
          }
      });
    • 設定TextureView,樣本如下:

      TextureView textureView = findViewById(R.id.texture_view);
      textureView.setSurfaceTextureListener(new TextureView.SurfaceTextureListener() {
          @Override
          public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
              aliPlayer.setSurface(new Surface(surface));
          }
      
          @Override
          public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
              aliPlayer.surfaceChanged();
          }
      
          @Override
          public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
              aliPlayer.setSurface(null);
              return false;
          }
      
          @Override
          public void onSurfaceTextureUpdated(SurfaceTexture surface) {
      
          }
      });
  5. 可選:開啟自動播放,預設為關閉狀態。

    aliPlayer.setAutoPlay(true);
  6. 準備播放。

    調用aliPlayer.prepare()開始讀取並解析資料。

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

    • 如果未開啟自動播放,需要在OnPrepard回調發生之後,擇機調用aliPlayer.start()開始播放視頻。

    • 如果開啟了自動播放,則不需要調用aliPlayer.start(),資料解析完成後將開始自動播放視頻。

    aliPlayer.start();// 開始之後可以調用pause()暫停播放視頻。

控制播放

Android播放器SDK支援從指定時間點播放、開始、暫停、停止播放等操作。

開始播放

指開始播放視頻,由start介面實現。樣本如下:

aliyunVodPlayer.start();

從指定時間開始播放

指跳轉到某個時刻進行播放,由seekTo介面實現。適用於使用者拖拽進度條,或續播等需要從指定時間點開始播放的情境。樣本如下:

// posotion為指定的時間,單位:毫秒。
aliyunVodPlayer.seekTo(long position);

以指定位置起播,僅生效一次,適用於使用者從指定時間點開始播放的情境。樣本如下:

//以指定位置起播,每次prepare前調用,僅生效一次,time為指定的時間(毫秒),seekMode可設定為精準模式和非精準模式。
aliyunVodPlayer.setStartTime(time, seekMode);

暫停播放

指暫停播放視頻,由pause介面實現。樣本如下:

aliyunVodPlayer.pause();

停止播放

指停止播放視頻,由stop介面實現。樣本如下:

aliyunVodPlayer.stop();

銷毀播放器

銷毀播放器執行個體,有同步和非同步兩種銷毀方式,樣本如下:

//同步銷毀,內部會自動調用stop介面
aliyunVodPlayer.release();
//非同步銷毀,內部會自動調用stop介面
aliyunVodPlayer.releaseAsync();	
說明

調用同步銷毀介面需等待播放器資源完全釋放後才返回。如果您對介面的響應速度有較高要求,建議使用非同步銷毀介面,並注意以下幾點:

  1. 避免在非同步銷毀過程中對播放器對象執行任何其他動作。

  2. 無需在調用非同步銷毀之前手動停止播放器,因為該過程內部已經包含了非同步化的停止流程。

設定顯示模式

Android播放器SDK支援填充、旋轉、鏡像等顯示設定。

填充

支援設定寬高比適應、寬高比填充和展開填充這3種畫面填充模式,由setScaleMode介面實現。樣本如下:

// 設定寬高比適應(將按照視頻寬高比等比縮小到view內部,不會有畫面變形)
aliyunVodPlayer.setScaleMode(ScaleMode.SCALE_ASPECT_FIT);
// 設定寬高比填充(將按照視頻寬高比等比放大,充滿view,不會有畫面變形)
aliyunVodPlayer.setScaleMode(ScaleMode.SCALE_ASPECT_FILL);
// 設定展開填充(如果視頻寬高比例與view比例不一致,會導致畫面變形)
aliyunVodPlayer.setScaleMode(ScaleMode.SCALE_TO_FILL);

旋轉

指畫面按指定角度旋轉,由setRotateMode介面實現。設定後還可查詢旋轉角度。樣本如下:

// 設定畫面順時針旋轉0度
aliyunVodPlayer.setRotateMode(RotateMode.ROTATE_0);
// 設定畫面順時針旋轉90度
aliyunVodPlayer.setRotateMode(RotateMode.ROTATE_90);
// 設定畫面順時針旋轉180度
aliyunVodPlayer.setRotateMode(RotateMode.ROTATE_180);
// 設定畫面順時針旋轉270度
aliyunVodPlayer.setRotateMode(RotateMode.ROTATE_270);
// 擷取旋轉角度
aliyunVodPlayer.getRotateMode();

鏡像

指畫面按不同鏡像效果顯示,支援水平鏡像、垂直鏡像和無鏡像,由setMirrorMode介面實現。樣本如下:

// 設定無鏡像
aliyunVodPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_NONE);
// 設定水平鏡像
aliyunVodPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_HORIZONTAL);
// 設定垂直鏡像
aliyunVodPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_VERTICAL);

擷取播放資訊

Android播放器SDK支援擷取當前的播放進度、播放時間長度和緩衝進度等資訊。

擷取當前播放進度

指擷取當前的播放時刻,需要在onInfo回調中擷取,由getExtraValue介面實現。樣本如下:

mAliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
    @Override
    public void onInfo(InfoBean infoBean) {
        if(infoBean.getCode() == InfoCode.CurrentPosition){
            // extraValue為當前播放進度,單位為毫秒
            long extraValue = infoBean.getExtraValue();
        }
    }
});

擷取播放時間長度

指擷取視頻總時間長度。需要在視頻載入完成以後才可以擷取到,可以在onPrepared事件後擷取。由getDuration介面實現。樣本如下:

long duration = mAliPlayer.getDuration();

擷取緩衝進度

指擷取視頻當前的緩衝進度,需要在onInfo回調中擷取,由getExtraValue介面實現。樣本如下:

mAliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
    @Override
    public void onInfo(InfoBean infoBean) {
        if(infoBean.getCode() == InfoCode.BufferedPosition){
            // extraValue為當前緩衝進度,單位為毫秒
            long extraValue = infoBean.getExtraValue();
        }
    }
});

擷取即時渲染幀率、音視頻碼率、網路下行碼率

樣本如下:

// 擷取當前渲染的幀率,資料類型為Float。
mAliPlayer.getOption(IPlayer.Option.RenderFPS);
// 擷取當前播放的視頻碼率,資料類型為Float,單位為bps。
mAliPlayer.getOption(IPlayer.Option.VideoBitrate);
// 擷取當前播放的音頻碼率,資料類型為Float,單位為bps。
mAliPlayer.getOption(IPlayer.Option.AudioBitrate);
// 擷取當前的網路下行碼率,資料類型為Float,單位為bps。
mAliPlayer.getOption(IPlayer.Option.DownloadBitrate);

監聽播放狀態

指監聽播放器的狀態,onStateChanged回調參數為當前播放器狀態。樣本如下:

mAliPlayer.setOnStateChangedListener(new IPlayer.OnStateChangedListener() {
    @Override
    public void onStateChanged(int newState) {
        /*
          int idle = 0;
          int initalized = 1;
          int prepared = 2;
          int started = 3;
          int paused = 4;
          int stopped = 5;
          int completion = 6;
          int error = 7;
      */
    }
});

音畫不同步回調

指極端條件下(軟解播放4K或者低端機高倍速播放高清H265流等),解碼效能無法跟上播放速度時,會通過回調提示。樣本如下:

mAliPlayer.setOnAVNotSyncStatusListener(new IPlayer.OnAVNotSyncStatusListener() {
    @Override
    public void onAVNotSyncStart(int type) {
        if (type == 0) {
            //降低播放倍速
            if (player.getSpeed() > 1) {
                player.setSpeed(1);
            }
        }
        Toast.makeText(getContext(), "音畫不同步開始" , Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onAVNotSyncEnd() {
        Toast.makeText(getContext(), "音畫不同步結束" , Toast.LENGTH_SHORT).show();
    }
});

設定音量

設定音量包括音量大小和靜音設定。

音量大小

指調節音量大小,支援0~2倍,當音量大於1時,可能出現噪音,不推薦使用。由setVolume介面實現。設定後還可擷取音量資訊。樣本如下:

// volume的值為0~2之間的實數。
aliyunVodPlayer.setVolume(1f);
// 擷取音量資訊。
aliyunVodPlayer.getVolume();

靜音設定

指將播放中的視頻設定為靜音狀態,由setMute介面實現。樣本如下:

aliyunVodPlayer.setMute(true);

倍速播放

Android播放器SDK提供了倍速播放視頻的功能,通過設定setSpeed方法,能夠以0.5倍~5倍速去播放視頻。同時保持變聲不變調。樣本如下:

// 設定倍速播放:支援0.5~5倍速的播放,通常按0.5的倍數來設定,例如0.5倍、1倍、1.5倍等
aliyunVodPlayer.setSpeed(1.0f);

多清晰度設定

直播UrlSource播放方式

    說明
    • 支援阿里雲ApsaraVideo for Live的播放地址或經直播轉碼後(現支援通用轉碼和自訂轉碼)的轉碼流地址,直播轉碼詳情請參見轉碼管理;地址擷取方式請參見產生推流地址和播放地址

    • 支援ARTC協議和FLV協議的直播流的不同清晰度切換。

    • 推流的gop size需要設定為2s,網域名稱需要配置為時間戳記隨源。

    • 切換到不符合上述要求的流地址時,會切換失敗。

切換清晰度

通過switchStream方法切換清晰度,傳遞對應新清晰度的URL即可。

mAliPlayer.switchStream(newUrl);

清晰度切換通知

清晰度切換成功與失敗回調。

mAliPlayer.setOnStreamSwitchedListener(new IPlayer.OnStreamSwitchedListener() {
    @Override
    public void onSwitchedSuccess(String url) {
        Log.i("SwitchStream", "switch success, url = " + url);
    }

    @Override
    public void onSwitchedFail(String url, ErrorInfo errorInfo) {
        Log.i("SwitchStream", "switch failed, url = " + url + ", error=" + errorInfo.getMsg());
    }
});

點播Vid播放方式(VidAuth或VidSts)

如果使用Vid方式(VidAuth或VidSts)播放,無需額外設定。Android播放器SDK會從點播服務擷取清晰度列表。

擷取清晰度

當視頻載入完成後,可以擷取視頻的清晰度。

//擷取媒體所有的流資訊
List<TrackInfo> trackInfos = mAliPlayer.getMediaInfo().getTrackInfos();
//遍曆並擷取清晰度
for (TrackInfo trackInfo : trackInfos) {
     if(trackInfo.getType() == TrackInfo.Type.TYPE_VOD){
             //擷取視頻清晰度
        String vodDefinition = trackInfo.getVodDefinition();
     }
}

切換清晰度

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

mAliPlayer.selectTrack(index);

清晰度切換通知

清晰度切換成功與失敗回調。

mAliPlayer.setOnTrackChangedListener(new IPlayer.OnTrackChangedListener() {
    @Override
    public void onChangedSuccess(TrackInfo trackInfo) { }

    @Override
    public void onChangedFail(TrackInfo trackInfo, ErrorInfo errorInfo) { }
});

快切模式

開啟快切模式後,手動調用selectTrack時,都會快速得到響應。

playerConfig.mSelectTrackBufferMode = 1;
mAliPlayer.setConfig(playerConfig)

迴圈播放

Android播放器SDK提供了迴圈播放視頻的功能。調用setLoop開啟迴圈播放,播放完成後,將會自動從頭開始播放視頻。樣本如下:

aliyunVodPlayer.setLoop(true);

同時迴圈開始的回調將會使用onInfo中通知。樣本如下:

aliyunVodPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
    @Override
    public void onInfo(InfoBean infoBean) {
        if (infoBean.getCode() == InfoCode.LoopingStart){
            //迴圈播放開始事件。
        }
    }
});

切換音軌

Android播放器SDK提供了切換音軌的功能,適用於使用者觀看多語言配音的視頻時可以自主進行配音語言切換等情境。

使用說明

目前僅支援非列表播放流(例如MP4流)、單碼率混合HLS流、單碼率非混合HLS流的音頻流之間的切換以及多碼率混合HLS流的子流切換。各類型視頻流說明如下:

視頻流類型

視頻流尾碼

碼率數量

子m3u8數量

子流類型

切換說明

非列表播放流(例如MP4流)

.mp4

1

-

一條播放流匯聚了一路視頻流、可能多路音頻流和多路字幕流。

支援多路音頻流之間的切換。

單碼率混合HLS流

.m3u8

1

1

一條播放流匯聚了一路視頻流、可能多路音頻流和多路字幕流。

支援多路音頻流之間的切換。

單碼率非混合HLS流

.m3u8

1

n

m3u8,每條子流只能是視頻流、音頻流或字幕流中的一種。

支援多路音頻流之間的切換。

多碼率混合HLS流

.m3u8

n

n

m3u8,每條子流匯聚了一路視頻流、可能多路音頻流和多路字幕流,不同子流之間碼率不同。

目前僅支援子流之間的切換,不支援子流的多路音頻流之間的切換。

使用樣本

  1. 設定回調。

    mAliyunVodPlayer.setOnSubTrackReadyListener(new IPlayer.OnSubTrackReadyListener() {
        @Override
        //onSubTrackReady回調,通常發生在prepare回調之前。
        public void onSubTrackReady(MediaInfo mediaInfo) {
            if (mPlayerTrackFragment != null) {
                //mPlayerTrackFragment.showMediaInfo();
                //通過getSubMediaInfo主動擷取對應的MediaInfo資訊,需要在收到onSubTrackReady回調後才可以調用,否則為空白。
                MediaInfo subMediaInfo = mAliyunVodPlayer.getSubMediaInfo();
                TrackInfos = subMediaInfo.getTrackInfos();
                //判斷要選擇的Track
                myTrack = myfunc(TrackInfos)
            }
        }
    });
  2. 切換音軌。

    index = myTrack.getIndex();
    mAliyunVodPlayer.selectTrack(index);

擷取SDK日誌

在播放器SDK運行過程中會產生詳細的日誌資訊,包括網路請求的狀態、系統調用的結果、許可權申請情況等各種運行時事件。開發人員可以通過查看這些日誌進行代碼調試或排查問題,提高開發效率。

方式一:通過開發工具的控制台擷取播放器SDK日誌

此方式適用於在您本地可以複現問題並抓取日誌的情境。

  1. 開啟日誌並設定記錄層級。

    // Logger在com.cicada.player.utils下
    // 開啟日誌開關
    Logger.getInstance(context).enableConsoleLog(true);
    // 設定記錄層級,預設為AF_LOG_LEVEL_INFO,如需排查問題,可設定為AF_LOG_LEVEL_TRACE
    Logger.getInstance(context).setLogLevel(Logger.LogLevel.AF_LOG_LEVEL_INFO);
  2. 設定幀層級日誌。

    //設定幀層級日誌列印
    //選項value 0代表關閉	1代表開啟
    Logger.getInstance(this).setLogOption(Logger.LogOption.FRAME_LEVEL_LOGGING_ENABLED,value);
    說明

    設定幀層級日誌功能主要在排查故障情境下使用。

  3. 收集日誌。

    複現問題後,可在您開發工具(例如Logcat)的控制台擷取日誌。

方式二:通過LogCallback監聽播放器SDK的輸出日誌

此方式適用於問題發生在您的使用者側,在您本地無法複現問題並抓取日誌的情境。可以通過LogCallback監聽播放器SDK的輸出日誌,並自動輸出到您App的日誌通道中。

  1. 開啟日誌並設定記錄層級。

    // Logger在com.cicada.player.utils下
    // 設定記錄層級,預設為AF_LOG_LEVEL_INFO,如需排查問題,可設定為AF_LOG_LEVEL_TRACE
    Logger.getInstance(context).setLogLevel(Logger.LogLevel.AF_LOG_LEVEL_INFO);
    Logger.getInstance(mContext).setLogCallback(newLogger.OnLogCallback(){
            @Override
            public void onLog(Logger.LogLevel logLevel,Strings){
                // 日誌
            }
    });
  2. 收集日誌。

    複現問題後,日誌將通過您App的日誌通道自動輸出到您App的記錄檔。

相關文檔