全部产品
云市场

功能使用

更新时间:2019-09-06 18:04:10

阿里云SDK提供了以下几大功能:

  • 单个视频播放功能
  • 视频列表播放功能
  • 下载视频功能
  • 缓存功能

功能具体介绍如下。

一. 播放功能

播放功能的基本流程如下:

创建播放器->设置事件监听->创建播放源->准备播放器->准备成功后开始播放->播放控制->释放播放器。

1.创建播放器

创建播放器通过AliPlayerFactory类创建播放器。可以创建两种播放器:AliPlayerAliListPlayer。单个播放功能使用AliPlayer。创建方法如下:

  1. AliPlayer aliyunVodPlayer;
  2. .....
  3. aliyunVodPlayer = AliPlayerFactory.createAliPlayer(getApplicationContext());

如果播放的视频是通过播放器SDK安全下载后的本地文件,那么还需要设置一个加密校验信息(建议在Application中配置一次即可):

  1. PrivateService.initService(getApplicationContext(), "encryptedApp.dat的本地路径");

创建加密文件的方式见这里

如果没有设置正确的校验文件,播放安全下载后的文件会报错:ERROR_DEMUXER_OPENSTREAM。

2.设置播放器监听事件

播放器提供了多种监听事件,比如:onPrepared,onCompletion等事件。使用方法如下:

  1. aliyunVodPlayer.setOnCompletionListener(new IPlayer.OnCompletionListener() {
  2. @Override
  3. public void onCompletion() {
  4. //播放完成事件
  5. }
  6. });
  7. aliyunVodPlayer.setOnErrorListener(new IPlayer.OnErrorListener() {
  8. @Override
  9. public void onError(ErrorInfo errorInfo) {
  10. //出错事件
  11. }
  12. });
  13. aliyunVodPlayer.setOnPreparedListener(new IPlayer.OnPreparedListener() {
  14. @Override
  15. public void onPrepared() {
  16. //准备成功事件
  17. }
  18. });
  19. aliyunVodPlayer.setOnVideoSizeChangedListener(new IPlayer.OnVideoSizeChangedListener() {
  20. @Override
  21. public void onVideoSizeChanged(int width, int height) {
  22. //视频分辨率变化回调
  23. }
  24. });
  25. aliyunVodPlayer.setOnRenderingStartListener(new IPlayer.OnRenderingStartListener() {
  26. @Override
  27. public void onRenderingStart() {
  28. //首帧渲染显示事件
  29. }
  30. });
  31. aliyunVodPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
  32. @Override
  33. public void onInfo(int type, long extra) {
  34. //其他信息的事件,type包括了:循环播放开始,缓冲位置,当前播放位置,自动播放开始等
  35. }
  36. });
  37. aliyunVodPlayer.setOnLoadingStatusListener(new IPlayer.OnLoadingStatusListener() {
  38. @Override
  39. public void onLoadingBegin() {
  40. //缓冲开始。
  41. }
  42. @Override
  43. public void onLoadingProgress(int percent, float kbps) {
  44. //缓冲进度
  45. }
  46. @Override
  47. public void onLoadingEnd() {
  48. //缓冲结束
  49. }
  50. });
  51. aliyunVodPlayer.setOnSeekCompleteListener(new IPlayer.OnSeekCompleteListener() {
  52. @Override
  53. public void onSeekComplete() {
  54. //拖动结束
  55. }
  56. });
  57. aliyunVodPlayer.setOnSubtitleDisplayListener(new IPlayer.OnSubtitleDisplayListener() {
  58. @Override
  59. public void onSubtitleShow(long id, String data) {
  60. //显示字幕
  61. }
  62. @Override
  63. public void onSubtitleHide(long id) {
  64. //隐藏字幕
  65. }
  66. });
  67. aliyunVodPlayer.setOnTrackChangedListener(new IPlayer.OnTrackChangedListener() {
  68. @Override
  69. public void onChangedSuccess(TrackInfo trackInfo) {
  70. //切换音视频流或者清晰度成功
  71. }
  72. @Override
  73. public void onChangedFail(TrackInfo trackInfo, ErrorInfo errorInfo) {
  74. //切换音视频流或者清晰度失败
  75. }
  76. });
  77. aliyunVodPlayer.setOnStateChangedListener(new IPlayer.OnStateChangedListener() {
  78. @Override
  79. public void onStateChanged(int newState) {
  80. //播放器状态改变事件
  81. }
  82. });
  83. aliyunVodPlayer.setOnSnapShotListener(new IPlayer.OnSnapShotListener() {
  84. @Override
  85. public void onSnapShot(Bitmap bm, int with, int height) {
  86. //截图事件
  87. }
  88. });

