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

使用说明(含答题)

更新时间:2018-01-31 12:03:09

一、概念说明

码率控制

码率控制实际上是一种编码的优化算法,它用于实现对视频流码流大小的控制。那么它控制的目的是什么呢?我们可以试想一下,同样的视频编码格式,码流大,它包含的信息也就越多,那么对应的图像也就越清晰,反之亦然;

视频丢帧

在发送视频帧的时候,如果网络非常差,导致视频帧堆积非常严重的时候,这个时候通过丢弃视频帧,来缩短推流的延时。

耳返

耳返是指主播可以通过耳机实时听到自己的声音,例如当主播带上耳机唱歌时,需要把握音调,这时就需要开启耳返功能。原因是声音通过骨骼传入耳朵和空气传入耳朵是有很大差异的,主播有需求直接听到观众端的效果。

混音

是把多种来源的声音,整合至一个立体音轨或单音音轨中,SDK支持音乐和人声的混音。

更多概念见文档

二、使用流程

2.1 基本使用流程

流程 : 用户APP向APPServer发起请求,获取推流URL -> AppServer根据规则拼接推流URL返回给APP -> APP赋值推流URL到推流SDK,使用推流SDK发起推流 -> 推流SDK将直播流推送到CDN

推流sdk使用流程

2.2 直播答题使用流程

直播答题通过推流SDK、定制版OBS或者阿里云OpenAPI在直播流中插入SEI信息(题目信息),当播放器解析到SEI信息后,会回调给用户的App,此时用户就可以将题目的具体题目内容展示出来。具体流程如下:答题流程

备注:详细接入请查看 直播答题方案,按照说明提交工单申请接入。播放器接入见 答题播放器。OBS推流详见 OBS使用说明

三、SDK集成

SDK信息

下载后的SDK目录:SDK_DIRAlivcLivePusherSDK 目录:不带阿里云播放器

aarlibs目录:aarlibsjniLibs目录:jniLibslibs目录:libsobj目录(用于定位底层问题):obj

AlivcLivePusherSDK+AliyunPlayerSDK 目录:带阿里云播放器aarlibs目录:aarlibsjniLibs目录:jniLibslibs目录:libsobj目录(用于定位底层问题):obj

集成方式分两种,一种采用aar集成,另一种采用jar包+so集成,选择其一即可。

注意:使用背景音乐功能时必须集成播放器sdk(AlivcPlayer.aar),采用aar集成方式时需要同时引入播放器SDK的aar,采用jar包+so集成时,可以在application层引入播放器SDK的aar。v3.2.0+添加了调试工具(live-pusher-resources.aar), 用法同AlivcPlayer.aar使用方法。AlivcReporter.aar也是同样的方法引用

系统支持

  • SDK支持Android 4.3及以上版本
  • 硬件CPU支持ARM64、ARMV7

运行环境

  • SDK编译支持Android 4.3及以上版本
  • Android Studio 2.3及以上版本
  • APP开发环境不需要与SDK一致,但是要保持兼容:
  • Android SDK Tools: android-sdk_25.0.0
    • minSdkVersion 18
    • targetSdkVersion 23

SDK集成

下载SDK包 SDK下载

Android Studio 新建工程:新建工程

copy jar包和so库:新建工程2

工程配置:

  1. dependencies {
  2. implementation fileTree(dir: 'libs', include: ['*.jar'])
  3. }

jniLibs 目录为默认so存放位置如果自己设置位置需要在app的build.gradle中配置:

  1. sourceSets{
  2. main{
  3. jniLibs.srcDirs = ['libs']
  4. }
  5. }

最后编译一下工程 Rebuild Project

SDK使用

AlivcLivePushConfig

推流参数配置类,AlivcLivePushConfig初始化完成后,每个属性参数会有一个对应的默认值,默认值和参数范围参考API文档或注释。如果需要修改特定的推流配置参数值,只需要修改对应的属性值即可。

  1. AlivcLivePushConfig mAlivcLivePushConfig = new AlivcLivePushConfig();
1. 设置分辨率
  1. mAlivcLivePushConfig.setResolution(AlivcResolutionEnum.RESOLUTION_540P);//分辨率540P,最大支持720P,兼容V1.3.0版1080P

综合手机性能和网络带宽要求,建议用户采用540P(主流移动直播App基本都采用540P)

2. 码控参数设置:

