文档

异常与错误处理

更新时间:

本文介绍Windows推流SDK常见异常与错误处理。

异常与错误处理

推流异常与错误可通过推流SDK回调进行接收处理。Windows推流SDK主要包含以下回调:

回调类型

回调类名

推流回调

AlivcLivePushInfoListener

网络回调

AlivcLivePushNetworkListener

错误回调

AlivcLivePushErrorListener

推流回调

推流回调用于向App通知SDK相应状态,包括预览开始、渲染第一帧视频、发送第一帧音视频流、推流开始、推流停止等回调。

  • onPushStarted、onFirstFramePushed:表示SDK推流成功。

  • onPushStarted:表示连接服务端成功。

  • onFirstFramePushed:表示发送第一帧音视频流成功。

网络相关回调

网络相关回调用于向App通知SDK相应网络状态和链接状态,其中有一些回调是App必须要对接的。

基础模式:基础直播场景

  • onConnectFail:表示推流失败,建议检查推流地址是否非法、是否存在非法字符、鉴权是否有问题、是否超过最大推流并发限制、是否在禁推黑名单中等,确定推流地址合法且可用后再尝试推流。其中具体错误码有0x30020901 ~ 0x30020905, 0x30010900 ~ 0x30010901。

  • onConnectionLost:链接断开回调,链接断开后SDK内部会自动重连,回抛onReconnectStart,如果超过最大重连次数(config.connectRetryCount)后推流链接还是没有恢复,会回抛onReconnectError。

  • onNetworkPoor:网络慢回调,当收到此回调说明当前网络对于推流的支撑度不足,此时推流仍在继续、没有中断。您可以在此处理自己的业务逻辑,比如UI提醒用户。

  • onNetworkRecovery:网络恢复回调。

  • onReconnectError:重连失败回调,表示重连失败,建议检查当前网络,待网络恢复时,重新推流。

  • onSendDataTimeout:送数据超时回调,建议检查当前网络,待网络恢复时,结束推流后重新开始推流。

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

互动模式:直播连麦场景

  • onConnectFail:表示推流失败,建议检查连麦推流地址中token是否非法、网络是否异常等。确定推流地址合法且网络正常可用后再尝试推流。

  • onConnectionStatusChange:连接状态改变的回调,在该回调中会返回连接的相关状态,例如网络连接断开、建立网络连接中、网络已连接、网络连接失败等。当回调AliLiveConnectionStatusFailed状态时,表示链接无法恢复,建议检查当前网络,待网络恢复后重新推流。建议在互动模式下接入该回调,以获取连接相关状态。

  • onPusherNetworkQualityChanged:当前用户上行网络质量回调,当上行网络质量发生变化时,会回调当前上行网络质量评级。

  • onConnectionLost:链接断开回调,不同于基础模式,在互动模式下,当触发onConnectionLost回调时,表示连接无法恢复。建议检查当前网络情况,并在网络恢复后重新进行推流。

错误回调

  • onSystemError:系统设备异常回调,需要销毁引擎重新尝试。

  • onSDKError:SDK错误回调,需要根据错误码做不同的处理:

    • 如果错误码是805438211,表示设备性能差,编码和渲染帧率过低,需要给主播提示,并在app层停掉处理耗时长的业务逻辑(比如高级美颜、动画等)。

    • 您需要特别处理App没有麦克风权限和没有摄像头权限的回调,App没有麦克风权限错误码为268455940,App没有摄像头权限错误码为268455939。

    • 其他的暂时都只打日志,不做其他额外操作。

特殊场景处理

当网络中断时

网络中断分为两种情况,两种情况分别处理:

  • 短时间断网和网络切换:即短时间的网络波动或者网络切换。一般情况下,中途断网时长在AlivcLivePushConfig设置的重连超时时长和次数范围之内,SDK会进行自动重连,重连成功之后将继续推流。若您使用阿里云播放器,建议播放器收到超时通知之后短暂延时5s后再做重连操作。

  • 长时间断网:断网时长超出AlivcLivePushConfig设置的重连超时时长和次数范围时,SDK自动重连失败,此时会回调onReconnectError,在等到网络恢复之后调用reconnectAsync接口进行重连。同时播放器也要配合做重连操作。

    说明
    • 建议您在SDK外部做网络监测。

    • 主播端和播放端在客户端无法进行直接通信,需要配合服务端使用。比如主播端断网,服务端会收到CDN的推流中断回调,此时可以推送给播放端,播放端再做出相应处理。恢复推流同理。

重连操作:

mPlayer.stop();
mPlayer.startPlay(mUrl);
说明

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

更多阿里云播放器信息,请参见Windows播放器快速集成

码率设置

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

  • 视频清晰度:推流码率越高,则视频清晰度越高。所以推流分辨率越大,所需要设置的码率也就越大,以保证视频清晰度。

  • 视频流畅度:推流码率越高,所需要的网络带宽越大。所以在较差的网络环境下,设置较高的码率有可能影响视频流畅度。