【问题标题】:How to know the packet order in RTP H264 Stream如何知道 RTP H264 Stream 中的数据包顺序
【发布时间】:2014-02-11 03:38:16
【问题描述】:

让我记住一些关于 H264 RTP 数据包的事情。

如果您想观察以下句子的一些错误,请随意。

1) IDRs,也叫 I-Frames,即整个图像可以分成包。

2) 当我收到一个数据包并且它的“fragment_type == 28”(不仅如此,假设我真的得到一个片段)时,这意味着我有一个 IDR 片段。

3) 每个数据包都有一个由发射器生成的序列号。序列包遵循一个顺序:如果包A的序列号=20,那么发射器发送的下一个包是21,以此类推。

现在让我们来回答我的问题:

A) 如果我有一个 IDR 需要重建,我如何知道哪些数据包属于这个 IDR?让我举个例子: IDR 在数据包 A、B、C 和 D 中被分段。数据包 A 总是有他的序列号 6606(只是一个例子),因此 B 将有 6607 和 C 6608 和 D 6609 例如,或者序列号没有米?如果序列号没有变化,我假设我在数据包中有一个字段,上面写着“嘿!我是帧“HelloWorld”的一个片段。另一个数据包过来说“嘿!我也是框架“HelloWorld”的一个片段。但是其他数据包来了说“嘿!我不属于 HelloWorld 框架,我属于框架“HelloHell”。那么,显示 IDR 属于哪个框架的字段是什么?

B) 如何从数据包中提取 SPS 和 PPS?我阅读了很多关于此的主题,但我无法理解这些信息在哪个字节中。后来得到它,我怎样才能将这些信息发送给我的解码器?

C) 用户 Cipi,我请你帮我提供一些关于问题 B 的代码示例。伙计,你太有帮助了。在知道之前我所做的几乎所有事情都是因为你的帮助。你能帮助我吗?

谢谢大家!我正在努力使用我的软件从 IP 摄像机 (SONY SNC-EP580) 获取此流。

【问题讨论】:

    标签: h.264 rtp


    【解决方案1】:

    1) IDRs,也称为 I-Frames,即整个图像可以分成数据包。

    任何帧都可以分成多个数据包。这通常与网络的 MTU 有关。

    2) 当我收到一个数据包并且它的“fragment_type == 28”(不仅如此,假设我真的得到一个片段)时,这意味着我有一个 IDR 片段。

    如上所述不正确。

    3) 每个数据包都有一个由发射器生成的序列号。序列包遵循一个顺序:如果包A的序列号=20,则发射器发送的下一个包将是21,以此类推。

    A) 如果我有一个 IDR 需要重建,我怎么知道哪些数据包属于这个 IDR?

    分片单元的第一个数据包将在 FU 标头(有效负载的第二个字节)中设置起始位。分片单元的最后一个数据包将设置结束位。阅读RFC6184 中的第 5.8 节,了解有关碎片单元的更多信息。

    如何从数据包中提取 SPS 和 PPS?

    这取决于使用的打包模式。在单 NAL 单元模式下,每个 NAL 单元(例如 SPS 或 PPS)将位于其自己的 RTP 数据包中。在非交错模式下,您通常必须将 STAP 数据包拆分为原始 NAL 单元。

    后来得到它,我怎样才能将这些信息发送给我的解码器?

    这取决于解码器,所以你必须初始化,其他你可以只传递 NAL 单元,例如SPS 或 PPS 与任何其他 NAL 单元一样。

    我请你帮助我提供一些关于问题 B 的代码示例。

    同样,这是特定于解码器的,开源 VLC 和 ffmpeg 代码包含如何与 libavcodec 交互的示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-04
      • 1970-01-01
      • 2017-02-17
      • 1970-01-01
      • 2019-11-08
      • 1970-01-01
      • 2014-08-31
      • 1970-01-01
      相关资源
      最近更新 更多