SDK提供三种推流模式供开发者选择。修改AlivcQualityModeEnum参数,具体值如下:

  • QM_RESOLUTION_FIRST 清晰度优先模式。SDK内部会对码率参数进行配置,优先保障推流视频的清晰度。

  • QM_FLUENCY_FIRST 流畅度优先模式。SDK内部会对码率参数进行配置,优先保障推流视频的流畅度。

  • QM_CUSTOM 自定义模式。SDK会根据开发者设置的码率进行配置。

  1. /**
  2. * AlivcQualityModeEnum.QM_RESOLUTION_FIRST 清晰度优先
  3. * AlivcQualityModeEnum.QM_FLUENCY_FIRST 流畅度优先
  4. * AlivcQualityModeEnum.QM_CUSTOM 自定义
  5. */
  6. mAlivcLivePushConfig.setQualityMode(AlivcQualityModeEnum.QM_RESOLUTION_FIRST);

以下三个参数仅在自定义模式下,用来控制在不同网速下的实时码率调整,提高直播的流畅度。目标码率为当用户网络情况非常好的时候,码率会调整到目标码率,用来提高直播清晰度;最小码率为当用户网络情况非常差时,码率会逐步向最低码率调整,以提高直播流畅度;初始码率为开始直播时的码率。

  1. mAlivcLivePushConfig.setTargetVideoBitrate(1200); //目标码率1200Kbps
  2. mAlivcLivePushConfig.setMinVideoBitrate(400); //最小码率400Kbps
  3. mAlivcLivePushConfig.setInitialVideoBitrate(900); //初始码率900Kbps

自定义模式建议参数:

分辨率 targetVideoBitrate minVideoBitrate initialVideoBitrate
360p 800 200 600
480p 1000 300 700
540p 1200 400 900
720p 1500 600 1200

综合手机性能和网络带宽要求,建议用户采用540P(主流移动直播App基本都采用540P)

3. 设置美颜开关
  1. mAlivcLivePushConfig.setBeautyOn(false); //关闭美颜
4. 设置美颜模式
  1. /**
  2. * AlivcBeautyLevelEnum.BEAUTY_Normal 标准版(美白、红润、磨皮)
  3. * AlivcBeautyLevelEnum.BEAUTY_Professional 专业版(支持人脸识别美白、瘦脸、大眼、收下巴、腮红)
  4. */
  5. mAlivcLivePushConfig.setBeautyLevel(AlivcBeautyLevelEnum.BEAUTY_Professional);
5. 设置美颜参数

建议用户找UED同事配合调整出最符合自己应用风格的美颜参数。

  1. // 美白范围0-100
  2. mAlivcLivePushConfig.setBeautyWhite(70);
  3. // 磨皮范围0-100
  4. mAlivcLivePushConfig.setBeautyBuffing(40);
  5. // 红润设置范围0-100
  6. mAlivcLivePushConfig.setBeautyRuddy(40);;
  7. // 瘦脸设置范围0-100
  8. mAlivcLivePushConfig.setBeautyThinFace(40);
  9. // 大眼设置范围0-100
  10. mAlivcLivePushConfig.setBeautyBigEye(30);
  11. // 收下巴设置范围0-100
  12. mAlivcLivePushConfig.setBeautyShortenFace(50);
  13. // 腮红设置范围0-100
  14. mAlivcLivePushConfig.setBeautyCheekPink(15);

根据我们经验,以下几组美颜效果比较理想,可参考使用:

档位 磨皮 美白 红润 大眼 瘦脸 收下巴 腮红
一档 40 35 10 0 0 0 0
二档 60 80 20 0 0 0 0
三档 50 100 20 0 0 0 0
四档 40 70 40 30 40 50 15
五档 70 100 10 30 40 50 0
6. 设置推流方向

设置推流方向,可设置竖屏、左横屏和右横屏。

  1. mAlivcLivePushConfig.setPreviewOrientation(AlivcPreviewOrientationEnum.ORIENTATION_PORTRAIT);//竖屏推流
7. 设置帧率
  1. mAlivcLivePushConfig.setFps(AlivcFpsEnum.FPS_20); //帧率20
8. 添加水印

注:水印图片必须为png格式图片(图片必须在apk可以访问的sdcard路径),最多支持三张水印。输入的水印的coordX,coordY,width值为相对于值。

