排查点播错误你首先要清楚点播的基本流程,一般的流程如下:
@startuml "WEB用户" -> "WVP-PRO": 1. 发起点播请求 "设备" <- "WVP-PRO": 2. Invite(携带SDP消息体) "设备" --> "WVP-PRO": 3. 200OK(携带SDP消息体) "设备" <-- "WVP-PRO": 4. Ack "设备" -> "ZLMediaKit": 5. 发送实时流 "WVP-PRO" <- "ZLMediaKit": 6. 流改变事件 "WEB用户" <-- "WVP-PRO": 7. 回复流播放地址(携带流地址) "WVP-PRO" <- "ZLMediaKit": 8. 无人观看事件 "设备" <- "WVP-PRO": 9 Bye消息 "设备" --> "WVP-PRO": 10 200OK @enduml
针对几种常见的错误,我们来分析一下,也方便大家对号入座解决常见的问题
这个错误一般表现为点击"播放"按钮后很快得到一个错误。
@startuml "WEB用户" -> "WVP-PRO": 1. 发起点播请求 "设备" <- "WVP-PRO": 2. Invite(携带SDP消息体) "设备" --> "WVP-PRO": 3. 400错误 @enduml此时通常是设备认为WVP发送了错误的消息给它,它认为消息不全或者错误所以直接返回400错误,此时我们需要抓包来分析是否缺失了内容,也可以直接联系对方询问为什么返回了400。 WVP不能保证兼容所有的设备,有些实现不规范的设备可能在对接时就会出现上述问题,你可以联系作者帮忙对接。
点播超时的情况大致分为两种:点播超时和收流超时
- 设备内部错误,未能回复消息
- 网络原因消息未到到达设备
大部分时候是原因2,所以遇到这个错误我们首先要排查我们我的网路,如果你是公网部署,那么也可能时心跳周期太长,导致的路由NAT失效,WVP的消息无法通道原来的IP端口号发送给设备。
针对这些可能的错误原因我建议的排查顺序:
- 设备发送了流但是发送到了错误的ip和端口上,而这个信息是在invite消息的sdp中指定的,就是流程2Invite(携带SDP消息体)中,而这个错误很可能来自你的配置错误,比如你设置了127.0.0.1导致设备网127.0.0.1上发流,或者是你WVP在公网,但是你给设备了一个内网ip,导致设备无法把流发送过来;
- 设备内部错误未发送流;
- 设备发送了流,但是流无法识别,可能存在于流不规范和网络很差的情况下;
- 设备发送了流,zlm也收到了,但是zlm无法通过hook通知到wvp,此时原因是你可以检查zlm的配置文件中的hook配置,看看是否无法从zlm连接到wvp;
- 设备发送了流,但是开启SSRC校验,设备的流不够规范采用错误的ssrc,导致zlm选择丢弃;