本文介绍使用Android推流SDK可能出现的异常情况、特殊情况,及其处理办法。

当您收到AlivcLivePushErrorListener时

  • 当出现onSystemError系统级错误时,您需要退出直播。
  • 当出现onSDKError错误(SDK错误)时,有两种处理方式,选择其一即可:销毁当前直播并重新创建,或调用restartPush或restartPushAsync重启AlivcLivePusher。
  • 您需要特别处理App没有麦克风权限和没有摄像头权限的回调,App没有麦克风权限错误码为ALIVC_PUSHER_ERROR_SDK_CAPTURE_CAMERA_OPEN_FAILED,App没有摄像头权限错误码为ALIVC_PUSHER_ERROR_SDK_CAPTURE_MIC_OPEN_FAILED。

当您收到AlivcLivePushNetworkListener时

  • 网速慢时,回调onNetworkPoor,当您收到此回调说明当前网络对于推流的支撑度不足,此时推流仍在继续、没有中断。网络恢复时,回调onNetworkRecovery,您可以在此处理自己的业务逻辑,比如UI提醒用户。
  • 网络出现相关错误时,回调onConnectFail、onReconnectError或onSendDataTimeout。有两种处理方式,您只需选择其一:销毁当前推流并重新创建,或调用reconnectAsync进行重连,建议您重连之前先进行网络检测和推流地址检测。
  • SDK内部每次自动重连或者开发者主动调用reconnectAsync重连接口的情况下,会回调onReconnectStart重连开始。每次重连都会对RTMP进行重连链接。

    RTMP链接建立成功之后会回调onReconnectSuccess,此时只是链接建立成功,并不意味着可以推流数据成功。如果链接成功之后,由于网络等原因导致推流数据发送失败,SDK会继续重连。

  • 推流地址鉴权即将过期会回调onPushURLAuthenticationOverdue。如果您的推流开启了推流鉴权功能(推流URL中带有auth_key),我们会对推流URL做出校验。在推流URL过期前约1min,您会收到此回调,实现该回调后,您需要回传一个新的推流URL,以此保证不会因为推流地址过期而导致推流中断。示例代码如下:
    String onPushURLAuthenticationOverdue(AlivcLivePusher pusher) {
        return "新的推流地址 rtmp://";
    }

当您收到AlivcLivePusherBGMListener背景音乐错误回调时

  • 背景音乐开启失败时会回调onOpenFailed,检查背景音乐开始播放接口所传入的音乐路径与该音乐文件是否正确,可调用startBGMAsync重新播放。
  • 背景音乐播放超时会回调onDownloadTimeout,多出现于播放网络URL的背景音乐,提示主播检查当前网络状态,可调用startBGMAsync重新播放。

当网络中断时

  • 短时间断网和网络切换:即短时间的网络波动或者网络切换。一般情况下,中途断网时长在AlivcLivePushConfig设置的重连超时时长和次数范围之内,SDK会进行自动重连,重连成功之后将继续推流。若您使用阿里云播放器,建议播放器收到超时通知之后短暂延时5s后再做重连操作。
  • 长时间断网:断网时长超出AlivcLivePushConfig设置的重连超时时长和次数范围时,SDK自动重连失败,此时会回调onReconnectError,在等到网络恢复之后调用reconnectAsync接口进行重连。同时播放器也要配合做重连操作。
    • 建议您在SDK外部做网络监测。
    • 主播端和播放端在客户端无法进行直接通信,需要配合服务端使用。比如主播端断网,服务端会收到CDN的推流中断回调,此时可以推送给播放端,主播推流中断,播放端再做出相应处理。恢复推流同理。
    • 阿里云播放器重连需要先停止播放再开始播放。调用接口顺序stop>prepareAndPlay。
      mPlayer.stop();
      mPlayer.prepareAndPlay(mUrl);
      说明 关于播放器请参见阿里云播放器SDK使用说明

后台运行和锁屏

  • 当App退至后台或锁屏时,您可调用AlivcLivePusher的pause()或resume()接口,暂停或恢复推流。
  • 对于非系统的音视频通话,SDK会采集声音并推送出去,您可以根据业务需求在退后台或锁屏时调用静音接口mAlivcLivePusher.setMute(true或false)来决定后台时是否采集音频。

码率设置

SDK内部有动态变化码率策略,您可以在AlivcLivePushConfig中修改码率预设值。根据产品需求对于视频分辨率、视频流畅度、视频清晰度的要求不同,对应设置的码率范围也不同,具体参考如下:
  • 视频清晰度:推流码率越高,则视频清晰度越高。所以推流分辨率越大,所需要设置的码率也就越大,以保证视频清晰度。
  • 视频流畅度:推流码率越高,所需要的网络带宽越大。所以在较差的网络环境下,设置较高的码率有可能影响视频流畅度。