基础功能

本文为您介绍如何创建Android播放器实例并提供设置音量、设置拖拽播放、监听播放状态、设置循环播放、设置倍速播放、切换音轨等基础播放功能的使用示例。

重要

如需运行体验 Demo,请下载后参考跑通Demo编译运行。

设置播放源(DataSource)

  • Android播放器SDK支持4种点播播放方式,包括:VidAuth播放(视频点播用户推荐使用)、VidSts播放、UrlSource播放、加密播放。

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

说明
  • UrlSource是直接通过URL播放,VidSts,VidAuth是通过Vid进行播放。

  • 接入地域Region的设置,请参见点播地域标识

点播视频播放

点播VidAuth播放(推荐)

使用VidAuth播放方式播放点播视频,需要将播放器的vid属性设置为音视频ID,将playauth属性设置为音视频播放凭证。

  • 音视频ID:可以在音视频上传完成后通过控制台(路径:媒资库>音/视频。)或服务端接口(SearchMedia)获取。

  • 音视频播放凭证:可以调用GetVideoPlayAuth接口获取。建议您集成点播服务端SDK来获取音视频播放凭证,免去自签名的麻烦。调用接口获取音视频播放凭证的示例请参见开发者门户

推荐视频点播用户采用此播放方式。相比STS播放方式,PlayAuth播放方式在易用性和安全性上更有优势,对比详情请参见凭证方式与STS方式对比

若您在VOD控制台开启HLS标准加密参数透传,默认的参数名为MtsHIsUriToken,详情见HLS标准加密参数透传,那么请按照下述代码,将MtsHIsUriToken值设入点播源中。

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。如需设置此参数,请确保该时间大于视频的实际时长,防止播放地址在播放完成前过期。
        
   //若您在VOD控制台开启了HLS标准加密参数透传,且默认的参数名为MtsHlsUriToken,那么需要设置config,并将其传入vid中,参考下述
   VidPlayerConfigGen vidConfig = new VidPlayerConfigGen();
   vidConfig.setMtsHlsUriToken("<yourMtsHlsUriToken>");
   vidAuth.setPlayerConfig(config);
   aliPlayer.setDataSource(vidAuth);

点播VidSts播放

使用点播VidSts播放方式播放点播视频是指用STS临时凭证而非点播音视频播放凭证播放。STS安全令牌和STS临时AK对(AccessKeyIdAccessKeySecret)需要提前获取,获取方式请参见获取STS Token

若您在VOD控制台开启HLS标准加密参数透传,默认的参数名为MtsHIsUriToken,详情见HLS标准加密参数透传,那么请按照下述代码,将MtsHIsUriToken值设入点播源中。

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。如需设置此参数,请确保该时间大于视频的实际时长,防止播放地址在播放完成前过期。
        
       //若您在VOD控制台开启了HLS标准加密参数透传,且默认的参数名为MtsHlsUriToken,那么需要设置config,并将其传入vid中,参考下述
       //若您未在VOD控制台开启了HLS标准加密参数透传,那么则不需要集成下述代码
       VidPlayerConfigGen vidConfig = new VidPlayerConfigGen();
       vidConfig.setMtsHlsUriToken("<yourMtsHlsUriToken>");
       vidSts.setPlayerConfig(config);
       aliPlayer.setDataSource(vidSts);

点播UrlSource播放

使用点播UrlSource播放方式播放点播视频,需要将播放器的setUrl属性设置为播放地址。

  • 阿里云视频点播服务中的播放地址:可以调用GetPlayInfo接口获取。建议您集成点播服务端SDK来获取音视频播放地址,免去自签名的麻烦。调用接口获取音视频播放地址的示例请参见开发者门户

  • 本地视频地址:请确保有访问权限,可以通过系统API获取到可访问的本地视频文件完整路径,例如:/sdcard/xxx/xxx/xxx.mp4content://xxx/xxx/xx.mp4

 UrlSource urlSource = new UrlSource();
        urlSource.setUri("播放地址");// 必选参数,播放地址,可以是第三方点播地址,或阿里云视频点播服务中的播放地址,也可以是本地视频地址。
        aliPlayer.setDataSource(urlSource);

点播加密播放

点播视频支持HLS标准加密、阿里云私有加密和DRM加密。加密播放请参见Android端播放加密视频

直播视频播放

详情请参见标准直播播放

控制播放

Android播放器SDK支持从指定时间点播放、开始、暂停、停止播放等操作。

