2012-11-13 33 views
4

我試圖將視頻流(來自我的攝像頭)存儲到MKV和FLV文件中。這意味着我必須在h264編碼之後拆分視頻和音頻流水線,並用不同的複用器複用每條路徑。GStreamer三通(多路複用器)

這是我想象它應該工作:

           |->queue->matroskamux->filesink 
v4l2src->videorate->videoscale->x264enc->tee-| 
              |->queue->flvmux->filesink 

這是假設是正確的?所有的隊列都在正確的地方嗎?這樣的GStreamer命令如何看起來像?我對「Tees」的概念特別麻煩。在一個命令中如何/在哪裏啓動它們以及如何操作不同的Tee路徑。我在GStreamer文檔中查找了「Tee」,但我仍然遇到了應用它們的麻煩。

在此先感謝!

編輯:好吧,感謝mreithub我知道它爲視頻工作。這是命令怎麼看起來像現在:

gst-launch-0.10 -v -m v4l2src ! videorate ! videoscale ! ffmpegcolorspace ! x264enc ! tee name=muxtee ! queue2 ! matroskamux name=mkvmux ! filesink location=file1.mkv muxtee. ! queue ! flvmux name=flvmux ! filesink location=file1.flv 

這是我試圖讓聲音運行:

gst-launch-0.10 -v -m v4l2src ! videorate ! videoscale ! ffmpegcolorspace ! x264enc ! tee name=muxtee ! queue2 ! matroskamux name=mkvmux pulsesrc ! ffenc_aac ! filesink location=file1.mkv muxtee. ! queue ! flvmux name=flvmux pulsesrc ! ffenc_aac ! filesink location=file1.flv 

這不起作用(命令執行,但會立即停止 - 沒有錯誤消息)。但是,我也無法確定放置音頻編碼的位置。在我嘗試的解決方案中,我在每個Tee-Pipeline中編碼音頻(對吧?)。但是,我只想對音頻編碼一次,然後將其複用到兩個流水線路徑中。

這裏的另一種嘗試:將音頻編碼後,我用T恤,並將其分配給mkvmuxer和flvmuxer分裂pipleine:

gst-launch-0.10 -v -m v4l2src ! videorate ! videoscale ! ffmpegcolorspace ! x264enc ! tee name=muxtee ! queue2 ! matroskamux name=mkvmux ! filesink location=file1.mkv muxtee. ! queue ! flvmux name=flvmux ! filesink location=file1.flv pulsesrc ! ffenc_aac ! tee name=t2 ! queue ! mkvmux. t2. ! queue ! flvmux. 

但是這一個我收到以下錯誤信息:

could not link queue1 to flvmux 

謝謝!

回答

16

當你想在你的管道視頻和音頻,這將是一個有點複雜(我認爲有點PIC可能幫助): GraphViz diagram showing the resulting pipeline

爲了保持GST-launch命令儘可能明確,我把每個線性管道片到一個命令行(在第一行中的紅色的連接,則該藍色,綠色和黃色的和最後的排隊的東西,其在上述圖像着色爲黑色):

gst-launch-0.10 v4l2src ! videorate ! videoscale ! x264enc ! tee name=videoTee \ 
    pulsesrc ! ffenc_aac ! tee name=audioTee \ 
    flvmux name=flvMux ! filesink location=/tmp/foo.flv \ 
    matroskamux name=mkvMux ! filesink location=/tmp/foo.mkv \ 
    audioTee. ! queue ! flvMux. \ 
    audioTee. ! queue ! mkvMux. \ 
    videoTee. ! queue ! flvMux. \ 
    videoTee. ! queue ! mkvMux. 

只是最後一個注意:我用lame而不是ffenc_aac,因爲我沒有安裝它,但它應該與它們一起工作。

編輯:完全重寫包括音頻支持的答案,添加了一個管道圖片(pic btw。是使用真棒GraphViz工具製作的)。

+0

謝謝mreithub!在你的幫助下,我設法讓視頻運行,但我試圖將音頻集成到它中。我遇到了麻煩,正如我編輯的文章中所述。你有一個想法如何有效地融入? –

+0

@ user1595257我剛剛重寫了我的完整答案,以包括音頻支持(希望你喜歡這張圖片)) – mreithub

+0

哇,真是不可思議!非常感謝! –