【问题标题】:GStreamer Tee (Multiple Multiplexer)GStreamer Tee(多路复用器)
【发布时间】:2012-11-02 02:38:39
【问题描述】:

我正在尝试将视频流(来自我的网络摄像头)存储到 MKV 和 FLV 文件中。这意味着我必须在 h264 编码之后拆分视频和音频管道,并使用不同的复用器复用每个路径。

这就是我想象的应该如何工作:

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

这个假设正确吗?所有的队列都在正确的地方吗?像这样的 GStreamer 命令会是什么样子?我在“三通”的概念上遇到了特别麻烦。如何/在何处在命令中启动它们以及如何操作不同的 Tee-Path。我在 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 中的音频进行编码(对吗?)。但我只想对音频进行一次编码,然后相应地在两个管道路径中混合它。

这是另一个尝试:在音频编码之后,我使用 Tee 拆分管道并将其分配给 mkvmuxer 和 flvmuxer:

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

谢谢!

【问题讨论】:

    标签: ffmpeg gstreamer tee mux


    【解决方案1】:

    由于您需要管道中的视频和音频,这会有点复杂(我认为一张小图片可能会有所帮助):

    为了使 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,因为我没有安装它,但它应该适用于它们。

    编辑:完全重写了答案,包括音频支持,添加了一个管道图片(顺便说一句,图片是使用很棒的 GraphViz 工具制作的)。

    【讨论】:

    • 感谢 mreithub!在您的帮助下,我设法让视频运行,但我也尝试将音频集成到其中。如我编辑的帖子中所述,我在这样做时遇到了麻烦。你知道如何有效地整合它吗?
    • @user1595257 我刚刚重写了我的完整答案,包括音频支持(希望你喜欢这张照片;))
    • Windows 上当前版本 gstreamer 的命令行:gst-launch-1.0.exe dxgiscreencapsrc !队列 !视频转换! x264enc !三通名称=videoTee directsoundsrc !队列 !音频转换! avenc_aac !三通名称=audioTee flvmux 名称=flvMux !文件接收器位置=test.flv matroskamux 名称=mkvMux !文件接收器位置=test.mkv audioTee。 !队列 ! flv多路复用器。音频三通。 !队列 ! mkvMux。视频三通。 !队列 ! flv多路复用器。视频三通。 !队列 ! mkvMux.
    猜你喜欢
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 2020-07-11
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多