具体回调参数的详细说明,参看Android接口文档

3. 创建DataSource,准备播放

播放器支持4种播放源:VidSts,VidAuth,VidMps,UrlSource。其中UrlSource是直接的url播放,其余的三种是通过vid进行播放:VidSts,VidAuth点播用户使用;VidMps仅限MPS用户使用。

以VidSts举例,使用方式如下:

  1. //创建VidSts
  2. VidSts aliyunVidSts = new VidSts();
  3. aliyunVidSts.setVid(视频vid);
  4. aliyunVidSts.setAccessKeyId(临时akId);
  5. aliyunVidSts.setAccessKeySecret(临时akSecret);
  6. aliyunVidSts.setSecurityToken(安全token);
  7. aliyunVidSts.setRegion(接入区域);
  8. //设置播放源
  9. aliyunVodPlayer.setDataSource(aliyunVidSts);
  10. ......
  11. //准备播放
  12. aliyunVodPlayer.prepare();

MPS视频播放的流程与概念,参考这里
通过播放凭证VidAuth播放的流程,参考这里
接入区域Region的设置,参考 点播中心和访问域名

4. 设置显示的view

如果源有画面,那么需要设置显示的view到播放器中,用来显示画面。支持SurfaceView和TextureView。
以SurfaceView举例:

  1. surfaceView = (SurfaceView) findViewById(R.id.playview);
  2. surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
  3. @Override
  4. public void surfaceCreated(SurfaceHolder holder) {
  5. aliyunVodPlayer.setDisplay(holder);
  6. }
  7. @Override
  8. public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
  9. aliyunVodPlayer.redraw();
  10. }
  11. @Override
  12. public void surfaceDestroyed(SurfaceHolder holder) {
  13. aliyunVodPlayer.setDisplay(null);
  14. }
  15. });

在surfaceChanged方法中需要调用播放器的redraw方法,是用来刷新视频画面的。如果view的大小变化了,调用此方法将会更新画面大小,保证视频画面与View的变化一致。

5. 播放控制

户自行创建播放器的播放控制按钮,在按钮事件里面实现播放器控制接口。基本控制功能有播放、停止、暂停、拖动(seek),其中Seek功能仅对点播有效,直播使用暂停功能时会使画面停留在当前画面,使用恢复后会开始播放当前画面。使用示例如下:

  1. // 开始播放。
  2. aliyunVodPlayer.start();
  3. //暂停播放
  4. aliyunVodPlayer.pause();
  5. //停止播放
  6. aliyunVodPlayer.stop();
  7. // 跳转到。不精准。
  8. aliyunVodPlayer.seekTo(long position);
  9. // 重置
  10. aliyunVodPlayer.reset();
  11. //释放。释放后播放器将不可再被使用。
  12. aliyunVodPlayer.release();

6.切换多码率

播放器SDK支持HLS多码率地址播放。在prepare成功之后,通过getMediaInfo可以获取到各个码流的信息,即TrackInfo

  1. List<TrackInfo> trackInfos = aliyunVodPlayer.getMediaInfo().getTrackInfos();

在播放过程中,可以通过调用播放器的selectTrack方法切换播放的码流。

  1. int index = trackInfo.getIndex();
  2. aliyunVodPlayer.selectTrack(index);