准备播放

指准备播放视频,由prepare接口实现。示例如下:

aliPlayer.prepare();

开始播放

指开始播放视频,由start接口实现。示例如下:

aliPlayer.start();

从指定时间开始播放

指跳转到某个时刻进行播放,由seekTo接口实现。适用于用户拖拽进度条,或续播等需要从指定时间点开始播放的场景。示例如下:

// posotion为指定的时间,单位:毫秒。
aliPlayer.seekTo(long position);

以指定位置起播,仅生效一次,适用于用户从指定时间点开始播放的场景。示例如下:

//以指定位置起播,每次prepare前调用,仅生效一次,time为指定的时间(毫秒),seekMode可设置为精准模式和非精准模式。
aliPlayer.setStartTime(time, seekMode);

暂停播放

指暂停播放视频,由pause接口实现。示例如下:

aliPlayer.pause();

恢复播放

指恢复播放视频,由start接口实现。示例如下:

aliPlayer.start();

停止播放

指停止播放视频,由stop接口实现。示例如下:

aliPlayer.stop();

销毁播放器

销毁播放器实例,有同步和异步两种销毁方式,示例如下:

//同步销毁,内部会自动调用stop接口
aliPlayer.release();
//异步销毁,内部会自动调用stop接口
aliPlayer.releaseAsync();	
说明

调用同步销毁接口需等待播放器资源完全释放后才返回。如果您对界面的响应速度有较高要求,建议使用异步销毁接口,并注意以下几点:

  1. 避免在异步销毁过程中对播放器对象执行任何其他操作。

  2. 无需在调用异步销毁之前手动停止播放器,因为该过程内部已经包含了异步化的停止流程。

播放器状态监听

Android播放器SDK支持设置播放器监听和监听播放状态。

设置播放器监听

播放器支持设置多个监听器。

  • 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() {
        // 准备完成
    }
});
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) {
        //加载进度。百分比和网速。
        //网速为预留字段,暂时为0
    }

    @Override
    public void onLoadingEnd() {
        //结束加载。画面和声音可以播放。
        //一般在此处隐藏圆形加载。
    }
});

监听播放状态

指监听播放器的状态,onStateChanged回调参数为当前播放器状态。示例如下:

aliPlayer.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;
      */
    }
});

设置显示模式

Android播放器SDK支持填充、旋转、镜像等显示设置。

填充

支持设置宽高比适应、宽高比填充和拉伸填充这3种画面填充模式,由setScaleMode接口实现。示例如下:

// 设置宽高比适应(将按照视频宽高比等比缩小到view内部,不会有画面变形)
aliPlayer.setScaleMode(ScaleMode.SCALE_ASPECT_FIT);
// 设置宽高比填充(将按照视频宽高比等比放大,充满view,不会有画面变形)
aliPlayer.setScaleMode(ScaleMode.SCALE_ASPECT_FILL);
// 设置拉伸填充(如果视频宽高比例与view比例不一致,会导致画面变形)
aliPlayer.setScaleMode(ScaleMode.SCALE_TO_FILL);

旋转

指画面按指定角度旋转,由setRotateMode接口实现。设置后还可查询旋转角度。示例如下:

// 设置画面顺时针旋转0度
aliPlayer.setRotateMode(RotateMode.ROTATE_0);
// 设置画面顺时针旋转90度
aliPlayer.setRotateMode(RotateMode.ROTATE_90);
// 设置画面顺时针旋转180度
aliPlayer.setRotateMode(RotateMode.ROTATE_180);
// 设置画面顺时针旋转270度
aliPlayer.setRotateMode(RotateMode.ROTATE_270);
// 获取旋转角度
aliPlayer.getRotateMode();

镜像

指画面按不同镜像效果显示,支持水平镜像、垂直镜像和无镜像,由setMirrorMode接口实现。示例如下:

// 设置无镜像
aliPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_NONE);
// 设置水平镜像
aliPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_HORIZONTAL);
// 设置垂直镜像
aliPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_VERTICAL);

获取播放信息

Android播放器SDK支持获取当前的播放进度、播放时长和缓冲进度等信息。

获取当前播放进度

指获取当前的播放时刻,需要在onInfo回调中获取,由getExtraValue接口实现。示例如下:

aliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
    @Override
    public void onInfo(InfoBean infoBean) {
        if(infoBean.getCode() == InfoCode.CurrentPosition){
            // extraValue为当前播放进度,单位为毫秒
            long extraValue = infoBean.getExtraValue();
        }
    }
});

