首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GStreamer Tee (多路复用器)

GStreamer Tee (多路复用器)
EN

Stack Overflow用户
提问于 2012-11-14 00:27:25
回答 1查看 7K关注 0票数 4

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

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

代码语言:javascript
复制
                                             |->queue->matroskamux->filesink
v4l2src->videorate->videoscale->x264enc->tee-|
                                             |->queue->flvmux->filesink

这个假设是正确的吗?所有的队列都在正确的位置吗?这样的GStreamer命令会是什么样子呢?我对"Tees“这个概念有特别的问题。如何/在命令中启动它们,以及如何操作不同的T形路径。我在GStreamer文档中查找了"Tee“,但我仍然在应用它们时遇到了问题。

提前感谢!

编辑:好的,多亏了mreithub,我把它用在视频上了。以下是该命令目前的外观:

代码语言:javascript
复制
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

下面是我运行音频的尝试:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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.

但是对于这个,我得到了以下错误消息:

代码语言:javascript
复制
could not link queue1 to flvmux

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-14 09:04:21

当你想要在你的管道中有视频和音频时,这将会有点复杂(我想一张小图片可能会有帮助):

为了使gst-launch命令尽可能清晰,我将每个线性管道段放入一个命令行(第一行中的红色连接,然后是蓝色、绿色和黄色连接,最后是上图中黑色的排队内容):

代码语言:javascript
复制
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来尝试它,因为我还没有安装它,但是它应该可以同时适用于这两个系统。

编辑:完全重写了答案,包括音频支持,添加了管道图片(图片btw。是使用非常棒的GraphViz工具制作的)。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13364610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档