2011-03-08 105 views
1

我正在C#中使用Axis IP Camera实现RTSP。一切工作正常,但是当我尝试显示视频时,我得到了很多绿色修补程序的第一帧。我怀疑我不是首先将i-fram发送给客户端的问题。在RTP数据包中搜索i帧

因此,我想知道检测RTP数据包中的i帧所需的算法。

感谢,

元帅

+0

这可能是回答您的问题: http://stackoverflow.com/questions/1957427/detect-mpeg4-h264-i-frame-idr-in-rtp-stream – 2012-05-30 06:14:34

回答

0

这取决于视频媒体类型。如果以H.264为例,您可以查看NAL单元头来检查最终单元类型。

绿色补丁确实可能是由于未先收到iframe而导致的。

+0

嗨拉尔夫,感谢您的回复....我正在使用MPEG4流。现在我已经设法检测i帧的算法,但正如你所说的“绿色斑块确实可能是由于没有首先接收到iframe引起的。”,我如何确保我总是首先收到i帧? ? – Marshal 2011-03-09 01:33:50

+0

像jenseb提到的最简单的事情是简单地删除所有帧,直到你检测到第一个i帧。我对轴相机不熟悉,但也许可以配置i帧频率以确保不必等待太久。 – Ralf 2011-03-09 13:29:11

1

当启动RTSP会话时,服务器通常以配置数据和第一个I帧启动RTP流。

可以想象,您的Axis摄像头设置为“始终组播” - 在这种情况下,RTSP通信导致SDP描述,该描述告诉客户端接收组播流的所有必要网络和流媒体细节。

由于组播流总是存在,所以最有可能首先接收一些P-或B-帧(取决于GOP大小)。

您可以像检测Ralf所建议的I帧那样通过NAL单元类型识别它们来检测RTP客户端中的这些P/B帧。只需跳过RTP客户端中的所有帧,直到您收到第一个I帧。 现在您可以将所有后续帧转发给解码器。

或者你给改变你的相机设置!

jens。

ps:别忘了你的RTP流中有碎片 - 这意味着除了RTP头之外还有一些碎片信息。在识别框架之前,您必须重新组装它。