获取播放时长

指获取视频总时长。需要在视频加载完成以后才可以获取到,可以在onPrepared事件后获取。由getDuration接口实现。示例如下:

long duration = aliPlayer.getDuration();

获取实际播放时长

指实时获取实际播放时长,获取到的时长不包含播放过程中的暂停、卡顿等时间。示例如下:

long duration = aliPlayer.getPlayedDuration();

获取缓冲进度

指获取视频当前的缓冲进度,需要在onInfo回调中获取,由getExtraValue接口实现。示例如下:

aliPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
    @Override
    public void onInfo(InfoBean infoBean) {
        if(infoBean.getCode() == InfoCode.BufferedPosition){
            // extraValue为当前缓冲进度,单位为毫秒
            long extraValue = infoBean.getExtraValue();
        }
    }
});

获取实时渲染帧率、音视频码率、网络下行码率

示例如下:

// 获取当前渲染的帧率,数据类型为Float。
aliPlayer.getOption(IPlayer.Option.RenderFPS);
// 获取当前播放的视频码率,数据类型为Float,单位为bps。
aliPlayer.getOption(IPlayer.Option.VideoBitrate);
// 获取当前播放的音频码率,数据类型为Float,单位为bps。
aliPlayer.getOption(IPlayer.Option.AudioBitrate);
// 获取当前的网络下行码率,数据类型为Float,单位为bps。
aliPlayer.getOption(IPlayer.Option.DownloadBitrate);

音画不同步回调

指极端条件下(软解播放4K或者低端机高倍速播放高清H265流等),解码性能无法跟上播放速度时,会通过回调提示。示例如下:

