我正在尝试使用带有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”。
如果有人可以为我解释这个问题,我将不胜感激!
答案 0 :(得分:1)
当您尝试将UDP数据报读入太小的缓冲区时,会发生该错误。由于UDP不保证传递,因此根据实现情况,该数据包会被截断(或丢弃)。
通过快速查看文档,您可以在网址(See section 6.16 UDP)上指定数据报大小作为选项。
尝试将您的网址更改为:udp://ipaddress:port?buffer_size=10240
答案 1 :(得分:1)
在进行了更多挖掘后,看起来FFMPEG希望您在通过UDP流式传输原始H.264时首先将流编码为MPEGTS。果然,将输出流编码为MPEGTS就可以了。
答案 2 :(得分:0)
确保将buffer_size
和pkt_size
选项设置得足够大。
udp
,因为任何其他协议(例如tcp
,sctp
)都可以提供通用格式(因此mpegts
,nut
,mkv
)或者您可以使用rtp
和rtsp
以及相应的格式。