全部产品
视频直播

SDK集成步骤

更新时间:2017-08-31 17:37:23   分享:   

引入SDK

引入开发包步骤:

在Android Studio工程中,创建libs文件夹,将所需的aar包拷贝到libs文件夹中。

在build.gradle的dependencies中加入compile(name: ‘AliyunPlayer’, ext: ‘aar’)

import_aar

开发接入

Step1:权限声明(对于Android6.0以上的机型需要sdk的接入者动态申请响应的权限)

在AndroidManifest.xml中,声明以下权限:

  1. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  2. <uses-permission android:name="android.permission.INTERNET" />
  3. <uses-permission android:name="android.permission.READ_PHONE_STATE" />
  4. <uses-permission android:name="android.permission.WAKE_LOCK"/>
  5. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
  6. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  7. <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
  8. <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
Step2:创建播放器
  1. 创建视频View,在布局xml文件添加surfaceView:此处待更新,内容粘贴自点播内容

在播放的布局文件中添加 SurfaceView

  1. <android.view.SurfaceView
  2. android:id="@+id/video_view"
  3. android:layout_width="match_parent"
  4. android:layout_height="200dp" />
  1. 应用启动时播放器初始化:
  1. AliVcMediaPlayer.init(getApplicationContext(), businessId);
  1. 创建AliVcMediaPlayer播放器实例:
  1. //获取视频显示View
  2. surfaceView = (SurfaceView) view.findViewById(R.id.video_view);
  3. //创建player对象
  4. mPlayer = new AliVcMediaPlayer(context,surfaceView);

注意: surfaceView不管是动态生成或者静态布局,都需要确保surface创建之后再使用。

Step3:播放图像适配控制
  1. // 设置图像适配屏幕,适配最长边
  2. mPlayer.setVideoScalingMode(VideoScalingMode.VIDEO_SCALING_MODE_SCALE_TO_FIT);
  3. // 设置图像适配屏幕,适配最短边,超出部分裁剪
  4. mPlayer.setVideoScalingMode(VideoScalingMode.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
Step4:开始播放
  1. //设置缺省编码类型:0表示硬解;1表示软解;
  2. //如果缺省为硬解,在使用硬解时如果解码失败,会尝试使用软解
  3. //如果缺省为软解,则一直使用软解,软解较为耗电,建议移动设备尽量使用硬解
  4. mPlayer.setDefaultDecoder(0);
  5. //如果从历史点开始播放
  6. //mPlayer.seekTo(position);
  7. //准备开始播放
  8. mPlayer.prepareAndPlay(msURI.toString());
Step5:停止播放
  1. // 主动停止播放
  2. mPlayer.stop()
Step6:事件监听
  1. 注册事件通知
  1. mPlayer.setPreparedListener(new VideoPreparedListener()); //播放器就绪事件
  2. mPlayer.setErrorListener(new VideoErrorListener()); //异常错误事件
  3. mPlayer.setInfoListener(new VideoInfolistener()); //信息状态监听事件
  4. mPlayer.setSeekCompleteListener(new VideoSeekCompletelistener()); //seek结束事件(备注:直播无seek操作)
  5. mPlayer.setCompletedListener(new VideoCompletelistener()); //播放结束事件
  6. mPlayer.setVideoSizeChangeListener(new VideoSizeChangelistener());
  7. //画面大小变化事件
  8. mPlayer.setBufferingUpdateListener(new VideoBufferUpdatelistener());
  9. //缓冲信息更新事件
  10. mPlayer.setStopedListener(new MediaPlayerStopedListener());
  11. //已经停止播放事件
  1. 异常事件处理详解(备注:必须对异常进行处理)
  1. private class VideoErrorListener implements AliVcMediaPlayer.MediaPlayerErrorListener {
  2. public void onError(int what, int extra) {
  3. switch(what)
  4. {
  5. case AliyunErrorCode.ALIVC_ERR_ILLEGALSTATUS.getCode():
  6. // 非法状态!
  7. break;
  8. case AliyunErrorCode.ALIVC_ERROR_LOADING_TIMEOUT.getCode():
  9. //report_error("网络超时!", true);
  10. break;
  11. case AliyunErrorCode.ALIVC_ERROR_NO_INPUTFILE.getCode():
  12. //视频资源或网络不可用!
  13. break;
  14. case AliyunErrorCode.ALIVC_ERR_NO_SUPPORT_CODEC.getCode():
  15. //无支持的解码器!
  16. break;
  17. case AliyunErrorCode.ALIVC_ERR_NO_NETWORK.getCode():
  18. //网络不可用
  19. break;
  20. case AliyunErrorCode.ALIVC_ERR_READ_DATA_FAILED.getCode():
  21. //读取数据源失败
  22. break;
  23. case AliyunErrorCode.ALIVC_ERR_NO_VIEW.getCode():
  24. //未设置显示view!
  25. break;
  26. default:
  27. //播放器错误!
  28. break;
  29. }
  30. }
  31. }
  1. 播放器就绪事件(备注:根据业务需要实现)
  1. private class VideoPrepareListener implements AliVcMediaPlayer.MediaPlayerPreparedListener{
  2. @Override
  3. public void onPrepared() {
  4. //更新视频总进度
  5. } }
  1. 信息状态监听事件(备注:根据业务需要实现)
  1. private class VideoInfolistener implements AliVcMediaPlayer.MediaPlayerInfoListener {
  2. public int onInfo(int what, int extra){
  3. switch (what)
  4. {
  5. case MediaPlayer.MEDIA_INFO_UNKNOW:
  6. // 未知
  7. break;
  8. case MediaPlayer.MEDIA_INFO_BUFFERING_START:
  9. // 开始缓冲
  10. break;
  11. case MediaPlayer.MEDIA_INFO_BUFFERING_END:
  12. // 结束缓冲
  13. break;
  14. case MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START:
  15. // 首帧显示时间
  16. break;
  17. }
  18. return 0;
  19. }
  20. }

注: 播放器调用流程为:prepareAndPlay->(pause->resume)->stop->release

同一个界面(即同一个surfaceview)播放下一个视频时,可以执行以下:

prepareAndPlay->(pause->resume)->stop->下一个视频->prepareAndPlay->(pause->resume)->stop

退出界面时执行stop->release将播放器资源销毁

播放器可配置参数与可选功能

可参阅文档: 接口说明

配置参数接口 用途描述
setTimeout 设置网络超时断开链接的时间
setMaxBufferDuration 设置直播过程中缓冲区视频丢帧的起始时间,若缓冲区中视频帧的时长超过这个值,则开始丢帧操作。设置这个参数可以控制直播延时的长度,参数值越小则直播的延迟越小。

混淆规则

在混淆文件中添加:

  1. -keep class com.alivc.player.** {*;}
  2. -keepclassmembers class com.alivc.player.** { *;}

FAQ

  1. 同时使用了点播与直播,播放SDK是否兼容?还是要各自独立使用
    答:可以兼容。

  2. 兼容两种模式,通过AlivcMediaPlayer的setMediaType接口来指定是点播还是直播。如果不指定,播放器也会智能识别,不过还是建议由用户指定。
    答:如果用户可以确定是点播还是直播,最好指定一下。如果不指定,播放器会自动识别。

本文导读目录
本文导读目录
以上内容是否对您有帮助?