2013-06-05 71 views
2

我正在使用FFMPEG C++庫進行UDP流式傳輸的軟件工作。使用ffmpeg進行UDP流式傳輸 - overrun_nonfatal選項

FFMPEG(1.2)已實施並正在運行,但出現一些錯誤(採集崩潰並重新啓動)。該日誌顯示以下消息:

*循環緩衝區溢出。爲了避免,增加fifo_size URL選項。爲了在這種情況下生存下來,請使用overrun_nonfatal選項*

我在網上搜索了關於如何使用這個選項的文檔,但是我只在直接運行ffmpeg可執行文件時得到了有關如何使用的信息。

會有人知道如何在我的C++代碼來設置正確的選項: - FIFO_SIZE 增加 - 使用overrun_nonfatal選項

感謝

回答

9

同樣的選項在命令行或C++庫的作品,您需要修改UDP網址如下: 如果原始URL是這樣的:

udp://@239.1.1.7:5107 

添加FIFO_SIZE和超限參數如下:

"udp://@239.1.1.7:5107?overrun_nonfatal=1&fifo_size=50000000" 

請記住要用引號將URL轉義。

overrun_nonfatal = 1防止ffmpeg退出,它可以在大多數情況下恢復。

FIFO_SIZE = 5000採用的是50MB的UDP輸入緩衝區(默認爲5MB)

唯一文檔是源代碼: http://git.videolan.org/?p=ffmpeg.git;a=blob;f=libavformat/udp.c;h=5b5c7cb7dfc1aed3f71ea0c3e980be54757d3c62;hb=dd0a9b78db0eeea72183bd3f5bc5fe51a5d3f537

+0

你好,謝謝你的回答。我會看看,並會告訴你這是否有效。 –

3

我沒有足夠的信譽評論對方的回答,但如果我這樣做,我會說,學習在回答鏈接的源:根據線路

  • 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!