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