【问题标题】:Search for i-frame in RTP Packet在 RTP Packet 中搜索 i-frame
【发布时间】:2011-03-08 02:58:36
【问题描述】:

我正在使用 Axis IP 摄像机在 C# 中实现 RTSP。一切正常,但是当我尝试显示视频时,我得到的前几帧有很多绿色补丁。我怀疑我没有先将 i-frame 发送给客户端的问题。

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

【问题讨论】:

标签: rtp rtsp


【解决方案1】:

当启动一个 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 标头之外还有一些分段信息。在识别框架之前,您必须重新组装它。

【讨论】:

    【解决方案2】:

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

    绿色补丁确实可能是由于没有先收到 iframe 造成的。

    【讨论】:

    • 嗨 Ralf,感谢您的回复....我正在使用 MPEG4 流。现在我已经设法获得了检测 i-frame 的算法,但是正如你所说的“绿色补丁确实可能是由于没有先收到 iframe 而引起的。”,我如何确保我总是首先收到 i-frame? ?
    • 像 jenseb 提到的最简单的方法就是丢弃所有帧,直到检测到第一个 i 帧。我对轴相机不熟悉,但也许您可以配置 i-frame 频率以确保您不必等待太久。
    猜你喜欢
    • 2010-12-29
    • 1970-01-01
    • 2011-05-09
    • 2017-02-05
    • 2022-11-15
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多