我正在使用Axis IP Camera在C#中实现RTSP。一切都工作正常,但当我尝试显示视频时,我得到的前几帧有很多绿色补丁。我怀疑问题是我没有先将i-frame发送给客户端。
因此,我想知道在RTP数据包中检测i帧所需的算法。
答案 0 :(得分:1)
当启动RTSP-Session时,服务器正常启动带有config-data的RTP流,然后是第一个I-Frame。
可以想象,您的Axis-camera设置为“始终多播” - 在这种情况下,RTSP通信会导致SDP描述,该描述告诉客户端所有必要的网络和流媒体详细信息以接收多播流。
由于组播流始终存在,因此您很可能首先接收一些P帧或B帧(取决于GOP大小)。
您可以通过RALf通过NAL-unit类型识别它们来检测RTP客户端中的这些P / B帧,就像检测I帧一样。只需跳过RTP客户端中的所有帧,直到收到第一个I帧。 现在,您可以将所有后续帧转发到解码器。
或者你改变了相机设置!
延
ps:不要忘记你的RTP流中存在碎片 - 这意味着除了RTP头之外还有一些碎片信息。在识别框架之前,您必须重新组装它。
答案 1 :(得分:0)
这取决于视频媒体类型。例如,如果您使用H.264,您将查看NAL单元标头以检查最终单元类型。
绿色补丁确实可能是因为没有先收到iframe。