GStreamer Tee(多路复用器)

2024-03-20

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

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

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

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

这是另一个尝试:在音频编码之后,我使用 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

Thanks!


As you want video and audio in your pipeline, it is going to be a little complicated (I thought a little pic might help): 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因为我没有安装它,但它应该可以与它们一起使用。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GStreamer Tee(多路复用器) 的相关文章

随机推荐