全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网
视频点播

SDK集成步骤

更新时间:2017-10-30 23:00:56

一、获取AuthInfo

通过PlayAuth方式去播放云视频,具体参数获取方法查看文档 获取播放凭证。建议使用此方式播放视频。

客户端开发也可以通过python脚本获取播放凭证进行调试,具体流程如下:

  • 安装python2.7+pip环境(Mac环境下自带,Windows环境自行安装)
  • 使用终端安装SDK,运行以下命令:
    1. pip install aliyun-python-sdk-core
    2. pip install aliyun-python-sdk-vod
  • 下载Python脚本,从阿里云控制台获取accessKeyId和accessKeySecret并替换脚本里面的字段内容,从点播控制台获取已经上传视频的videoID并替换脚本里面的字段内容。
  • 在python脚本所在目录下通过终端执行以下命令:
    1. python playAuth.py
  • 在终端中查看获取的PlayAuth和VideoId。
  • 在播放器SDK中使用获取的PlayAuth和VideoId进行播放,注意playAuth的有效期为100秒,过期后请重新获取。

二、引入SDK开发包

SDK开发包分为三个:

  • AlivcPlayer.aar:播放器核心包。此为基础包,必须添加。

  • AliyunVodPlayer.aar:纯播放器开发包。不含有界面,类似于原生的MediaPlayer。使用时依赖AlivcPlayer包。

  • AliyunVodPlayerView.aar:含有默认皮肤的播放器开发包,类似于VideoView。使用时依赖上面两个包。

如果不需要皮肤的播放器,可以不用集成AliyunVodPlayerView.aar包。

引入开发包分两步:

1. 在工程中,创建libs文件夹,将所需的aar开发包拷贝到文件中。

2.1.1

2. 在工程的bulid.gradle中,添加对aar开发的引用。

2.1.2

三、配置AndroidManifest.xml

1. 添加访问权限

  1. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  2. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  3. <uses-permission android:name="android.permission.INTERNET" />
  4. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  5. <uses-permission android:name="android.permission.WAKE_LOCK" />
  6. <uses-permission android:name="android.permission.READ_PHONE_STATE" />

注意:如果开发的targetSDK为6.0及以上版本,请注意权限的动态申请,SDK中不会做权限检验。

四、无皮肤SDK的使用

使用方式基本与原生MediaPlayer相同。

  1. private AliyunVodPlayer mAliyunVodPlayer;
  2. //创建播放器
  3. mAliyunVodPlayer = new AliyunVodPlayer(this);
  4. //设置播放器事件监听
  5. mAliyunVodPlayer.setOnPreparedListener(new IAliyunMediaPlayer.OnPreparedListener() {
  6. @Override
  7. public void onPrepared() {
  8. //准备成功之后可以调用start方法开始播放
  9. mAliyunVodPlayer.start();
  10. }
  11. });
  12. //设置播放的surface
  13. mAliyunVodPlayer.setDisplay(surfaceView.getHolder());
  14. //构建播放数据源
  15. AliyunPlayAuth.AliyunPlayAuthBuilder aliyunPlayAuthBuilder = new AliyunPlayAuth.AliyunPlayAuthBuilder();
  16. aliyunPlayAuthBuilder.setPlayAuth(“PlayAuth字符串”);
  17. aliyunPlayAuthBuilder.setVid(“视频的id”);
  18. //设置期望播放的清晰度。可以不设置,默认为原画清晰度
  19. aliyunPlayAuthBuilder.setQuality(IAliyunMediaPlayer.QualityValue.QUALITY_ORIGINAL);
  20. //设置数据源。prepare
  21. mAliyunVodPlayer.prepareAsync(aliyunPlayAuthBuilder.build());
  22. //设置surface的回调。此为必须的操作
  23. surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
  24. @Override
  25. public void surfaceCreated(SurfaceHolder holder) {
  26. mAliyunVodPlayer.setDisplay(holder);
  27. }
  28. @Override
  29. public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
  30. mAliyunVodPlayer.surfaceChanged();
  31. }
  32. @Override
  33. public void surfaceDestroyed(SurfaceHolder holder) {
  34. }
  35. });
  36. //准备播放源
  37. mAliyunVodPlayer.prepareAsync();

以上为简单的示例,均可在demo中找到。更多的播放器操作,参见 接口详细说明

五、有皮肤SDK的使用

使用方式与原生的VideoView类似。示例如下:

1. 在播放的布局文件中添加 AliyunVodPlayerView ;

  1. <com.aliyun.vodplayerview.widget.AliyunVodPlayerView
  2. android:id="@+id/video_view"
  3. android:layout_width="match_parent"
  4. android:layout_height="200dp" />