切换的结果会设置OnTrackChangedListener监听之后会回调(在调用selectTrack之前设置):

  1. aliyunVodPlayer.setOnTrackChangedListener(new IPlayer.OnTrackChangedListener() {
  2. @Override
  3. public void onChangedSuccess(TrackInfo trackInfo) {
  4. //切换成功
  5. }
  6. @Override
  7. public void onChangedFail(TrackInfo trackInfo, ErrorInfo errorInfo) {
  8. //切换失败。失败原因通过errorInfo.getMsg()获取
  9. }
  10. });

7.自动播放

播放器SDK支持自动播放视频的设置。在prepare之前调用setAutoPlay即可设置。

  1. aliyunVodPlayer.setAutoPlay(true);

设置自动播放之后,prepare成功之后,将会自动播放视频。但是注意:自动播放的时候将不会回调onPrepared回调,而会回调onInfo回调。

  1. aliyunVodPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
  2. @Override
  3. public void onInfo(InfoBean infoBean) {
  4. if (infoBean.getCode() == InfoCode.AutoPlayStart){
  5. //自动播放开始事件。
  6. }
  7. }
  8. });

8.循环播放

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

  1. aliyunVodPlayer.setLoop(true);

同时循环开始的回调将会在onInfo中通知。

  1. aliyunVodPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
  2. @Override
  3. public void onInfo(InfoBean infoBean) {
  4. if (infoBean.getCode() == InfoCode.LoopingStart){
  5. //循环播放开始事件。
  6. }
  7. }
  8. });

9.画面旋转、填充、镜像操作

播放器SDK提供过了多种设置,可以对画面进行精确的控制。包括设置画面旋转模式,设置画面缩放模式,设置镜像模式。

  1. //设置画面的镜像模式:水平镜像,垂直镜像,无镜像。
  2. aliyunVodPlayer.setMirrorMode(MirrorMode.MIRROR_MODE_NONE);
  3. //设置画面旋转模式:旋转0度,90度,180度,270度
  4. aliyunVodPlayer.setRotateMode(RotateMode.ROTATE_0);
  5. //设置画面缩放模式:宽高比填充,宽高比适应,拉伸填充
  6. 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 垂直镜像

10.静音、音量控制

播放器SDK 提供了对视频的音量控制功能。调用setMute设置播放器静音,调用setVolume控制音量大小,范围是0~1。

  1. //设置播放器静音
  2. aliyunVodPlayer.setMute(true);
  3. //设置播放器音量,范围0~1.
  4. aliyunVodPlayer.setVolume(1f);

11.倍数播放

播放器SDK 提供了倍数播放视频的功能,通过调用setSpeed方法, 能够以0.5倍~2倍数去播放视频。同时保持变声不变调。

  1. //设置倍速播放:支持0.5~2倍速的播放
  2. aliyunVodPlayer.setSpeed(1.0f);

12.截图功能

播放器SDK提供了对当前视频截图的功能snapshot。截取的是原始的数据,并转为bitmap返回。回调接口为OnSnapShotListener。 注意:截图是不包含界面的。

  1. //设置截图回调
  2. aliyunVodPlayer.setOnSnapShotListener(new OnSnapShotListener(){
  3. @Override
  4. public void onSnapShot(Bitmap bm, int with, int height){
  5. //获取到的bitmap。以及图片的宽高。
  6. }
  7. });
  8. //截取当前播放的画面
  9. aliyunVodPlayer.snapshot();

13. 边播边缓存

播放器SDK提供了边播边缓存的功能,能够让用户重复播放视频时,达到省流量的目的。只需在prepare之前给播放器配置CacheConfig即可实现此功能。

如果播放了加密视频,还需要一个加密校验文件的配置。参看【14. 配置加密校验文件】

  1. CacheConfig cacheConfig = new CacheConfig();
  2. //开启缓存功能
  3. cacheConfig.mEnable = true;
  4. //能够缓存的单个文件最大时长。超过此长度则不缓存
  5. cacheConfig.mMaxDurationS =100;
  6. //缓存目录的位置
  7. cacheConfig.mDir = "缓存的文件目录";
  8. //缓存目录的最大大小。超过此大小,将会删除最旧的缓存文件
  9. cacheConfig.mMaxSizeMB = 200;
  10. //设置缓存配置给到播放器
  11. mAliyunVodPlayer.setCacheConfig(cacheConfig);

