2012-11-13 32 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

哇,真是不可思议!非常感谢! –