gpt4 book ai didi

ffmpeg - p帧上的rtp解码问题

转载 作者:行者123 更新时间:2023-12-04 23:00:39 25 4
gpt4 key购买 nike

我正在从 IP 摄像机流式传输 rtsp 流。我有一个解析器,它根据 rtp 有效负载类型将数据打包成帧。解析器能够处理 I 帧,因为它们包含帧开始和帧结束数据包,以及介于两者之间的数据包(这是 FU-A 有效负载类型)。

这些结合起来形成一个完整的框架。当我尝试构建 P 帧时,问题就出现了,从 Wireshark 转储中,其中一些似乎是碎片化的(FU-A 有效负载类型),它们包含帧开始和帧结束数据包,但是它们之间不包含数据包.同样在某些情况下,相机会发送带有有效载荷类型 1 的奇怪标记数据包,根据我的理解,这应该是一个完整的帧。

在处理这两个版本的 P 帧后,我使用 ffmpeg 尝试解码这些帧,我收到错误消息,例如 top block 对帧内模式 4x4 不可用。

起初我认为这可能是由于旧的 ffmpeg 版本,但我在网上搜索并重新编译 ffmpeg 时遇到了同样的问题。

I 帧出现碎片并包含大量数据包,一些 P 帧有一个帧开始 (0x81) 和 EOF (0x41),但中间没有数据包,有些看起来从 0x41 开始损坏(似乎这应该是第二个字节)它给出的有效载荷类型为 1。当涉及到这些问题时,我是一个新手,但我查看了 rtp 文档,但我找不到关于如何处理数据的问题。

我也从 VLC 流式传输,这看起来不错,但似乎将帧速率减半,我不确定他们如何能够重建帧。

请有人帮忙。

最佳答案

I 帧通常会被分段,因为它们通常比 p 帧大很多。然而,P 帧也可以被分段。然而,一个 P 帧已经被分成 2 个 RTP 数据包,即一个设置了 FU-header 起始位,另一个设置了结束位,这并没有什么问题。中间不需要有数据包。例如,如果 MTU 是 1500,而 NAL 单元是 1600 字节大,这将被分成 2 个 RTP 数据包。

至于从 0x41 开始的“看起来损坏”的数据包,没有先前的 0x81 数据包,您应该检查 RTP header 中的序列号,因为如果数据包丢失,这将立即告诉您。如果您看到数据包丢失,首先要尝试增加您的套接字接收器缓冲区大小。

由于 VLC 能够播放流,因此您重新组装 NAL 单元的方式很可能存在问题。

此外,在您的问题中,您所指的字节并不总是很清楚:我假设 0x41 和 0x81 出现在 RTP 有效负载的第二个字节中,即在 NAL 单元类型的情况下的 FU header 第一个字节是FU-A。

最后,注意“payload type”是RTP payload类型(RFC3550),而不是H.264标准中定义的NAL单元类型。

关于ffmpeg - p帧上的rtp解码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23274697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com