UDP流与ffmpeg - overrun_nonfatal选项

Jul*_*ard 2 c++ udp ffmpeg video-streaming

我正在研究一种使用FFMPEG C++库从UDP流式传输获取的软件.

FFMPEG(1.2)已实现并正在运行,但我遇到了一些错误(采集崩溃和重启).该日志显示以下消息:

*循环缓冲区溢出.要避免,请增加fifo_size URL选项.要在这种情况下生存,请使用overrun_nonfatal选项*

我在网上搜索了有关如何使用此选项的文档,但我只获得了有关如何在直接运行ffmpeg可执行文件时使用的信息.

有人知道如何在我的C++代码中设置正确的选项: - 增加fifo_size - 使用overrun_nonfatal选项

谢谢

Gra*_*ant 11

相同的选项适用于命令行或C++库,您需要修改UDP URL,如下所示:如果原始URL如下所示:

udp://@239.1.1.7:5107
Run Code Online (Sandbox Code Playgroud)

像这样添加fifo_size和overrun参数:

"udp://@239.1.1.7:5107?overrun_nonfatal=1&fifo_size=50000000"
Run Code Online (Sandbox Code Playgroud)

请记住使用引号转义URL.

overrun_nonfatal = 1阻止ffmpeg退出,它可以在大多数情况下恢复.

fifo_size = 50000000使用50MB udp输入缓冲区(默认5MB)

唯一的文档在源代码中:http: //git.videolan.org/?p = fmpeg.git; a = blob; f = libavformat/rup.c; h = 5b5c7cb7dfc1aed3f71ea0c3e980be54757d3c62; hb =dd0a9b78db0eeea72183bd3f5bc5fe51a5d3f537


der*_*rke 7

我没有足够的声誉评论其他答案,但如果我这样做,我会说研究答案中链接的来源:

  • fifo_size 根据以下行测量为188字节(数据包)的倍数:

    s-> circular_buffer_size = strtol(buf,NULL,10)*188;

  • 所以虽然格兰特大致正确的"默认5MB",因为这条线:

    s-> circular_buffer_size = 7*188*4096;

如果你想要一个50MB的循环缓冲区,你应该把fifo_size参数设置得更接近,50*1024*1024/188否则50000000会得到50000000*188更接近8965MB的字节!