我正在C#中使用Axis IP Camera实现RTSP。一切工作正常,但是当我尝试显示视频时,我得到了很多绿色修补程序的第一帧。我怀疑我不是首先将i-fram发送给客户端的问题。在RTP数据包中搜索i帧
因此,我想知道检测RTP数据包中的i帧所需的算法。
感谢,
元帅
我正在C#中使用Axis IP Camera实现RTSP。一切工作正常,但是当我尝试显示视频时,我得到了很多绿色修补程序的第一帧。我怀疑我不是首先将i-fram发送给客户端的问题。在RTP数据包中搜索i帧
因此,我想知道检测RTP数据包中的i帧所需的算法。
感谢,
元帅
这取决于视频媒体类型。如果以H.264为例,您可以查看NAL单元头来检查最终单元类型。
绿色补丁确实可能是由于未先收到iframe而导致的。
当启动RTSP会话时,服务器通常以配置数据和第一个I帧启动RTP流。
可以想象,您的Axis摄像头设置为“始终组播” - 在这种情况下,RTSP通信导致SDP描述,该描述告诉客户端接收组播流的所有必要网络和流媒体细节。
由于组播流总是存在,所以最有可能首先接收一些P-或B-帧(取决于GOP大小)。
您可以像检测Ralf所建议的I帧那样通过NAL单元类型识别它们来检测RTP客户端中的这些P/B帧。只需跳过RTP客户端中的所有帧,直到您收到第一个I帧。 现在您可以将所有后续帧转发给解码器。
或者你给改变你的相机设置!
jens。
ps:别忘了你的RTP流中有碎片 - 这意味着除了RTP头之外还有一些碎片信息。在识别框架之前,您必须重新组装它。
这可能是回答您的问题: http://stackoverflow.com/questions/1957427/detect-mpeg4-h264-i-frame-idr-in-rtp-stream – 2012-05-30 06:14:34