例如:coordX=0.5;coordY=0.5;width=0.5。在不同推流分辨率的情况下,水印图片的左顶点均在推流图像中心点,水印图片的宽度与推流图像的宽度的比恒等于1:2,水印图片的高度按照水印图片的真实宽高与输入的width值等比缩放

  1. /**
  2. * 添加水印,起点位置坐标x[0,width) y[0,height),宽度(0,width],最多添加3个
  3. *
  4. * @param path 水印图片
  5. * @param x 水印左上角x轴位置 相对位置 0~1
  6. * @param y 水印右上角y轴位置 相对位置 0~1
  7. * @param width 水印显示宽度 相对位置 0~1
  8. */
  9. mAlivcLivePushConfig.addWaterMark(waterPath, 0.2, 0.2, 0.3);
9. 设置音频编码模式
  1. /**
  2. * AlivcAudioAACProfileEnum.AAC_LC
  3. * AlivcAudioAACProfileEnum.HE_AAC
  4. * AlivcAudioAACProfileEnum.HE_AAC_v2
  5. * AlivcAudioAACProfileEnum.AAC_LD
  6. */
  7. mAlivcLivePushConfig.setAudioProfile(AlivcAudioAACProfileEnum.AlivcAudioAACProfileEnum.AAC_LC);

AlivcLivePusher推流

备注:

  1. * 接口的调用需要对接口抛出的异常进行处理,添加 try catch 处理操作。
  2. * 接口调用的顺序必须按照说明的顺序调用,否则会排出调用顺序不正确异常。
1. 初始化
  1. AlivcLivePusher mAlivcLivePusher = new AlivcLivePusher();
  2. mAlivcLivePusher.init(mContext, mAlivcLivePushConfig);

初始化完成

2. 注册回调通知

