降级处理
降级场景
降级说明
使用LLL SDK进行直播拉流时,可能会遇到播放失败等问题,可以考虑使用其他协议播放。
触发条件
- 浏览器环境不支持webrtc特性,可以通过checkSystemRequirements接口来判断。
- 服务端请求、建链均失败。
- 媒体起播播放超时,且解码帧数为0时,会进入降级流程。
- 未开启断流重试时,播放过程中出现断流,也会进入降级流程。
降级方式
- 自动降级
低时延直播SDK默认是开启自动降级的,当触发自动降级时,SDK会自动尝试从低时延直播降级到FLV或者HLS协议,例如,低时延直播地址:
webrtc://domain/appname/streamname?arg1=v1
会根据设备的支持情况,自动尝试降级到FLV或者HLS协议地址,url中携带的参数会拼接到降级后的url中,如:
https://domain/appname/streamname.flv?vhost=domain&arg1=v1 或 https://domain/appname/streamname.m3u8?vhost=domain&arg1=v1
如果需要关闭自动降级,可以通过接口setParameter设置AUTO_DOWNGRADE值来修改,示例如下:
HWLLSPlayer.setParameter('AUTO_DOWNGRADE', false) // true表示开启自动降级播放,false表示关闭自动降级播放,默认开启
- 指定降级
通过HWLLSClient中的startPlay接口,指定options里面参数downgradeUrl的flv或hls地址,可以实现在异常时降级播放。如果hlsUrl和flvUrl播放地址设置一个,会降级至指定地址;如果两个播放地址都设置,则会先走HLS降级,如果HLS不支持或者HLS拉流失败,则会走FLV降级。注意iOS设备不支持FLV播放。
const client = HWLLSPlayer.createClient() client.startPlay(url, { ... downgradeUrl: { hlsUrl: // hls的播放地址 flvUrl: // flv的播放地址 } ... })
降级回调
降级播放后,会有回调事件。
const client = HWLLSPlayer.createClient() client.on('player-changed', (mediaFormat) => { // mediaFormat: hls、flv })