2

我正在尝试使用带有 Qt 的 libav 库来解码 h.264 UDP 视频流,但是当我使用 avformat_open_file 时,我收到以下错误消息:

[udp @ 0x102b5bee0] Part of datagram lost due to insufficient buffer size

该消息出现大约 10 次,然后尝试失败。我正在尝试同时解码 4 个不同的 UDP 流,每个流的帧速率为 25fps。Wireshark 表示数据包在 3000 到 10000 字节之间。

这是我对 avformat_open_input 的调用:

avformat_open_input(&formatContext, udpUrl.toStdString().c_str(), NULL, NULL)

在进行此调用时,formatContext 为 NULL,并且 udpUrl 的格式为“udp://ipaddress:port”。

如果有人能为我阐明这个问题,将不胜感激!

4

3 回答 3

1

当您尝试将 UDP 数据报读入太小的缓冲区时,就会发生该错误。由于 UDP 不保证交付,因此该数据包会根据实现被截断(或丢弃)。

快速浏览一下文档,您似乎可以将数据报大小指定为 URL 上的一个选项(请参阅第 6.16 节 UDP)

尝试将您的 URL 更改为: udp://ipaddress:port?buffer_size=10240

于 2012-03-22T21:10:14.033 回答
1

在深入挖掘之后,FFMPEG 似乎希望您在通过 UDP 流式传输原始 H.264 时首先将流编码为 MPEGTS。果然,将输出流编码为 MPEGTS 就可以了。

于 2012-03-30T15:53:03.467 回答
0

确保将buffer_sizepkt_size选项设置得足够大。

udp,因为任何其他协议(例如tcpsctp)都可以提供通用格式(so,,,mpegtsnutmkv或者您可以使用rtprtsp和分别耦合的格式

于 2015-04-02T18:20:42.480 回答