本文为您提供了使用Android端播放器功能的操作步骤及SDK示例,通过本文内容您可以快速了解如何通过SDK使用Android端播放器功能。
播放功能
- 创建播放器
通过AliPlayerFactory类创建播放器,可以创建两种播放器:
- AliPlayer
- AliListPlayer
单个播放功能使用AliPlayer。创建方法示例如下:AliPlayer aliyunVodPlayer; ..... aliyunVodPlayer = AliPlayerFactory.createAliPlayer(getApplicationContext());
如果播放的视频是通过播放器SDK安全下载后的本地文件,那么还需要设置一个加密校验信息(建议在Application中配置一次即可),示例如下:PrivateService.initService(getApplicationContext(), "encryptedApp.dat的本地路径");
创建加密文件的方式请参见安全文件获取问题。说明 如果没有设置正确的校验文件,播放安全下载后的文件会报错:ERROR_DEMUXER_OPENSTREAM。 - 设置播放器监听事件
播放器提供了多种监听事件,比如:onPrepared,onCompletion等事件。示例如下:
aliyunVodPlayer.setOnCompletionListener(new IPlayer.OnCompletionListener() { @Override public void onCompletion() { //播放完成事件 } }); aliyunVodPlayer.setOnErrorListener(new IPlayer.OnErrorListener() { @Override public void onError(ErrorInfo errorInfo) { //出错事件 } }); aliyunVodPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() { @Override public void onPrepared() { //准备成功事件 } }); aliyunVodPlayer.setOnVideoSizeChangedListener(new IPlayer.OnVideoSizeChangedListener() { @Override public void onVideoSizeChanged(int width, int height) { //视频分辨率变化回调 } }); aliyunVodPlayer.setOnRenderingStartListener(new IPlayer.OnRenderingStartListener() { @Override public void onRenderingStart() { //首帧渲染显示事件 } }); aliyunVodPlayer.setOnInfoListener(new IPlayer.OnInfoListener() { @Override public void onInfo(int type, long extra) { //其他信息的事件,type包括了:循环播放开始,缓冲位置,当前播放位置,自动播放开始等 } }); aliyunVodPlayer.setOnLoadingStatusListener(new IPlayer.OnLoadingStatusListener() { @Override public void onLoadingBegin() { //缓冲开始。 } @Override public void onLoadingProgress(int percent, float kbps) { //缓冲进度 } @Override public void onLoadingEnd() { //缓冲结束 } }); aliyunVodPlayer.setOnSeekCompleteListener(new IPlayer.OnSeekCompleteListener() { @Override public void onSeekComplete() { //拖动结束 } }); aliyunVodPlayer.setOnSubtitleDisplayListener(new IPlayer.OnSubtitleDisplayListener() { @Override public void onSubtitleShow(long id, String data) { //显示字幕 } @Override public void onSubtitleHide(long id) { //隐藏字幕 } }); aliyunVodPlayer.setOnTrackChangedListener(new IPlayer.OnTrackChangedListener() { @Override public void onChangedSuccess(TrackInfo trackInfo) { //切换音视频流或者清晰度成功 } @Override public void onChangedFail(TrackInfo trackInfo, ErrorInfo errorInfo) { //切换音视频流或者清晰度失败 } }); aliyunVodPlayer.setOnStateChangedListener(new IPlayer.OnStateChangedListener() { @Override public void onStateChanged(int newState) { //播放器状态改变事件 } }); aliyunVodPlayer.setOnSnapShotListener(new IPlayer.OnSnapShotListener() { @Override public void onSnapShot(Bitmap bm, int with, int height) { //截图事件 } });
说明 具体回调参数的详细说明,请参见接口说明。 - 创建DataSource,准备播放
播放器支持4种播放源:
- VidSts播放
- VidAuth播放
- VidMps播放
- UrlSource播放
说明 UrlSource是直接的url播放,其余的三种是通过vid进行播放:VidSts,VidAuth点播用户使用;VidMps仅限MPS用户使用。以VidSts举例,示例如下://创建VidSts VidSts aliyunVidSts = new VidSts(); aliyunVidSts.setVid(视频vid); aliyunVidSts.setAccessKeyId(临时akId); aliyunVidSts.setAccessKeySecret(临时akSecret); aliyunVidSts.setSecurityToken(安全token); aliyunVidSts.setRegion(接入区域); //设置播放源 aliyunVodPlayer.setDataSource(aliyunVidSts); ...... //准备播放 aliyunVodPlayer.prepare();
- 设置显示的view
如果播放源有画面,那么需要设置显示的view到播放器中,用来显示画面,支持SurfaceView和TextureView。以SurfaceView举例,示例如下:
surfaceView = (SurfaceView) findViewById(R.id.playview); surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() { @Override public void surfaceCreated(SurfaceHolder holder) { aliyunVodPlayer.setDisplay(holder); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { aliyunVodPlayer.redraw(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { aliyunVodPlayer.setDisplay(null); } });
在
surfaceChanged
方法中需要调用播放器的redraw
方法,是用来刷新视频画面的。如果view的大小变化了,调用此方法将会更新画面大小,保证视频画面与View的变化一致。 - 播放控制
您可以自行创建播放器的播放控制按钮,在按钮事件里面实现播放器控制接口。基本控制功能有播放、停止、暂停、拖动(Seek),其中Seek功能仅对点播有效,直播使用暂停功能时会使画面停留在当前画面,使用恢复后会开始播放当前画面。示例如下:
// 开始播放。 aliyunVodPlayer.start(); //暂停播放 aliyunVodPlayer.pause(); //停止播放 aliyunVodPlayer.stop(); // 跳转到。不精准。 aliyunVodPlayer.seekTo(long position); // 重置 aliyunVodPlayer.reset(); //释放。释放后播放器将不可再被使用。 aliyunVodPlayer.release();
- 切换多码率
播放器SDK支持HLS多码率地址播放。在
prepare
成功之后,通过getMediaInfo
可以获取到各个码流的信息,即TrackInfo
。示例如下:List<TrackInfo> trackInfos = aliyunVodPlayer.getMediaInfo().getTrackInfos();
在播放过程中,可以通过调用播放器的selectTrack方法切换播放的码流。示例如下:int index = trackInfo.getIndex(); aliyunVodPlayer.selectTrack(index);
切换的结果会在OnTrackChangedListener
监听之后会回调(在调用selectTrack
之前设置)。示例如下:aliyunVodPlayer.setOnTrackChangedListener(new IPlayer.OnTrackChangedListener() { @Override public void onChangedSuccess(TrackInfo trackInfo) { //切换成功 } @Override public void onChangedFail(TrackInfo trackInfo, ErrorInfo errorInfo) { //切换失败。失败原因通过errorInfo.getMsg()获取 } });
- 自动播放
播放器SDK支持自动播放视频的设置。在
prepare
之前调用setAutoPlay
即可设置。示例如下:aliyunVodPlayer.setAutoPlay(true);
设置自动播放之后,prepare成功之后,将会自动播放视频。示例如下:-(void)onPlayerEvent:(AliPlayer*)player eventType:(AVPEventType)eventType { switch (eventType) { case AVPEventPrepareDone: { break; case AVPEventAutoPlayStart: break; } }
注意 自动播放的时候将不会回调onPrepared
回调,而会回调onInfo
回调。 - 循环播放
播放器SDK提供了循环播放视频的功能。调用
setLoop
开启循环播放, 播放完成后,将会自动从头开始播放视频。示例如下:aliyunVodPlayer.setLoop(true);
同时循环开始的回调将会使用onInfo
中通知。示例如下:aliyunVodPlayer.setOnInfoListener(new IPlayer.OnInfoListener() { @Override public void onInfo(InfoBean infoBean) { if (infoBean.getCode() == InfoCode.LoopingStart){ //循环播放开始事件。 } } });
- 画面旋转、填充、镜像操作
播放器SDK提供过了多种设置,可以对画面进行精确的控制。包括设置画面旋转模式,设置画面缩放模式,设置镜像模式。示例如下:
//设置画面的镜像模式:水平镜像,垂直镜像,无镜像。 aliyunVodPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_NONE); //设置画面旋转模式:旋转0度,90度,180度,270度 aliyunVodPlayer.setRotateMode(RotateMode.ROTATE_0); //设置画面缩放模式:宽高比填充,宽高比适应,拉伸填充 aliyunVodPlayer.setScaleMode(ScaleMode.SCALE_ASPECT_FIT);
画面的旋转模式包括:
值 说明 ROTATE_0 顺时针旋转0度 ROTATE_90 顺时针旋转90度 ROTATE_180 顺时针旋转180度 ROTATE_270 顺时针旋转270度 画面的缩放模式包括:
值 说明 SCALE_ASPECT_FIT 宽高比适应(将按照视频宽高比等比缩小到view内部,不会有画面变形) SCALE_ASPECT_FILL 宽高比填充(将按照视频宽高比等比放大,充满view,不会有画面变形) SCALE_TO_FILL 拉伸填充(如果视频宽高比例与view比例不一致,会导致画面变形) 镜像模式包括:
值 说明 MIRROR_MODE_NONE 无镜像 MIRROR_MODE_HORIZONTAL 水平镜像 MIRROR_MODE_VERTICAL 垂直镜像 - 静音、音量控制
播放器SDK 提供了对视频的音量控制功能。调用
setMute
设置播放器静音,调用setVolume
控制音量大小,范围是0~1。示例如下://设置播放器静音 aliyunVodPlayer.setMute(true); //设置播放器音量,范围0~1. aliyunVodPlayer.setVolume(1f);
- 倍数播放
播放器SDK 提供了倍数播放视频的功能,通过设置
setSpeed
方法, 能够以0.5倍~2倍数去播放视频。同时保持变声不变调。示例如下://设置倍速播放:支持0.5~2倍速的播放 aliyunVodPlayer.setSpeed(1.0f);
- 截图功能
播放器SDK提供了对当前视频截图的功能
snapshot
。截取的是原始的数据,并转为bitmap
返回。回调接口为OnSnapShotListener
。示例如下://设置截图回调 aliyunVodPlayer.setOnSnapShotListener(new OnSnapShotListener(){ @Override public void onSnapShot(Bitmap bm, int with, int height){ //获取到的bitmap。以及图片的宽高。 } }); //截取当前播放的画面 aliyunVodPlayer.snapshot();
- 边播边缓存
播放器SDK提供了边播边缓存的功能,能够让用户重复播放视频时,达到省流量的目的。只需在
prepare
之前给播放器配置CacheConfig
即可实现此功能。示例如下:CacheConfig cacheConfig = new CacheConfig(); //开启缓存功能 cacheConfig.mEnable = true; //能够缓存的单个文件最大时长。超过此长度则不缓存 cacheConfig.mMaxDurationS =100; //缓存目录的位置 cacheConfig.mDir = "缓存的文件目录"; //缓存目录的最大大小。超过此大小,将会删除最旧的缓存文件 cacheConfig.mMaxSizeMB = 200; //设置缓存配置给到播放器 mAliyunVodPlayer.setCacheConfig(cacheConfig);
缓存成功之后,以下情况将会利用缓存文件(必须已经设置了setCacheConfig
)- 如果设置了循环播放,即
setLoop(true)
,那么第二次播放的时候,将会自动播放缓存的文件。 - 缓存成功后,重新创建播放器,播放同样的资源,也会自动使用缓存文件。
说明 vid的缓存文件是通过vid等信息定位的,所以对于vid的缓存文件,将需要网络请求信息之后才能确定使用哪个缓存文件。
播放器提供了获取缓存文件路径的接口:API接口 描述 参数 返回值 public String getCacheFilePath(String URL) 根据url获取缓存的文件名。必须先调用setCacheConfig才能获取到。 URL 最终缓存的文件绝对路径。 public String getCacheFilePath(String vid, String format, String definition, int previewTime) 根据vid获取缓存的文件名。必须先调用setCacheConfig才能获取到。 - vid:视频ID
- format:视频格式
- definition:视频清晰度
- previewTime:试看时长
最终缓存的文件绝对路径。 边播边缓存并不是所有的视频都会缓存,有些情况是不会缓存的。示例如下:- 对于直接播放URL的方式,即
UrlSource
。如果是HLS(即m3u8)地址,将不会缓存。如果是其他支持的格式,则根据缓存配置进行缓存。 - 对于VID的方式播放,将会根据缓存配置进行缓存。
- 播放器读取完全部的数据则视为缓存成功。如果在此之前,调用
stop
,或者出错onError
,则缓存将会失败。 - cache内的seek的操作不会影响缓存结果。cache外的seek会导致缓存失败。
- 如果视频源是加密的,此时如果加密文件与app信息不一致,将会缓存失败。
- cache的结果回调,会通过
onInfo
回调。
-(void)onPlayerEvent:(AliPlayer*)player eventWithString:(AVPEventWithString)eventWithString description:(NSString *)description { if (eventWithString == EVENT_PLAYER_CACHE_SUCCESS) { //缓存成功事件。 }else if (eventWithString == EVENT_PLAYER_CACHE_ERROR) { //缓存失败事件。 } }
- 如果设置了循环播放,即
- 试看功能
当设置试看的时长,通过播放器SDK播放视频时,服务端将不会返回完整的视频内容,而是返回试看时间段的内容。
播放器SDK 通过配合点播服务配置,可以实现试看功能,支持VidSts和VidAuth两种方式。如何配置和使用试看功能参考点播试看。配置试看功能之后,通过SDK的VidPlayerConfigGen.setPreviewTime()
方法设置播放器的试看时长。以VidSts为例,示例如下:VidSts vidSts = new VidSts; .... VidPlayerConfigGen configGen = new VidPlayerConfigGen(); configGen.setPreviewTime(20);//20秒试看 vidSts.setPlayConfig(configGen);//设置给播放源 ...
说明- VidPlayerConfigGen支持设置服务端支持的请求参数。请参见请求参数说明。
- FLV和MP3暂时不支持试看。
- 硬解开关
播放器SDK 提供了264,265的硬解码能力,同时提供了
enableHardwareDecoder
提供开关。默认开,并且在硬解初始化失败时,自动切换为软解,保证视频的正常播放。示例如下://开启硬解。默认开启 mAliyunVodPlayer.enableHardwareDecoder(true);
如果从硬解自动切换为软解,将会通过onInfo
回调,示例如下:mApsaraPlayerActivity.setOnInfoListener(new IPlayer.OnInfoListener() { @Override public void onInfo(InfoBean infoBean) { if (infoBean.getCode() == InfoCode.SwitchToSoftwareVideoDecoder) { //切换到软解 } } });
- 设置黑名单
播放器SDK提供了硬解的黑名单机制。对于明确不能使用硬解播放的机器,可以直接使用软解,避免了无效的操作。示例如下:
DeviceInfo deviceInfo = new DeviceInfo(); deviceInfo.model="Lenovo K320t"; AliPlayerFactory.addBlackDevice(BlackType.HW_Decode_H264 ,deviceInfo );
退出app之后,黑名单自动失效。
- 设置Referer
播放器SDK提供了
PlayerConfig
用来设置请求referer。配合控制台的黑白名单referer,可以控制访问权限。播放器SDK的设置示例如下://先获取配置 PlayerConfig config = mAliyunVodPlayer.getConfig(); //设置referer config.mReferrer = referrer; ....//其他设置 //设置配置给播放器 mAliyunVodPlayer.setConfig(config);
- 设置UserAgent
播放器SDK提供了
PlayerConfig
用来设置请求UA。设置之后,播放器请求的过程中将会带上UA信息。播放器SDK的设置示例如下://先获取配置 PlayerConfig config = mAliyunVodPlayer.getConfig(); //设置UA config.mUserAgent = "需要设置的UserAgent"; ....//其他设置 //设置配置给播放器 mAliyunVodPlayer.setConfig(config);
- 配置网络重试时间和次数
通过
PlayerConfig
,用户可以设置播放器SDK的网络超时的时间和重试次数。播放器SDK的设置,示例如下://先获取配置 PlayerConfig config = mAliyunVodPlayer.getConfig(); //设置网络超时时间,单位ms config.mNetworkTimeout = 5000; //设置超时重试次数。每次重试间隔为networkTimeout。networkRetryCount=0则表示不重试,重试策略app决定,默认值为2 config.mNetworkRetryCount=2; ....//其他设置 //设置配置给播放器 mAliyunVodPlayer.setConfig(config);
说明- 如果设置了NetworkRetryCount:如此时发生网络问题,导致出现loading后,那么将会重试NetworkRetryCount次,每次的间隔时间为mNetworkTimeout。
- 如果重试多次之后,还是loading的状态,那么就会回调
onError
事件,此时,ErrorInfo.getCode() = ErrorCode.ERROR_LOADING_TIMEOUT。 - 如果NetworkRetryCount设置为0,当网络重试超时的时候,播放器就会回调
onInfo
事件,事件的InfoBean.getCode() = InfoCode.NetworkRetry。 此时,可以调用播放器的reload
方法进行重新加载网络,或者进行其他的处理。这块的逻辑可以由App自己来处理。
- 配置缓存和延迟控制
播放器SDK通过
PlayerConfig
提供了设置缓存和延迟的控制接口。示例如下://先获取配置 PlayerConfig config = mAliyunVodPlayer.getConfig(); //最大延迟。注意:直播有效。当延时比较大时,播放器sdk内部会追帧等,保证播放器的延时在这个范围内。 config.mMaxDelayTime = 5000; // 最大缓冲区时长。单位ms。播放器每次最多加载这么长时间的缓冲数据。 config.mMaxBufferDuration = 50000; //高缓冲时长。单位ms。当网络不好导致加载数据时,如果加载的缓冲时长到达这个值,结束加载状态。 config.mHighBufferDuration = 3000; // 起播缓冲区时长。单位ms。这个时间设置越短,起播越快。也可能会导致播放之后很快就会进入加载状态。 config.mStartBufferDuration = 500; ....//其他设置 //设置配置给播放器 mAliyunVodPlayer.setConfig(config);
注意 三个缓冲区时长的大小关系必须为:mStartBufferDuration<=mHighBufferDuration<=mMaxBufferDuration。 - 支持HTTP Header设置
播放器通过
PlayerConfig
参数,可以给播放器中的请求加上http的header参数。示例如下://先获取配置 PlayerConfig config = mAliyunVodPlayer.getConfig(); //定义header String[] headers = new String[1]; headers[0]="Host:xxx.com";//比如需要设置Host到header中。 //设置header config.setCustomHeaders(headers); ....//其他设置 //设置配置给播放器 mAliyunVodPlayer.setConfig(config);
列表播放功能
当前短视频列表播放比较流行。阿里播放器提供了完整的列表播放功能,内部包含预加载机制,大幅提高了视频的起播速度。
- 创建播放器
创建播放器通过AliPlayerFactory类创建播放器。可以创建两种播放
- AliPlayer
- AliListPlayer
AliListPlayer
比AliPlayer
多了列表播放的功能,其余功能是一致的。列表播放请使用AliListPlayer
创建。示例如下:AliListPlayer aliyunListPlayer; ..... aliyunListPlayer = AliPlayerFactory.createAliListPlayer(getApplicationContext());
- 设置预加载个数
合理设置预加载个数,能够有效的提高起播的速度。示例如下:
//设置预加载个数。总共加载的个数为: 1 + count*2。 aliyunListPlayer.setPreloadCount(int count);
- 添加/移除多个播放源
列表播放支持多种播放源:VidSts和url。url为直接的url地址,vid为点播视频id。示例如下:
//添加vid源 aliyunListPlayer.addVid(String videoId, String uid); //添加URL源 aliyunListPlayer.addUrl(String url, String uid); //移除某个源 aliyunListPlayer.removeSource(String uid);
说明- 不支持VidAuth和VidMps的方式。
- uid是视频的唯一标志。用于区分视频是否一样。如果uid一样,则认为是一样的。如果播放出现串流的情况,请注意查看是不是在不同的界面设置了同一个uid。uid没有格式限制,任意字符串都行。
- 播放视频源
添加了一个或多个播放源之后,调用
moveTo
便可以自动播放某个源。示例如下://url时使用此接口 aliyunVodPlayer.moveTo(String uid); //vid的时候使用此接口,需要传递stsInfo,保证不会失效 aliyunVodPlayer.moveTo(String uid, StsInfo info);
- 播放上一个、下一个视频
播放器提供了
moveToPrev
,moveToNext
接口用于播放上一个,下一个视频。示例如下://移动到下一个视频。 注意:只能用于url的源。这个方法不适用于vid的播放。 aliyunVodPlayer.moveToNext(); //移动到上一个视频。注意:只能用于url的源。这个方法不适用于vid的播放。 aliyunVodPlayer.moveToPrev(); //移动到下一个视频。注意:只能用于vid的播放。 aliyunVodPlayer.moveToNext(StsInfo info); // 移动到上一个视频。注意:只能用于vid的播放。 aliyunVodPlayer.moveToPrev(StsInfo info);
视频下载功能
阿里云SDK提供了点播服务视频的下载功能,能够通过VidSts和VidAuth下载点播服务上的视频。同时,下载的方式提供了安全下载和普通下载的模式(在控制台设置)。
- 普通下载
下载后的视频数据未经过阿里云加密,用户可以用第三方播放器播放。
- 安全下载
下载后的视频数据经过阿里云加密。第三方播放器无法播放。仅支持使用阿里云的播放器进行播放。
- 创建并设置下载器
创建下载器,通过
AliDownloaderFactory
创建。示例如下:AliMediaDownloader mAliDownloader = null; ...... //创建下载器 mAliDownloader = AliDownloaderFactory.create(getApplicationContext()); //配置下载保存的路径 mAliDownloader.setSaveDir("保存的文件夹地址");
下载SDK支持私有加密的下载。为了保证安全性,需要配置一个加密校验文件到SDK。(建议在Application中配置一次即可)。示例如下:PrivateService.initService(getApplicationContext(), "encryptedApp.dat所在的文件路径");
注意 如果是安全下载,并且加密校验文件与APP信息不一致,会导致下载失败。 - 设置监听事件
下载器提供了多个事件监听。示例如下:
mAliDownloader.setOnPreparedListener(new AliMediaDownloader.OnPreparedListener() { @Override public void onPrepared(MediaInfo mediaInfo) { //准备下载项成功 } }); mAliDownloader.setOnProgressListener(new AliMediaDownloader.OnProgressListener() { @Override public void onDownloadingProgress(int percent) { //下载进度百分比 } @Override public void onProcessingProgress(int percent) { //处理进度百分比 } }); mAliDownloader.setOnErrorListener(new AliMediaDownloader.OnErrorListener() { @Override public void onError(ErrorInfo errorInfo) { //下载出错 } }); mAliDownloader.setOnCompletionListener(new AliMediaDownloader.OnCompletionListener() { @Override public void onCompletion() { //下载成功 } });
- 准备下载源
通过
preapre
方法准备下载源。下载源支持VidSts和VidAuth两种。以VidSts举例,示例如下://创建VidSts VidSts aliyunVidSts = new VidSts(); aliyunVidSts.setVid(视频vid); aliyunVidSts.setAccessKeyId(临时akId); aliyunVidSts.setAccessKeySecret(临时akSecret); aliyunVidSts.setSecurityToken(安全token); aliyunVidSts.setRegion(接入区域); //准备下载源 mAliDownloader.prepare(aliyunVidSts)
- 准备成功后选择下载项
准备成功后,会回调
OnPreparedListener
方法。选择某个Track进行下载,示例如下:public void onPrepared(MediaInfo mediaInfo) { //准备下载项成功 List<TrackInfo> trackInfos = mediaInfo.getTrackInfos(); //比如:下载第一个TrackInfo mAliDownloader.selectItem(trackInfos.get(0).getIndex()); }
- 更新下载源并开始下载
为了防止VidSts和VidAuth过期,建议更新下载源的信息后开始下载。示例如下:
//更新下载源 mAliDownloader.updateSource(mVidSts); //开始下载 mAliDownloader.start();
- 下载成功或失败后,释放下载器
下载成功后,调用
release
释放下载器。在onCompletion
或者onError
回调中。示例如下:mAliDownloader.stop(); mAliDownloader.release();
- 删除下载的文件
下载过程中,或者下载完成后,可以删除下载的文件。示例如下:
//通过对象删除文件 mAliDownloader.deleteFile(); //通过静态方法删除 AliDownloaderFactory.deleteFile("下载文件夹路径",vid, format,index);
加密直播播放功能
阿里云播放器支持加密直播的播放。播放器的创建与使用方式,具体操作请参见播放功能。
- 设置播放源
需传递AVPLiveStsSource作为播放源。示例如下:
//创建LiveSts LiveSts liveSts = new LiveSts(); liveSts.setUrl("加密直播url"); liveSts.setAccessKeyId("临时akId"); liveSts.setAccessKeySecret("临时akSecret"); liveSts.setSecurityToken("安全token"); liveSts.setDomain("url播流域名"); liveSts.setApp("播流应用名"); liveSts.setStream("播流流名"); //设置播放源 aliyunVodPlayer.setDataSource(liveSts); ...... //准备播放 aliyunVodPlayer.prepare();
- 监听STS是否无效
加密直播播放过程中可能会有换加密Key的过程,换Key时则会通过STS去请求到最新的Key。开发者需要监听STS是否有效。如果无效则会影响加密直播流的播放。监听设置示例如下:
mAliyunVodPlayer.setOnVerifyStsCallback(new IPlayer.OnVerifyStsCallback() { @Override public IPlayer.StsStatus onVerifySts(StsInfo info) { if(info 可以使用){ return IPlayer.StsStatus.Valid; } if(可以获取有效的STS){ 获取STS();//异步同步均可。 return IPlayer.StsStatus.Pending; } //如果info无效,且无法获取到最新的STS,那么建议停止播放。防止出现花屏。 mAliyunVodPlayer.stop(); return IPlayer.StsStatus.Invalid; } });
获取STS成功之后,需要调用updateStsInfo
方法去更新STS。如果获取失败,则建议停止播放。mAliyunVodPlayer.updateStsInfo(stsInfo);
说明 如果不调用,超时之后播放器会继续使用之前的STS去获取Key。如果STS失效,则可能会出现花屏或者播放失败。
在文档使用中是否遇到以下问题
更多建议
匿名提交