注册回调通知,用来处理推流返回的各种事件:

  1. /**
  2. * 设置推流错误事件
  3. *
  4. * @param errorListener 错误监听器
  5. */
  6. mAlivcLivePusher.setLivePushErrorListener(new AlivcLivePushErrorListener() {
  7. @Override
  8. public void onSystemError(AlivcLivePusher livePusher, AlivcLivePushError error) {
  9. if(error != null) {
  10. //添加UI提示或者用户自定义的错误处理
  11. }
  12. }
  13. @Override
  14. public void onSDKError(AlivcLivePusher livePusher, AlivcLivePushError error) {
  15. if(error != null) {
  16. //添加UI提示或者用户自定义的错误处理
  17. }
  18. }
  19. });
  20. /**
  21. * 设置推流通知事件
  22. *
  23. * @param infoListener 通知监听器
  24. */
  25. mAlivcLivePusher.setLivePushInfoListener(new AlivcLivePushInfoListener() {
  26. @Override
  27. public void onPreviewStarted(AlivcLivePusher pusher) {
  28. //预览开始通知
  29. }
  30. @Override
  31. public void onPreviewStoped(AlivcLivePusher pusher) {
  32. //预览结束通知
  33. }
  34. @Override
  35. public void onPushStarted(AlivcLivePusher pusher) {
  36. //推流开始通知
  37. }
  38. @Override
  39. public void onPushPauesed(AlivcLivePusher pusher) {
  40. //推流暂停通知
  41. }
  42. @Override
  43. public void onPushResumed(AlivcLivePusher pusher) {
  44. //推流恢复通知
  45. }
  46. @Override
  47. public void onPushStoped(AlivcLivePusher pusher) {
  48. //推流停止通知
  49. }
  50. @Override
  51. public void onPushRestarted(AlivcLivePusher pusher) {
  52. //推流重启通知
  53. }
  54. @Override
  55. public void onFirstFramePreviewed(AlivcLivePusher pusher) {
  56. //首帧渲染通知
  57. }
  58. @Override
  59. public void onDropFrame(AlivcLivePusher pusher, int countBef, int countAft) {
  60. //丢帧通知
  61. }
  62. @Override
  63. public void onAdjustBitRate(AlivcLivePusher pusher, int curBr, int targetBr) {
  64. //调整码率通知
  65. }
  66. @Override
  67. public void onAdjustFps(AlivcLivePusher pusher, int curFps, int targetFps) {
  68. //调整帧率通知
  69. }
  70. });
  71. /**
  72. * 设置网络通知事件
  73. *
  74. * @param infoListener 通知监听器
  75. */
  76. mAlivcLivePusher.setLivePushNetworkListener(new AlivcLivePushNetworkListener() {
  77. @Override
  78. public void onNetworkPoor(AlivcLivePusher pusher) {
  79. //网络差通知
  80. }
  81. @Override
  82. public void onNetworkRecovery(AlivcLivePusher pusher) {
  83. //网络恢复通知
  84. }
  85. @Override
  86. public void onReconnectStart(AlivcLivePusher pusher) {
  87. //重连开始通知
  88. }
  89. @Override
  90. public void onReconnectFail(AlivcLivePusher pusher) {
  91. //重连失败通知
  92. }
  93. @Override
  94. public void onReconnectSucceed(AlivcLivePusher pusher) {
  95. //重连成功通知
  96. }
  97. @Override
  98. public void onSendDataTimeout(AlivcLivePusher pusher) {
  99. //发送数据超时通知
  100. }
  101. @Override
  102. public void onConnectFail(AlivcLivePusher pusher) {
  103. //连接失败通知
  104. }
  105. });
  106. /**
  107. * 设置背景音乐播放通知事件
  108. *
  109. * @param pushBGMListener 通知监听器
  110. */
  111. mAlivcLivePusher.setLivePushBGMListener(new AlivcLivePushBGMListener() {
  112. @Override
  113. public void onStarted() {
  114. //播放开始通知
  115. }
  116. @Override
  117. public void onStoped() {
  118. //播放停止通知
  119. }
  120. @Override
  121. public void onPaused() {
  122. //播放暂停通知
  123. }
  124. @Override
  125. public void onResumed() {
  126. //播放恢复通知
  127. }
  128. /**
  129. * 播放进度事件
  130. *
  131. * @param progress 播放进度
  132. */
  133. @Override
  134. public void onProgress(final long progress, final long duration) {
  135. @Override
  136. public void onCompleted() {
  137. //播放结束通知
  138. }
  139. @Override
  140. public void onDownloadTimeout() {
  141. //播放器超时事件,在这里处理播放器重连并且seek到播放位置
  142. }
  143. @Override
  144. public void onOpenFailed() {
  145. //流无效通知,在这里提示流不可访问
  146. }
  147. });
3. 开始预览

必须在init成功后才能调用开始预览接口。

  1. /**
  2. * 同步接口
  3. */
  4. mAlivcLivePusher.startPreview(mSurfaceView)
  5. /**
  6. * 异步接口
  7. */
  8. mAlivcLivePusher.startPreviewAysnc(mSurfaceView);
4. 开始推流

必须在预览成功后才能调用开始推流接口。

  1. /**
  2. * 同步接口 mPushUrl 推流地址
  3. */
  4. mAlivcLivePusher.startPush(mPushUrl);
  5. /**
  6. * 异步接口
  7. */
  8. mAlivcLivePusher.startPushAysnc(mPushUrl);
5. 停止推流

必须在预览成功或这推流成功后才能调用。

  1. mAlivcLivePusher.stopPush();
6. 停止预览

必须在初始化成功或预览成功后才能调用。

  1. mAlivcLivePusher.stopPreview();
7. 暂停推流

必须在预览成功或推流成功或暂停推流时才能调用,此时sdk不会停止对音频的采集,如不需要采集,需要调用 静音接口 setMute(true/false)。

  1. mAlivcLivePusher.pause();
8. 恢复推流

必须在推流暂停状态下才能调用。

  1. /**
  2. * 同步接口
  3. */
  4. mAlivcLivePusher.resume();
  5. /**
  6. * 异步接口
  7. */
  8. mAlivcLivePusher.resumeAsync();
9. 重新推流

必须在推流状态下或者sdk返回错误时,才能调用。

  1. /**
  2. * 同步接口
  3. */
  4. mAlivcLivePusher.restartPush();
  5. /**
  6. * 异步接口
  7. */
  8. mAlivcLivePusher.restartPushAync();
10. 推流重连

必须在推流状态下或者sdk返回错误时,才能调用。

  1. mAlivcLivePusher.reconnectPushAsync();
11. 销毁
  1. mAlivcLivePusher.destroy();
12. 设置静音

必须在预览或者推流成功后才能调用。

  1. // 静音/不静音
  2. mAlivcLivePusher.setMute(true)/mAlivcLivePusher.setMute(false);

静音后音乐声音和人声输入都会静音,完成后,播放端播放有画面无声音。要单独设置音乐或人声静音可以通过混音音量设置接口来调整。完成后,播放端播放有画面无声音。

13. 旋转摄像头

必须在预览或者推流成功后才能调用。

  1. mAlivcLivePusher.switchCamera();
14. 闪光灯打开/关闭

必须在预览或者推流成功后才能调用。

  1. mAlivcLivePusher.setFlash(true);/mAlivcLivePusher.setFlash(false);
15. 预览镜像打开/关闭

必须在预览成功后才能调用。

  1. mAlivcLivePusher.setPreviewMirror(true);/mAlivcLivePusher.setPreviewMirror(false);
16. 推流镜像打开/关闭

必须在预览或者推流成功后才能调用。

  1. mAlivcLivePusher.setPushMirror(true);/mAlivcLivePusher.setPushMirror(false);
17. 美颜打开/关闭

必须在预览或者推流成功或推流暂停后才能调用。

  1. mAlivcLivePusher.setBeautyOn(true);/mAlivcLivePusher.setBeautyOn(false);
18. 美颜参数 范围都是0~100

必须在预览或者推流成功后才能调用。建议用户找UED同事配合调整出最符合自己应用风格的美颜参数。

  1. // 美白范围0-100
  2. mAlivcLivePusher.setBeautyWhite(70);
  3. // 磨皮范围0-100
  4. mAlivcLivePusher.setBeautyBuffing(40);
  5. // 红润设置范围0-100
  6. mAlivcLivePusher.setBeautyRuddy(40);;
  7. // 瘦脸设置范围0-100
  8. mAlivcLivePusher.setBeautyThinFace(40);
  9. // 大眼设置范围0-100
  10. mAlivcLivePusher.setBeautyBigEye(30);
  11. // 收下巴设置范围0-100
  12. mAlivcLivePusher.setBeautyShortenFace(50);
  13. // 腮红设置范围0-100
  14. mAlivcLivePusher.setBeautyCheekPink(15);
19. 自动对焦

必须在预览或者推流成功后才能调用。

  1. mAlivcLivePusher.setAutoFocus(true);/mAlivcLivePusher.setAutoFocus(false);
20. 手动对焦

必须在预览或者推流成功后才能调用。

  1. mAlivcLivePusher.focusCameraAtAdjustedPoint(x, y, true); // x,y 坐标点
21. 设置缩放

必须在预览或者推流成功后才能调用。

  1. /**
  2. * 设置缩放[0,getMaxZoom()]
  3. */
  4. mAlivcLivePusher.setZoom(5);
22. 获取摄像头支持的最大缩放值

必须在预览或者推流成功后才能调用。

  1. mAlivcLivePusher.getMaxZoom()
23. 获取当前缩放值

必须在预览或者推流成功后才能调用。

  1. mAlivcLivePusher.getCurrentZoom()
24. 设置目标视频码率

必须在预览或者推流成功后才能调用。

  1. mAlivcLivePusher.setTargetVideoBitrate(800)
25. 设置最小视频码率

必须在预览或者推流成功后才能调用。

  1. mAlivcLivePusher.setMinVideoBitrate(400)
26. 获取设备是否支持自动对焦

必须在预览或者推流成功后才能调用。

  1. /**
  2. *返回值 ture 支持 false 不支持
  3. */
  4. mAlivcLivePusher.isCameraSupportAutoFocus()
27. 获取是否支持闪光灯

必须在预览或者推流成功后才能调用。

  1. /**
  2. *返回值 ture 支持 false 不支持
  3. */
  4. mAlivcLivePusher.isCameraSupportFlash()
28. 是否正在推流
  1. /**
  2. *返回值 ture 正在推流 false 没有推流
  3. */
  4. mAlivcLivePusher.isPushing()
29. 获取推流URL
  1. mAlivcLivePusher.getPushUrl()
30. 设置推流方向
  1. /**
  2. * AlivcPreviewOrientationEnum
  3. *
  4. * ORIENTATION_PORTRAIT(0) 竖屏
  5. * ORIENTATION_LANDSCAPE_HOME_RIGHT(90) 横屏,Home键在右侧
  6. * ORIENTATION_LANDSCAPE_HOME_LEFT(270) 横屏,Home键在左侧
  7. */
  8. mAlivcLivePusher.setPreviewOrientation(ORIENTATION_PORTRAIT)
31. 获取推流统计数据
  1. mAlivcLivePusher.getLivePushStatsInfo()
32. 设置日志级别
  1. /**
  2. * AlivcLivePushLogLevel
  3. *
  4. * AlivcLivePushLogLevelAll(1) 全部
  5. * AlivcLivePushLogLevelVerbose(2) 冗长
  6. * AlivcLivePushLogLevelDebug(3) 调试
  7. * AlivcLivePushLogLevelInfo(4) 提示
  8. * AlivcLivePushLogLevelWarn(5) 警告
  9. * AlivcLivePushLogLevelError(6) 错误
  10. * AlivcLivePushLogLevelFatal(7) 阻塞错误
  11. */
  12. mAlivcLivePusher.setLogLevel(AlivcLivePushLogLevelAll)
33. 下发题目/答案

通过在直播流里面插入SEI信息,播放器解析SEI实现直播答题功能。

  1. /**
  2. * @param info 题目信息,json字符串,根据json信息判断是题目/答案
  3. * @param repeat 重复次数
  4. * @param delay 延时ms
  5. * @param isKeyFrame 是否关键帧
  6. */
  7. mAlivcLivePusher.sendMessage("题目信息", 200, 1000, true)
34. 设置码控模式
  1. /**
  2. * AlivcQualityModeEnum
  3. *
  4. * AlivcQualityModeEnum.QM_RESOLUTION_FIRST 清晰度优先
  5. * AlivcQualityModeEnum.QM_FLUENCY_FIRST 流畅度优先
  6. * AlivcQualityModeEnum.QM_CUSTOM 自定义
  7. */
  8. mAlivcLivePushConfig.setQualityMode(AlivcQualityModeEnum.QM_RESOLUTION_FIRST);
35. 显示调试工具
  1. /**
  2. * context 应用application context
  3. */
  4. AlivcLivePusher.showDebugView(context)
36. 移除调试工具
  1. /**
  2. * context 应用application context
  3. */
  4. AlivcLivePusher.hideDebugView(context)

播放背景音

必须在预览成功后才能调用。

  1. mAlivcLivePusher.startBGMAsync(mPath)
1. 停止播放背景音乐
  1. mAlivcLivePusher.stopBGMAsync()

若当前正在播放BGM,并且需要切换歌曲,只需要调用开始播放背景音乐接口即可,无需停止当前正在播放的背景音乐。

2. 暂停播放背景音乐

必须在背景音乐播放时才能调用。

  1. mAlivcLivePusher.pauseBGM()
3. 恢复播放背景音乐

必须在背景音乐暂停时才能调用。

  1. mAlivcLivePusher.resumeBGM()
4. 设置背景音乐是否循环播放
  1. mAlivcLivePusher.setBGMLoop(true)/mAlivcLivePusher.setBGMLoop(false)
5. 设置耳返开关
  1. mAlivcLivePusher.setBGMEarsBack(true)/mAlivcLivePusher.setBGMEarsBack(false)
6. 设置背景音乐混音 音乐音量[0~100]
  1. mAlivcLivePusher.setBGMVolume(50)
7.设置背景音乐混音 人声音量[0~100]

打开降噪后,将对采集到的声音中非人声的部分进行过滤处理。

  1. mAlivcLivePusher.setCaptureVolume(50)
8. 设置音频降噪
  1. mAlivcLivePusher.setAudioDenoise(true)/mAlivcLivePusher.setAudioDenoise(false)

四、异常及特殊场景处理

1.回调错误处理

  • AlivcLivePushErrorListener 错误回调

    onSystemError:系统错误,建议退出推流并重新创建。

    onSDKError:SDK错误,返回相应的错误码。

    当出现SDK错误时,有两种处理方式,选择其一即可:1.退出直播。2.调用 restartPush/restartPushAsync 重启AlivcLivePusher。

    对于特殊的错误码处理:

errorCode 错误描述
AlivcLivePushError.ALIVC_PUSHER_ERROR_SDK_CAPTURE_CAMERA_OPEN_FAILED APP没有摄像头权限
AlivcLivePushError.ALIVC_PUSHER_ERROR_SDK_CAPTURE_MIC_OPEN_FAILED APP没有mic权限
  • AlivcLivePushNetworkListener 网络回调

    onNetworkPoor:收到SDK网速慢回调时,说明当前网络对于推流的支撑度不足,此时推流仍在继续。没有中断。

    onNetworkRecovery:网络恢复通知

    onConnectFail & onReconnectFail & onSendDataTimeout

    当出现网络相关错误时,有两种处理方式,选择其一即可:1.销毁当前推流,重新创建 2.调用 reconnectAsync 重连,建议重连之前先做网络检测和推流地址检测

    onReconnectSucceed:重连成功回调

2.退后台 & 锁屏

  • 退后台 & 锁屏

    调用 AlivcLivePusher 的 pause()/resume() 可以自动恢复推流

    **对于非系统的音视频通话,sdk会采集声音并推送出去,客户可以根据场景的需求在退后台或锁屏时 调用 静音接口 mAlivcLivePusher.setMute(true/false);

    注:退后台,SDK不推音频数据

3.网络异常 & 播放器重连

  • 短时间网络切换和断网

    短时间网络切换:推流SDK会自动重连,默认重连 5 次,重连间隔 1000 ms,用户也可以自定义重连次数及间隔

    如果重连失败,参考断网处理。

    断网后,会有重连失败回调 AlivcLivePushNetworkListener onReconnectFail,可用两种处理方式,选择其一:1.直接销毁推流,重新创建推流;2.调用reconnectPushAsync()调用之前检测网络状态和推流地址是否正确。

  • 长时间断网

    长时间断网,在用户设置的重连次数内没有连上,SDK回调重连失败 onReconnectFail,等待网络恢复,可以重新调用reconnectPushAsync()进行重连。观众播放端需要重新拉流播放,就可以正常播放。

  • 网络差 网络恢复

    在网络不足以支撑当前推流的情况下,SDK会回调 AlivcLivePushNetworkListener 监听器

    • 网络差: onNetworkPoor
    • 网络恢复 onNetworkRecovery可以做UI提示,提示用户检测网络,也可以调用重连接口:reconnectPushAsync(),建议调用之前检测网络状态。重连回调:

      1. /**
      2. * 重连开始
      3. */
      4. public void onReconnectStart(AlivcLivePusher pusher);
      5. /**
      6. * 重连失败
      7. */
      8. public void onReconnectFail(AlivcLivePusher pusher);
      9. /**
      10. * 重连成功
      11. */
      12. public void onReconnectSucceed(AlivcLivePusher pusher);
  • 重连

    在网络情况不好的情况,可以调用reconnectPushAsync()函数,进行重连;在SDK返回网络错误或推流错误时,检测过网络后,也可以调用重连接口。

    1. mAlivcLivePusherreconnectPushAsync();
  • 播放器重连

    阿里云播放器重连需要先停止播放在开始播放。调用接口顺序 stop -> prepareAndPlay

    1. mPlayer.stop();
    2. mPlayer.prepareAndPlay(mUrl);

    注:关于播放器的使用详见:阿里云播放器使用说明

4.码率设置

SDK内部有动态变化码率策略,码率预设值在AlivcLivePushConfig中修改。根据产品需求对于视频分辨率、视频流畅度、视频清晰度的要求不同,对应设置的码率范围也不同,具体参考如下:

  1. 视频清晰度:推流码率越高,则视频清晰度越高。所以推流分辨率越大,所需要设置的码率也就越大,这样可以保证视频清晰度。
  2. 视频流畅度:推流码率越高,所需要的网络带宽越大。所以在较差的网络环境下,设置较高的码率有可能影响视频流畅度。

五、注意事项

1.检查混淆

确认已将SDK相关包名加入了不混淆名单

  1. -keep class com.alibaba.livecloud.** { *;}
  2. -keep class com.alivc.** { *;}

2.接口调用

  • 同步异步接口调用同步异步接口都可以正常调用,尽量使用异步接口调用,可以避免对主线程的资源消耗
  • 接口异常处理SDK接口都会在发生错误或者调用顺序不对时 thorws 出异常,调用时注意添加try catch 处理,否则会造成程序的crash
  • 接口调用顺序接口调用顺序

3.关于包大小

  • SDK大小 arm64-v8a 11.7M/v7a 9M
  • 集成SDK后 包增加 3.6M

4.关于历史版本升级说明

1)推流SDK V1.3升级至V3.0.0+、连麦SDK升级至推流V3.0.0+,请下载升级说明文档

2) 推流SDK升级至V3.1.0,如果未集成阿里云播放器SDK需注意集成播放器SDK(已包含推流SDK下载包里面)。

3) 推流SDK升级至V3.2.0+,提供包含阿里云播放器的版本和不包含阿里云播放器两个版本,如果需要背景音乐功能必须集成播放器,否则可以不使用播放器SDK。

本文导读目录