Я пытаюсь сохранить видеопоток (исходящий с моей веб-камеры) в файл MKV и FLV. Это означает, что я должен разделить видео- и аудиоконвейер после кодирования h264 и мультиплексировать каждый путь с помощью другого мультиплексора.
Вот как я представляю, что это должно работать:
|->queue->matroskamux->filesink
v4l2src->videorate->videoscale->x264enc->tee-|
|->queue->flvmux->filesink
Верно ли это предположение? Все ли очереди в правильных местах? Как будет выглядеть такая команда GStreamer? У меня особенно проблемы с концепцией "Tees". Как/где их запускать в команде и как манипулировать разными Tee-Paths. Я искал «Tee» в документации GStreamer, но у меня все еще есть проблемы с их применением.
Заранее спасибо!
РЕДАКТИРОВАТЬ: Хорошо, благодаря 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
Это не работает (команда выполняется, но сразу останавливается - нет сообщения об ошибке). Но у меня также возникают проблемы с определением места, где разместить кодировку звука. В моем предпринятом решении я кодирую звук в каждом тройнике (правильно?). Но я хотел бы кодировать звук только один раз, а затем просто мультиплексировать его в обоих конвейерных путях соответственно.
Вот еще одна попытка: после кодирования звука я разделяю конвейер с помощью тройника и назначаю его 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
Спасибо!