我正在尝试将视频流(来自我的网络摄像头)存储到 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
谢谢!