2. 在代码中添加创建播放器代码;

  1. private AliyunVodPlayerView mAliyunVodPlayerView;
  2. //找到播放器对象
  3. mAliyunVodPlayerView = (AliyunVodPlayerView) findViewById(R.id.video_view);
  4. //设置监听事件
  5. mAliyunVodPlayerView.setOnPreparedListener(new IAliyunMediaPlayer.OnPreparedListener() {
  6. @Override
  7. public void onPrepared() {
  8. }
  9. });
  10. //构建播放数据源
  11. AliyunPlayAuth.AliyunPlayAuthBuilder aliyunPlayAuthBuilder = new AliyunPlayAuth.AliyunPlayAuthBuilder();
  12. aliyunPlayAuthBuilder.setPlayAuth(“PlayAuth字符串”);
  13. aliyunPlayAuthBuilder.setVid(“视频的id”);
  14. //设置期望播放的清晰度。可以不设置,默认为原画清晰度
  15. aliyunPlayAuthBuilder.setQuality(IAliyunMediaPlayer.QualityValue.QUALITY_ORIGINAL);
  16. //设置数据源。prepare
  17. mAliyunVodPlayerView.prepareAsync(aliyunPlayAuthBuilder.build());

同时,在界面的生命周期中,对播放控件进行控制。

  1. @Override
  2. protected void onResume() {
  3. super.onResume();
  4. if (mAliyunVodPlayerView != null) {
  5. mAliyunVodPlayerView.onResume();
  6. }
  7. }
  8. @Override
  9. protected void onStop() {
  10. super.onStop();
  11. if (mAliyunVodPlayerView != null) {
  12. mAliyunVodPlayerView.onStop();
  13. }
  14. }
  15. @Override
  16. protected void onDestroy() {
  17. super.onDestroy();
  18. if (mAliyunVodPlayerView != null) {
  19. mAliyunVodPlayerView.onDestroy();
  20. }
  21. }

以上为简单的示例,均可在demo中找到。更多的播放器操作,参见 接口详细说明

六、播放时,设置不同source的使用说明

1. AliyunPlayAuth

注:此方式主要用于视频点播服务,需注意PlayAuth的时效问题。因为PlayAuth只有100s的时效。多数播放不了的问题是由此引起。

基本的使用方式:

  1. AliyunPlayAuth.AliyunPlayAuthBuilder aliyunPlayAuthBuilder = new AliyunPlayAuth.AliyunPlayAuthBuilder();
  2. aliyunPlayAuthBuilder.setPlayAuth(“PlayAuth字符串”);
  3. aliyunPlayAuthBuilder.setVid(“视频的id”);
  4. aliyunPlayAuthBuilder.setQuality(IAliyunVodPlayer.QualityValue.QUALITY_ORIGINAL);
  5. mAliyunVodPlayer.prepareAsync(aliyunPlayAuthBuilder.build());

2. AliyunLocalSource

此方式可以播放本地或网络的视频。

注:视频格式目前只支持MP4(H264+AAC)。其他格式不保证能正确播放。

基本的使用方式:

  1. AliyunLocalSource.AliyunLocalSourceBuilder aliyunLocalSourceBuilder = new AliyunLocalSource.AliyunLocalSourceBuilder();
  2. aliyunLocalSourceBuilder.setSource("本地绝对路径,或者网络地址");
  3. mAliyunVodPlayer.prepareAsync(aliyunLocalSourceBuilder.build());

3. AliyunVidSource

此方式用于播放mts转码服务视频文件,各参数说明参考:MTS播放说明

基本的使用方式:

  1. AliyunVidSource mVidSource = new AliyunVidSource();
  2. mVidSource.setVid("视频id");
  3. mVidSource.setAuthInfo("authinfo字段");
  4. mVidSource.setStsToken("token字段");
  5. mVidSource.setAcKey("accessKeyId值");
  6. mVidSource.setAcId("accessKeySecret值");
  7. mVidSource.setDomainRegion("主机地址");
  8. mAliyunVodPlayer.prepareAsync(mVidSource);

七、下载的使用

此功能用于下载视频云上的视频。示例如下:

1.初始化下载管理类,配置下载加密密钥和保存路径。这些配置建议放在Application中配置.

安全图片获取参考文档:https://help.aliyun.com/document_detail/57920.html?spm=5176.doc51789.6.666.TQxC07

  1. AliyunDownloadConfig config = new AliyunDownloadConfig();
  2. //设置安全图片,
  3. config.setSecretImagePath(Environment.getExternalStorageDirectory().getAbsolutePath() + "/AliyunVod/encryptedApp.dat");
  4. //设置保存路径。请确保有SD卡访问权限。
  5. config.setDownloadDir(Environment.getExternalStorageDirectory().getAbsolutePath() + "/test_save");
  6. //设置同时下载个数
  7. config.setMaxNums(2);
  8. AliyunDownloadManager.getInstance(this).setDownloadConfig(config);