缓存成功之后,以下情况将会利用缓存文件(必须已经设置了setCacheConfig

  1. 如果设置了循环播放,即setLoop(true),那么第二次播放的时候,将会自动播放缓存的文件。
  2. 缓存成功后,重新创建播放器,播放同样的资源,也会自动使用缓存文件。

注意:vid的缓存文件是通过vid等信息定位的,所以,对于VID的缓存文件,将需要网络请求信息之后才能确定使用哪个缓存文件。

同时,播放器提供了获取缓存文件路径的接口:

  1. public String getCacheFilePath(String URL)
  2. 功能:根据url获取缓存的文件名。必须先调用setCacheConfig才能获取到。
  3. 参数:URL URL
  4. 返回值:最终缓存的文件绝对路径。
  5. public String getCacheFilePath(String vid, String format, String definition, int previewTime)
  6. 功能:根据vid 获取缓存的文件名。必须先调用setCacheConfig才能获取到。
  7. 参数:vid 视频idformat 视频格式。definition 视频清晰度。previewTime 试看时长。
  8. 返回值:最终缓存的文件绝对路径。

边播边缓存也不是所有的视频都会缓存,有些情况是不会缓存的。这里详细介绍一下:
1.对于直接播放URL的方式,即UrlSource。如果是HLS(即m3u8)地址,将不会缓存。如果是其他支持的格式,则根据缓存配置进行缓存。
2.对于VID的方式播放,将会根据缓存配置进行缓存。
3.播放器读取完全部的数据则视为缓存成功。如果在此之前,调用stop,或者出错onError,则缓存将会失败。
4.cache内的seek的操作不会影响缓存结果。cache外的seek会导致缓存失败。
5.如果视频源是加密的,此时如果加密文件与app信息不一致,将会缓存失败。
6.cache的结果回调,会通过onInfo回调。

  1. aliyunVodPlayer.setOnInfoListener(new IPlayer.OnInfoListener() {
  2. @Override
  3. public void onInfo(InfoBean infoBean) {
  4. if (infoBean.getCode() == InfoCode.CacheSuccess){
  5. //缓存成功事件。
  6. }else if (infoBean.getCode() == InfoCode.CacheError){
  7. //缓存失败事件。失败原因通过infoBean.getExtraMsg()获取
  8. }
  9. }
  10. });

14. 试看功能

试看功能是指:当设置试看的时长,通过播放器SDK播放视频时,服务端将不会返回完整的视频内容,而是返回试看时间段的内容。
播放器SDK 通过配合点播服务配置,可以实现试看功能,支持VidSts和VidAuth两种方式。如何配置和使用试看功能参考 点播试看最佳实践 。配置试看功能之后,通过SDK 的VidPlayerConfigGen.setPreviewTime()方法设置播放器的试看时长。以VidSts为例:

  1. VidSts vidSts = new VidSts
  2. ....
  3. VidPlayerConfigGen configGen = new VidPlayerConfigGen();
  4. configGen.setPreviewTime(20);//20秒试看
  5. vidSts.setPlayConfig(configGen);//设置给播放源
  6. ...

VidPlayerConfigGen支持设置服务端支持的请求参数。点击查看 请求参数说明

注意:FLV和MP3暂时不支持试看。

15. 硬解开关

播放器SDK 提供了264,265的硬解码能力,同时提供了enableHardwareDecoder提供开关。默认开,并且在硬解初始化失败时,自动切换为软解,保证视频的正常播放。

  1. //开启硬解。默认开启
  2. mAliyunVodPlayer.enableHardwareDecoder(true);

如果从硬解自动切换为软解,将会通过onInfo回调:

  1. mApsaraPlayerActivity.setOnInfoListener(new IPlayer.OnInfoListener() {
  2. @Override
  3. public void onInfo(InfoBean infoBean) {
  4. if (infoBean.getCode() == InfoCode.SwitchToSoftwareVideoDecoder) {
  5. //切换到软解
  6. }
  7. }
  8. });

16. 设置黑名单

播放器SDK提供了硬解的黑名单机制。对于明确不能使用硬解播放的机器,可以直接使用软解,避免了无效的操作。

  1. DeviceInfo deviceInfo = new DeviceInfo();
  2. deviceInfo.model="Lenovo K320t";
  3. AliPlayerFactory.addBlackDevice(BlackType.HW_Decode_H264 ,deviceInfo );

退出app之后,黑名单自动失效。

17. 设置Referer

播放器SDK提供了PlayerConfig 用来设置请求referer。配合控制台的黑白名单referer,可以控制访问权限。播放器SDK的设置如下:

  1. //先获取配置
  2. PlayerConfig config = mAliyunVodPlayer.getConfig();
  3. //设置referer
  4. config.mReferrer = referrer;
  5. ....//其他设置
  6. //设置配置给播放器
  7. mAliyunVodPlayer.setConfig(config);

18. 设置UserAgent

播放器SDK提供了PlayerConfig 用来设置请求UA。设置之后,播放器请求的过程中将会带上UA信息。播放器SDK的设置如下:

  1. //先获取配置
  2. PlayerConfig config = mAliyunVodPlayer.getConfig();
  3. //设置UA
  4. config.mUserAgent = "需要设置的UserAgent";
  5. ....//其他设置
  6. //设置配置给播放器
  7. mAliyunVodPlayer.setConfig(config);

19. 配置网络重试时间和次数

通过PlayerConfig,用户可以设置播放器SDK的网络超时的时间和重试次数。播放器SDK的设置如下:

  1. //先获取配置
  2. PlayerConfig config = mAliyunVodPlayer.getConfig();
  3. //设置网络超时时间,单位ms
  4. config.mNetworkTimeout = 5000;
  5. //设置超时重试次数。每次重试间隔为networkTimeout。networkRetryCount=0则表示不重试,重试策略app决定,默认值为2
  6. config.mNetworkRetryCount=2;
  7. ....//其他设置
  8. //设置配置给播放器
  9. mAliyunVodPlayer.setConfig(config);
  1. 如果设置了NetworkRetryCount:如此时发生网络问题,导致出现loading后,那么将会重试NetworkRetryCount次,每次的间隔时间为mNetworkTimeout。 如果重试多次之后,还是loading的状态,那么就会回调onError事件,此时,ErrorInfo.getCode() = ErrorCode.ERROR_LOADING_TIMEOUT。
  2. 如果NetworkRetryCount设置为0,当网络重试超时的时候,播放器就会回调onInfo事件,事件的InfoBean.getCode() = InfoCode.NetworkRetry。 此时,可以调用播放器的reload方法进行重新加载网络,或者进行其他的处理。这块的逻辑可以由App自己来处理。

20. 配置缓存和延迟控制

对于播放器来说,缓存的控制非常重要。合理的配置,可以有效的加快起播速度,减少卡顿。播放器SDK通过PlayerConfig提供了设置缓存和延迟的控制接口。

  1. //先获取配置
  2. PlayerConfig config = mAliyunVodPlayer.getConfig();
  3. //最大延迟。注意:直播有效。当延时比较大时,播放器sdk内部会追帧等,保证播放器的延时在这个范围内。
  4. config.mMaxDelayTime = 5000;
  5. // 最大缓冲区时长。单位ms。播放器每次最多加载这么长时间的缓冲数据。
  6. config.mMaxBufferDuration = 50000;
  7. //高缓冲时长。单位ms。当网络不好导致加载数据时,如果加载的缓冲时长到达这个值,结束加载状态。
  8. config.mHighBufferDuration = 3000;
  9. // 起播缓冲区时长。单位ms。这个时间设置越短,起播越快。也可能会导致播放之后很快就会进入加载状态。
  10. config.mStartBufferDuration = 500;
  11. ....//其他设置
  12. //设置配置给播放器
  13. mAliyunVodPlayer.setConfig(config);

注意:三个缓冲区时长的大小关系必须为:mStartBufferDuration<=mHighBufferDuration<=mMaxBufferDuration。

21. 支持HTTP Header设置

播放器通过PlayerConfig参数,可以给播放器中的请求加上http的header参数。代码如下:

  1. //先获取配置
  2. PlayerConfig config = mAliyunVodPlayer.getConfig();
  3. //定义header
  4. String[] headers = new String[1];
  5. headers[0]="Host:xxx.com";//比如需要设置Host到header中。
  6. //设置header
  7. config.setCustomHeaders(headers);
  8. ....//其他设置
  9. //设置配置给播放器
  10. mAliyunVodPlayer.setConfig(config);

二. 列表播放功能

当前短视频列表播放比较流行。阿里播放器提供了完整的列表播放功能,内部包含预加载机制,大幅提高了视频的起播速度。列表播放的基本流程如下:

创建播放器->设置事件监听->添加多个播放源->播放某个播放源->播放控制->移动播放某个源->释放播放器。

播放的功能与接口与上节播放功能一致。多了一些列表控制功能。播放器的创建,监听,控制,释放等功能,参考上一节内容

1.创建播放器

创建播放器通过AliPlayerFactory类创建播放器。可以创建两种播放器:AliPlayerAliListPlayer
AliListPlayerAliPlayer多了列表播放的功能,其余功能是一致的。列表播放就使用AliListPlayer。创建方法如下:

  1. AliListPlayer aliyunListPlayer;
  2. .....
  3. aliyunListPlayer = AliPlayerFactory.createAliListPlayer(getApplicationContext());

2. 设置预加载个数

合理设置预加载个数,能够有效的提高起播的速度。

  1. //设置预加载个数。总共加载的个数为: 1 + count*2。
  2. aliyunListPlayer.setPreloadCount(int count);

3. 添加/移除 多个播放源

列表播放支持多种播放源:VidSts和url。url为直接的url地址,vid为点播视频id。

不支持VidAuth和VidMps的方式。

  1. //添加vid源
  2. aliyunListPlayer.addVid(String videoId, String uid);
  3. //添加URL源
  4. aliyunListPlayer.addUrl(String url, String uid);
  5. //移除某个源
  6. aliyunListPlayer.removeSource(String uid);

uid是视频的唯一标志。用于区分视频是否一样。如果uid一样,则认为是一样的。
如果播放出现串流的情况,请注意查看是不是在不同的界面设置了同一个uid。
uid没有格式限制,任意字符串都行。

4. 播放某个源

添加了一个或多个播放源之后,调用moveTo便可以自动播放某个源。接口如下:

  1. //url时使用此接口
  2. aliyunVodPlayer.moveTo(String uid);
  3. //vid的时候使用此接口,需要传递stsInfo,保证不会失效
  4. aliyunVodPlayer.moveTo(String uid, StsInfo info);

5. 播放上一个、下一个视频

播放器提供了moveToPrevmoveToNext接口用于自动播放上一个,下一个视频

  1. //移动到下一个视频。 注意:只能用于url的源。这个方法不适用于vid的播放。
  2. aliyunVodPlayer.moveToNext();
  3. //移动到上一个视频。注意:只能用于url的源。这个方法不适用于vid的播放。
  4. aliyunVodPlayer.moveToPrev();
  5. //移动到下一个视频。注意:只能用于vid的播放。
  6. aliyunVodPlayer.moveToNext(StsInfo info);
  7. // 移动到上一个视频。注意:只能用于vid的播放。
  8. aliyunVodPlayer.moveToPrev(StsInfo info);

三. 视频下载功能

阿里云SDK提供了点播服务视频的下载功能,能够通过VidSts和VidAuth下载点播服务上的视频。同时,下载的方式提供了安全下载普通下载的模式(在控制台设置)。
普通下载含义是:即使点播服务已经加密过了,下载后的视频数据也不是经过阿里云加密的。也就是说,用户可以用第三方播放器播放。
安全下载含义是:即使点播服务没有加密视频,下载后的视频数据也是经过阿里云加密的。也就是说,用户用第三方播放器是播放不了的。只能使用阿里云的播放器去播放

视频下载的基本流程如下:

创建并设置下载器->设置事件监听->准备下载源->准备成功后选择下载项->更新下载源并开始下载->下载成功/失败后,释放下载器。

1. 创建并设置下载器

创建下载器,通过AliDownloaderFactory 创建。代码如下:

  1. AliMediaDownloader mAliDownloader = null;
  2. ......
  3. //创建下载器
  4. mAliDownloader = AliDownloaderFactory.create(getApplicationContext());
  5. //配置下载保存的路径
  6. mAliDownloader.setSaveDir("保存的文件夹地址");

下载SDK支持私有加密的下载。为了保证安全性,需要配置一个加密校验文件到SDK。(建议在Application中配置一次即可)

  1. PrivateService.initService(getApplicationContext(), "encryptedApp.dat所在的文件路径");

如果是安全下载,并且加密校验文件与APP信心不一致,会导致下载失败。

2. 设置监听事件

下载器提供了多个事件监听。设置代码如下:

  1. mAliDownloader.setOnPreparedListener(new AliMediaDownloader.OnPreparedListener() {
  2. @Override
  3. public void onPrepared(MediaInfo mediaInfo) {
  4. //准备下载项成功
  5. }
  6. });
  7. mAliDownloader.setOnProgressListener(new AliMediaDownloader.OnProgressListener() {
  8. @Override
  9. public void onDownloadingProgress(int percent) {
  10. //下载进度百分比
  11. }
  12. @Override
  13. public void onProcessingProgress(int percent) {
  14. //处理进度百分比
  15. }
  16. });
  17. mAliDownloader.setOnErrorListener(new AliMediaDownloader.OnErrorListener() {
  18. @Override
  19. public void onError(ErrorInfo errorInfo) {
  20. //下载出错
  21. }
  22. });
  23. mAliDownloader.setOnCompletionListener(new AliMediaDownloader.OnCompletionListener() {
  24. @Override
  25. public void onCompletion() {
  26. //下载成功
  27. }
  28. });

3.准备下载源

通过preapre方法准备下载源。下载源支持VidSts和VidAuth两种。以VidSts举例:

  1. //创建VidSts
  2. VidSts aliyunVidSts = new VidSts();
  3. aliyunVidSts.setVid(视频vid);
  4. aliyunVidSts.setAccessKeyId(临时akId);
  5. aliyunVidSts.setAccessKeySecret(临时akSecret);
  6. aliyunVidSts.setSecurityToken(安全token);
  7. aliyunVidSts.setRegion(接入区域);
  8. //准备下载源
  9. mAliDownloader.prepare(aliyunVidSts)

4.准备成功后选择下载项

准备成功后,会回调OnPreparedListener方法。选择某个Track进行下载:

  1. public void onPrepared(MediaInfo mediaInfo) {
  2. //准备下载项成功
  3. List<TrackInfo> trackInfos = mediaInfo.getTrackInfos();
  4. //比如:下载第一个TrackInfo
  5. mAliDownloader.selectItem(trackInfos.get(0).getIndex());
  6. }

5.更新下载源并开始下载

经过第4步之后,就可以开始下载了(为了防止VidSts和VidAuth过期,最好更新一下下载源的信息):

  1. //更新下载源
  2. mAliDownloader.updateSource(mVidSts);
  3. //开始下载
  4. mAliDownloader.start();

6.下载成功/失败后,释放下载器

下载成功后,调用release释放下载器。在onCompletion或者onError回调中:

  1. mAliDownloader.stop();
  2. mAliDownloader.release();

7. 删除下载的文件

下载过程中,或者下载完成后,可以删除下载的文件:

  1. //通过对象删除文件
  2. mAliDownloader.deleteFile();
  3. //通过静态方法删除
  4. AliDownloaderFactory.deleteFile("下载文件夹路径",vid, format,index);