本文為您介紹如何創建Android播放器實例并提供設置音量、設置拖拽播放、監聽播放狀態、設置循環播放、設置倍速播放、切換音軌等基礎播放功能的使用示例。
創建播放器
本節介紹如何用簡單的方式通過Android播放器SDK播放視頻,按照播放方式的不同可以分為手動播放和自動播放。
創建播放器。
通過
AliPlayerFactory
類創建AliPlayer播放器。說明播放器提供的播放質量監控(可查看播放器整體播放質量相關數據)、單點追查(可定位到具體的用戶或設備,分析其播放行為,快速定位播放異常等問題)及視頻播放統計功能都依賴埋點日志上報功能而實現。
在創建播放器時,根據
setTraceId
參數的設置不同,其后續可實現的功能不同,具體如下:setTraceId
參數不傳(默認):埋點日志上報功能開啟,后續可以使用播放質量監控和視頻播放統計功能,無法使用單點追查功能。setTraceId
參數傳入traceid:traceid的值由您自行定義,需為您的用戶或用戶設備的唯一標識符,例如傳入您業務的userid或者IMEI、IDFA等您業務用戶的設備ID。傳入traceid后,埋點日志上報功能開啟,后續可以使用播放質量監控、單點追查和視頻播放統計功能。setTraceId
參數設置為DisableAnalytics
:關閉埋點日志上報,后續無法使用播放質量監控、單點追查和視頻播放統計功能。
// 創建播放器 AliPlayer aliPlayer = AliPlayerFactory.createAliPlayer(context); // 建議傳入traceId aliPlayer.setTraceId("traceId");
設置監聽器。
播放器支持設置多個監聽器。
OnPreparedListener
必須設置,因為手動播放需要在OnPreparedListener
回調中調用aliPlayer.start()
開始播放。OnErrorListener
、OnCompletionListener
、OnLoadingStatusListener
、OnInfoListener
較為重要,建議您設置。
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() { //結束加載。畫面和聲音可以播放。 //一般在此處隱藏圓形加載。 } });
創建DataSource。
Android播放器SDK支持4種點播播放方式,包括:UrlSource播放、VidAuth播放(視頻點播用戶推薦使用)、VidSts播放、加密播放。
Android播放器SDK支持2種直播播放方式,UrlSource播放和加密播放。
說明UrlSource是直接通過URL播放,VidSts,VidAuth是通過Vid進行播放。
接入地域Region的設置,請參見點播地域標識。
點播視頻播放
點播UrlSource播放
使用點播UrlSource播放方式播放點播視頻,需要將播放器的setUrl屬性設置為播放地址。
阿里云視頻點播服務中的播放地址:可以調用GetPlayInfo接口獲取。建議您集成點播服務端SDK來獲取音視頻播放地址,免去自簽名的麻煩。調用接口獲取音視頻播放地址的示例請參見開發者門戶。
本地視頻地址:請確保有訪問權限,可以通過系統API獲取到可訪問的本地視頻文件完整路徑,例如:
/sdcard/xxx/xxx/xxx.mp4
或content://xxx/xxx/xx.mp4
。
UrlSource urlSource = new UrlSource(); urlSource.setUri("播放地址");// 必選參數,播放地址,可以是第三方點播地址,或阿里云視頻點播服務中的播放地址,也可以是本地視頻地址。 aliPlayer.setDataSource(urlSource);
點播VidAuth播放(推薦)
使用VidAuth播放方式播放點播視頻,需要將播放器的vid屬性設置為音視頻ID,將playauth屬性設置為音視頻播放憑證。
音視頻ID:可以在音視頻上傳完成后通過控制臺(路徑:媒資庫>音/視頻。)或服務端接口(SearchMedia)獲取。
音視頻播放憑證:可以調用GetVideoPlayAuth接口獲取。建議您集成點播服務端SDK來獲取音視頻播放憑證,免去自簽名的麻煩。調用接口獲取音視頻播放憑證的示例請參見開發者門戶。
推薦視頻點播用戶采用此播放方式。相比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);// 播放地址的有效時長,單位:秒。該時長會覆蓋在視頻點播控制臺設置的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);// 播放地址的有效時長,單位:秒。該時長會覆蓋在視頻點播控制臺設置的URL鑒權的有效時長。如果不傳,則取默認值3600。如需設置此參數,請確保該時間大于視頻的實際時長,防止播放地址在播放完成前過期。 aliPlayer.setDataSource(vidSts);
點播加密播放
點播視頻支持HLS標準加密、阿里云私有加密和DRM加密。加密播放請參見如何播放加密視頻。
直播視頻播放
直播UrlSource播放
使用UrlSource播放方式播放直播視頻,需要將播放器的setUrl屬性設置為直播拉流地址。播放地址可以是第三方直播地址或阿里云直播服務中的拉流地址。
阿里云直播拉流地址可以通過直播控制臺的地址生成器生成。詳情請參見直播地址生成器。
UrlSource urlSource = new UrlSource(); urlSource.setUri("播放地址");// 播放地址,可以是第三方直播地址,或阿里云直播服務中的拉流地址。 aliPlayer.setDataSource(urlSource);
直播DRM加密播放
直播DRM加密播放請參見播放DRM加密視頻-Web端。
設置顯示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) { } });
可選:開啟自動播放,默認為關閉狀態。
aliPlayer.setAutoPlay(true);
準備播放。
調用
aliPlayer.prepare()
開始讀取并解析數據。aliPlayer.prepare();
開始播放。
如果未開啟自動播放,需要在
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();
調用同步銷毀接口需等待播放器資源完全釋放后才返回。如果您對界面的響應速度有較高要求,建議使用異步銷毀接口,并注意以下幾點:
避免在異步銷毀過程中對播放器對象執行任何其他操作。
無需在調用異步銷毀之前手動停止播放器,因為該過程內部已經包含了異步化的停止流程。
設置顯示模式
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播放方式
支持阿里云視頻直播的播放地址或經直播轉碼后(現支持通用轉碼和自定義轉碼)的轉碼流地址,直播轉碼詳情請參見轉碼管理;地址獲取方式請參見生成推流地址和播放地址。
支持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,每條子流匯聚了一路視頻流、可能多路音頻流和多路字幕流,不同子流之間碼率不同。 | 目前僅支持子流之間的切換,不支持子流的多路音頻流之間的切換。 |
使用示例
設置回調。
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) } } });
切換音軌。
index = myTrack.getIndex(); mAliyunVodPlayer.selectTrack(index);
獲取SDK日志
在播放器SDK運行過程中會生成詳細的日志信息,包括網絡請求的狀態、系統調用的結果、權限申請情況等各種運行時事件。開發者可以通過查看這些日志進行代碼調試或排查問題,提高開發效率。
方式一:通過開發工具的控制臺獲取播放器SDK日志
此方式適用于在您本地可以復現問題并抓取日志的場景。
打開日志并設置日志級別。
// 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);
設置幀級別日志。
//設置幀級別日志打印 //選項value 0代表關閉 1代表打開 Logger.getInstance(this).setLogOption(Logger.LogOption.FRAME_LEVEL_LOGGING_ENABLED,value);
說明設置幀級別日志功能主要在排查故障場景下使用。
收集日志。
復現問題后,可在您開發工具(例如Logcat)的控制臺獲取日志。
方式二:通過LogCallback監聽播放器SDK的輸出日志
此方式適用于問題發生在您的用戶側,在您本地無法復現問題并抓取日志的場景。可以通過LogCallback監聽播放器SDK的輸出日志,并自動輸出到您App的日志通道中。
打開日志并設置日志級別。
// 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){ // 日志 } });
收集日志。
復現問題后,日志將通過您App的日志通道自動輸出到您App的日志文件。
相關文檔
詳細的接口描述,請參見API說明。
更多進階功能的使用方法,請參見進階功能。
播放異常時,常見問題及解決方案,請參見播放異常自主排查、Android播放器常見問題、錯誤碼查詢。