2.准备下载

  1. //(1)获取下载实例
  2. downloadManager = AliyunDownloadManager.getInstance(this);
  3. //(2)添加下载监听
  4. downloadManager.addDownloadInfoListener(downloadInfoListener);
  5. //(3)组装下载需要的视频信息并且调用prepareDoawloadMedia.如下的参数如何获取见:https://help.aliyun.com/document_detail/57916.html?spm=5176.7757620.6.666.4hd5uh
  6. AliyunPlayAuth.AliyunPlayAuthBuilder aliyunPlayAuthBuilder = new AliyunPlayAuth.AliyunPlayAuthBuilder();
  7. aliyunPlayAuthBuilder.setPlayAuth(“PlayAuth字符串”);
  8. aliyunPlayAuthBuilder.setVid(“视频的id”);
  9. if (aliyunPlayAuthBuilder == null) {
  10. return;
  11. }
  12. downloadManager.prepareDownloadMedia(aliyunPlayAuthBuilder());

3.调用准备下载之后,如信息没有异常会收到准备成功的回调.在准备成功的回调里面调用开始下载

  1. @Override
  2. public void onPrepared(List<AliyunDownloadMediaInfo> list) {
  3. //第二步 ; 准备完成
  4. Log.d("AliyunDownload","onPrepared");
  5. AliyunDataSource.AliyunDataSourceBuilder adb = getAliyunDataSourceBuilder();
  6. adb.setFormat(list.get(0).getFormat());
  7. adb.setQuality(list.get(1).getQuality());
  8. //返回值为0则为开始下载成功.
  9. downloadManager.startDownloadMedia(adb.build());
  10. }

4.如无异常将会开始下载,走onProgress的回调.成功会走onCompletion的回调.

  1. private AliyunDownloadInfoListener downloadInfoListener = new AliyunDownloadInfoListener() {
  2. @Override
  3. public void onPrepared(List<AliyunDownloadMediaInfo> list) {
  4. //准备完成
  5. }
  6. @Override
  7. public void onStart(AliyunDownloadMediaInfo aliyunDownloadMediaInfo) {
  8. //开始下载
  9. }
  10. @Override
  11. public void onProgress(AliyunDownloadMediaInfo aliyunDownloadMediaInfo, int i) {
  12. //开始下载进度
  13. }
  14. @Override
  15. public void onStop(AliyunDownloadMediaInfo aliyunDownloadMediaInfo) {
  16. //停止下载
  17. }
  18. @Override
  19. public void onCompletion(AliyunDownloadMediaInfo aliyunDownloadMediaInfo) {
  20. //下载成功
  21. }
  22. @Override
  23. public void onError(AliyunDownloadMediaInfo aliyunDownloadMediaInfo, int i, String s) {
  24. //下载出错
  25. }
  26. @Override
  27. public void onWait(AliyunDownloadMediaInfo aliyunDownloadMediaInfo) {
  28. //等待下载
  29. }
  30. @Override
  31. public void onM3u8IndexUpdate(AliyunDownloadMediaInfo outMediaInfo, int index) {
  32. //m3u8更新
  33. }
  34. };

以上为简单的示例,均可在demo中找到。更多的播放器操作,参见 接口详细说明

八、边播边下缓存功能的使用

1.创建Player或者PlayerView之后,在prepare之前,设置下载路径(绝对路径)、最大下载数据(单位:MB)、单一视频最大下载总时长(单位:秒)。例如:

  1. AliyunVodPlayer aliyunVodPlayer = new AliyunVodPlayer(this);
  2. String sdDir = Environment.getExternalStorageDirectory().getAbsolutePath() + "/test_save_cache";
  3. aliyunVodPlayer.setPlayingCache(true,sdDir,60 * 60 /*时长, s */,300 /*大小,MB*/);
  4. aliyunVodPlayer.setOnPreparedListener(...);
  5. ......
  6. aliyunVodPlayer.prepareAsync(...);

功能限制说明:1.缓存功能仅针对被完整播放的视频(seek后无效),主要用于短视频循环播放场景。2.当前仅针对点播和MTS的vid播放方式提供。

九、倍速播放的使用

创建播放器之后,调用setPlaySpeed方法。参数为播放速度speed,值范围为0.5~2.

  1. if (aliyunVodPlayer != null) {
  2. aliyunVodPlayer.setPlaySpeed(speed);
  3. }

十、音频数据回调的使用

创建播放器之后,设置音频数据的回调接口。通过回调接口,可以实现音柱等功能。设置方法如下:

  1. if (aliyunVodPlayer != null) {
  2. aliyunVodPlayer.setOnPcmDataListener(onPcmDataListener);
  3. }

十一、混淆配置

在混淆配置中加入如下代码,不混淆SDK:

  1. -keep class com.alivc.player.**{*;}
  2. -keep class com.aliyun.vodplayer.**{*;}
  3. -keep class com.aliyun.vodplayerview.**{*;}
本文导读目录