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

快速接入

更新时间:2017-10-23 11:23:56

引入SDK

引入开发包步骤:
  1. 在Android Studio工程中,创建libs文件夹,将所需的aar包拷贝到libs文件夹中。

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

    import_aar

开发接入

步骤 1. 权限声明(对于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"/>
步骤 2. 创建播放器
  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" />
  2. 应用启动时播放器初始化。

    1. AliVcMediaPlayer.init(getApplicationContext(), businessId);
  3. 创建AliVcMediaPlayer播放器实例。

    1. //获取视频显示View
    2. surfaceView = (SurfaceView) view.findViewById(R.id.video_view);
    3. //创建player对象
    4. mPlayer = new AliVcMediaPlayer(context,surfaceView);

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

步骤 3. 播放图像适配控制
  1. // 设置图像适配屏幕,适配最长边
  2. mPlayer.setVideoScalingMode(VideoScalingMode.VIDEO_SCALING_MODE_SCALE_TO_FIT);
  3. // 设置图像适配屏幕,适配最短边,超出部分裁剪
  4. mPlayer.setVideoScalingMode(VideoScalingMode.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
步骤 4. 开始播放
  1. //设置缺省编码类型:0表示硬解;1表示软解;
  2. //如果缺省为硬解,在使用硬解时如果解码失败,会尝试使用软解
  3. //如果缺省为软解,则一直使用软解,软解较为耗电,建议移动设备尽量使用硬解
  4. mPlayer.setDefaultDecoder(0);
  5. //如果从历史点开始播放
  6. //mPlayer.seekTo(position);
  7. //准备开始播放
  8. mPlayer.prepareAndPlay(msURI.toString());
步骤 5. 停止播放
  1. // 主动停止播放
  2. mPlayer.stop()
步骤 6. 事件监听
  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. //已经停止播放事件
  2. 异常事件处理详解(备注:必须对异常进行处理)。

    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. }
  3. 播放器就绪事件(备注:根据业务需要实现)。

    1. private class VideoPrepareListener implements AliVcMediaPlayer.MediaPlayerPreparedListener{
    2. @Override
    3. public void onPrepared() {
    4. //更新视频总进度
    5. } }
  4. 信息状态监听事件(备注:根据业务需要实现)。

    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 设置直播过程中缓冲区视频丢帧的起始时间,若缓冲区中视频帧的时长超过这个值,则开始丢帧操作。设置这个参数可以控制直播延时的长度,参数值越小则直播的延迟越小。
setPlaySpeed 播放器倍数播放,支持0.5~2倍数播放,创建播放器后设置参数,在播放过程中可更新倍数播放数值;1是正常播放速度。

混淆规则

在混淆文件中添加:

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

FAQ

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

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

本文导读目录