解码UDP流与LibAV:没有足够的缓冲区大小
我试图使用libav库使用Qt为H.264视频UDP流进行解码,但是当我使用avformat_open_file,我收到以下错误信息:解码UDP流与LibAV:没有足够的缓冲区大小
[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:// IP地址:端口”。
如果有人能为我解释这个问题,将不胜感激!
了一下周围挖经过它看起来像FFMPEG希望你将流过UDP流原始H.264时,首先编码为MPEGTS。果然,将输出流编码为MPEGTS的确有诀窍。
祝贺修复!如果可以,请确保将答案标记为“已接受”,以便其他人会看到您的问题已得到解答,并能够从您的解决方案中学习。干杯〜 – 2012-03-30 16:12:59
啊,谢谢你的提醒! – 2012-03-30 21:45:27
你如何能够将输入流编码为MPEGTS?它也是ffmpeg的另一端,或者你在使用不同的库吗?或者,也许你在本地使用ffmpeg? – njahnke 2012-09-06 18:28:56
当您尝试将UDP数据报读取到太小的缓冲区时发生此错误。由于UDP不保证传送,因此根据实现情况,此数据包只会被截断(或丢弃)。
从快速浏览文档看来,您可以在网址(See section 6.16 UDP)上指定数据报大小作为选项。
试着改变你的网址是这样的:udp://ipaddress:port?buffer_size=10240
感谢您指向我的文档。这有很大帮助。尽管如此,我还是尝试了buffer_size的几个不同的值,没有任何改变。将pkt_size设置为大约10000会消除所有错误消息,但我仍然从UDP流中收到错误的数据。 – 2012-03-22 22:58:30
确保您将buffer_size
和pkt_size
选项设置得足够大。
udp
,因为任何其它协议(例如tcp
,sctp
)可以提供通用的格式(因此mpegts
,nut
,mkv
),也可以使用rtp
和rtsp
和分别耦合格式。
这也发生在RTSP流,没有解决方案似乎工作 – 2015-03-13 11:21:43