aliPlayer.setOnAVNotSyncStatusListener(new IPlayer.OnAVNotSyncStatusListener() {
    @Override
    public void onAVNotSyncStart(int type) {
        if (type == 0) {
            //降低播放倍速
            if (aliPlayer.getSpeed() > 1) {
                aliPlayer.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之间的实数。
aliPlayer.setVolume(1f);
// 获取音量信息。
aliPlayer.getVolume();

静音设置

指将播放中的视频设置为静音状态,由setMute接口实现。示例如下:

aliPlayer.setMute(true);

倍速播放

Android播放器SDK提供了倍速播放视频的功能,通过设置setSpeed方法,能够以0.5倍~5倍速去播放视频。同时保持变声不变调。示例如下:

// 设置倍速播放:支持0.5~5倍速的播放,通常按0.5的倍数来设置,例如0.5倍、1倍、1.5倍等
aliPlayer.setSpeed(1.0f);

多清晰度设置

说明

详细代码示例可参考 API-Example多码率/分辨率切换(MultiResolution模块,该工程是基于Java的阿里云播放器SDK Android示例工程,能够帮助开发者快速掌握SDK核心功能集成。

直播UrlSource播放方式

详情请参见标准直播播放

点播Vid播放方式(VidAuthVidSts)

如果使用Vid方式(VidAuthVidSts)播放,无需额外设置。Android播放器SDK会从点播服务获取清晰度列表。

获取清晰度

当视频加载完成后,可以获取视频的清晰度。

//获取媒体所有的流信息
List<TrackInfo> trackInfos = aliPlayer.getMediaInfo().getTrackInfos();
//遍历并获取清晰度
for (TrackInfo trackInfo : trackInfos) {
     if(trackInfo.getType() == TrackInfo.Type.TYPE_VOD){
             //获取视频清晰度
        String vodDefinition = trackInfo.getVodDefinition();
     }
}

切换清晰度

通过selectTrack方法切换清晰度,传递对应TrackInfoindex即可。

aliPlayer.selectTrack(index);

清晰度切换通知

清晰度切换成功与失败回调。

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

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

快切模式

开启快切模式后,手动调用selectTrack时,都会快速得到响应。

PlayerConfig config = aliPlayer.getConfig();
config.mSelectTrackBufferMode = 1;
aliPlayer.setConfig(config)

循环播放

Android播放器SDK提供了循环播放视频的功能。调用setLoop开启循环播放,播放完成后,将会自动从头开始播放视频。示例如下:

aliPlayer.setLoop(true);

同时循环开始的回调将会使用onInfo中通知。示例如下:

aliPlayer.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. 设置回调。

    aliPlayer.setOnSubTrackReadyListener(new IPlayer.OnSubTrackReadyListener() {
        @Override
        //onSubTrackReady回调,通常发生在prepare回调之前。
        public void onSubTrackReady(MediaInfo mediaInfo) {
            if (mPlayerTrackFragment != null) {
                //mPlayerTrackFragment.showMediaInfo();
                //通过getSubMediaInfo主动获取对应的MediaInfo信息,需要在收到onSubTrackReady回调后才可以调用,否则为空。
                MediaInfo subMediaInfo = aliPlayer.getSubMediaInfo();
                TrackInfos = subMediaInfo.getTrackInfos();
                //判断要选择的Track
                myTrack = myfunc(TrackInfos)
            }
        }
    });
  2. 切换音轨。

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

缩略图使用

说明

详细代码示例可参考 API-Example视频缩略图预览(Thumbnail模块,该工程是基于Java的阿里云播放器SDK Android示例工程,能够帮助开发者快速掌握SDK核心功能集成。

在播放器SDK中使用缩略图前,请确保已为视频配置缩略图,即视频已生成雪碧截图(在视频点播控制台创建类型为雪碧图的截图模板,通过工作流将视频用该雪碧图的截图模板处理后,生成雪碧图数据),详细内容请参见视频截图。播放器SDK中使用缩略图的示例代码如下:

mAliPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {
    @Override
    public void onPrepared() {
        //1.获取缩略图URL。
        List<Thumbnail> thumbnailList = mAliPlayer.getMediaInfo().getThumbnailList();
        //2.创建缩略图帮助类。
        ThumbnailHelper mThumbnailHelper = new ThumbnailHelper(thumbnailList.get(0).mURL);
        //3.设置监听。
        mThumbnailHelper.setOnPrepareListener(new ThumbnailHelper.OnPrepareListener() {
            @Override
            public void onPrepareSuccess() {
                //5.缩略图加载成功后,可以请求获取指定位置的缩略图。
            }
            @Override
            public void onPrepareFail() {}
        });

        mThumbnailHelper.setOnThumbnailGetListener(new ThumbnailHelper.OnThumbnailGetListener() {
            @Override
            public void onThumbnailGetSuccess(long positionMs, ThumbnailBitmapInfo thumbnailBitmapInfo) {
                //6.获取指定位置缩略图的Bitmap。
                Bitmap thumbnailBitmap = thumbnailBitmapInfo.getThumbnailBitmap();
            }
            @Override
            public void onThumbnailGetFail(long positionMs, String errorMsg) {}
        });

        //4.加载缩略图。
        mThumbnailHelper.prepare();
    }
});

请注意:如果播放方式为URL的时候,AliPlayer 可能并不能获取到ThumbnailList,建议用户直接指定缩略图的URL。

mAliPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {
    @Override
    public void onPrepared() {
        //1.创建缩略图帮助类。
        ThumbnailHelper mThumbnailHelper = new ThumbnailHelper(URL);
        //2.设置监听。
        mThumbnailHelper.setOnPrepareListener(new ThumbnailHelper.OnPrepareListener() {
            @Override
            public void onPrepareSuccess() {
                //4.缩略图加载成功后,可以请求获取指定位置的缩略图。
            }
            @Override
            public void onPrepareFail() {}
        });

        mThumbnailHelper.setOnThumbnailGetListener(new ThumbnailHelper.OnThumbnailGetListener() {
            @Override
            public void onThumbnailGetSuccess(long positionMs, ThumbnailBitmapInfo thumbnailBitmapInfo) {
                //5.获取指定位置缩略图的Bitmap。
                Bitmap thumbnailBitmap = thumbnailBitmapInfo.getThumbnailBitmap();
            }
            @Override
            public void onThumbnailGetFail(long positionMs, String errorMsg) {}
        });

        //3.加载缩略图。
        mThumbnailHelper.prepare();
    }
});

获取SDK日志

在播放器SDK运行过程中会生成详细的日志信息,包括网络请求的状态、系统调用的结果、权限申请情况等各种运行时事件。开发者可以通过查看这些日志进行代码调试或排查问题,提高开发效率。

方式一:通过开发工具的控制台获取播放器SDK日志

此方式适用于在您本地可以复现问题并抓取日志的场景。

  1. 打开日志并设置日志级别。

    // Loggercom.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. 打开日志并设置日志级别。

    // Loggercom.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的日志文件。

相关文档