2013-04-25 79 views
1

我正在尋找在我的C代碼中複製FFmpeg命令行命令。具體來說,我想能夠運行:C - FFmpeg流媒體從C程序?

ffmpeg -re -i video.mp4 -f mpegts udp://localhost:7777 

有一件事我一直在尋找誰使用的FFmpeg的庫在自己的代碼別人的代碼時,注意到的是,他們往往有幾百行代碼用於一個類似於FFmpeg命令行命令的單個命令。我猜這只是因爲他們正在做一些非常具體的事情,因爲如果我可以在命令行上運行這個簡短的命令並獲得我想要的東西,那麼應該只需要大約十行代碼就可以在C中執行相同的操作碼。這應該只是做了很多工作吧?爲什麼它需要更多?

我有點難以找到解釋如何使用FFmpeg庫的流功能,因爲它們是爲了一個非常特定的目的而不是過於複雜。任何人都可以解釋我可能會如何編寫上述命令的代碼?或者至少我有一些文件解釋如何編寫這樣的腳本/程序?非常感謝!

編輯:我希望最終從iPhone應用程序運行這個,所以我不會直接從我的程序調用FFmpeg。我需要使用FFmpeg使用的庫。

+0

嗨,只是出於好奇,爲什麼不通過系統調用調用應用程序。它不會起作用嗎? – ransh 2015-04-15 17:43:49

+0

@ransh:對不起,我的最後一個「編輯」段落解釋了爲什麼,雖然對於沒有爲iPhone開發的人來說,沒有,但我想我應該解釋推理。 iPhone軟件被沙盒化(出於各種原因),因此無法進行系統調用或將自己的軟件安裝到系統中。所以在我的情況下(以及處於類似限制的情況下的人),該計劃必須是獨立的。 – golmschenk 2015-04-15 18:04:28

回答

4

FFmpeg的內部庫(libavcode,libavformat等等)具有非常複雜的代碼結構。您需要時間來了解基本事物的工作原理,然後您應該嘗試編寫一些簡單的測試應用程序,只有這樣您才能夠複製給定的命令。

quitea fewtutorials如何使用FFmeg的庫(其中一些使用過時的API),請檢查「doc/examples」目錄中的演示代碼。

希望它有幫助!

從評論:
檢查例子/從最新FFmpeg的版本muxing.c來源。嘗試提供一個URL而不是輸出文件。檢查avformat_alloc_output_context2()函數的文檔/來源。那麼你應該得到如何添加流支持的基本思想

+0

感謝您的回覆。我已經瀏覽了大部分教程,但我沒有看到關於其中的流媒體的任何內容。你有什麼例子嗎?謝謝。 – golmschenk 2013-04-26 12:48:15

+0

從您的角度來看,「流式傳輸」與將數據寫入輸出文件相同。 libavformat爲輸入/輸出操作提供了一個透明的API(檢查avio.h頭文件)。 – Paul 2013-04-26 13:01:22

+0

好的。我想這是有道理的。它的一個例子仍然是有用的,但是這對於知道這一點很重要。 – golmschenk 2013-04-26 13:03:12