Gstreamer pipeline несколько приемников к одному источнику

Ищете объяснение, как использовать именованные элементы в отношении мультиплексирования двух входов в одном модуле. Например, мультиплексирование аудио и видео в одном модуле mpegtsmux

gst-launch filesrc location = surround.mp4! decodebin name = dmux! очередь ! аудиоконвертировать! lamemp3enc dmux. ! очередь ! x264enc! mpegtsmux name = mux! очередь ! расположение файловой ссылки = out.ts

Вышеупомянутый конвейер дает соединение плагинов, как показано ниже

введите описание изображения здесь

Таким образом, он показывает, что звук не подключается к mpegtsmus.

Как изменить командную строку для мультиплексирования аудио и видео в mpegtsmux?

Спасибо!


person surge_    schedule 29.01.2015    source источник


Ответы (2)


Он не связан, потому что ваша линия запуска этого не делает. Обратите внимание, что элемент lamemp3enc не связан ниже по потоку.

Обновите строку запуска, чтобы:

gst-launch filesrc location = surround.mp4! decodebin name = dmux! очередь ! аудиоконвертировать! lamemp3enc! мультиплексор. dmux. ! очередь ! x264enc! mpegtsmux name = mux! очередь ! расположение файловой ссылки = out.ts

Единственное изменение - "! Mux". после lamemp3enc указать ему ссылку на mpegtsmux.

Во время обновления обратите внимание, что вы используете gstreamer 0.10, который давно устарел и не обслуживается, пожалуйста, обновитесь до серии 1.x, чтобы получить последние улучшения и исправления.

person thiagoss    schedule 30.01.2015

Я постараюсь изложить основную идею, хотя я не настолько разбираюсь в этом и могу ошибаться.

  • Трубопровод может состоять из нескольких суб-конвейеров. Если какой-либо элемент (bin) заканчивается не на канал (!), но с началом другого элемента, тогда это новый суб-конвейер: filesrc location=a.mp4 ! qtdemux name=demp4 demp4. ! something
  • Именованный bin (обычно мультиплексор) или его контактные площадки, например somedemux.audio_00, могут быть источником и / или приемником в других суб-конвейерах: demp4. ! queue ! decodebin ! x264enc ! mux.
  • Обычно суб-конвейер заканчивается именованным bin / muxer, либо объявленным: mpegtsmux name=mux, либо указанным по имени: mux. Точка в конце является синтаксисом ссылки.
  • Затем названный мультиплексор может быть направлен в приемник в еще одном суб-конвейере: mux. ! filesink location=out.ts
  • Если вы используете только единственный аудио- или видеопоток из источника, вам не нужно указывать контактную площадку, например muxname.audio_00. muxname. - это ярлык для "подходящей аудио / видео панели от muxname".

Пример

Тем не менее, я предполагаю, что ваш файл mp4 имеет как аудио, так и видео. В этом случае вам нужно сначала демультиплексировать его на 2 потока, декодировать, перекодировать, а затем обратно мультиплексировать.

Действительно, ваш звук не подключен к mpegtsmux.

Если вам действительно нужно декодировать потоки, я бы это сделал. Однако это не сработало для меня:

gst-launch-1.0 filesrc location=surround.mp4 ! \
  qtdemux name=demp4 \
  demp4. ! queue ! decodebin ! audioconvert ! lamemp3enc ! mpegtsmux name=mux \
  demp4. ! queue ! decodebin ! x264enc ! mux. \
  mux. ! filesink location=out.ts

или давайте использовать decodebin для волшебного декодирования обоих потоков:

gst-launch-1.0 filesrc location=surround.mp4 ! \
  decodebin name=demp4 \
  demp4. ! queue ! audioconvert ! lamemp3enc ! mpegtsmux name=mux \
  demp4. ! queue ! x264enc ! mux. \
  mux. ! filesink location=out.ts
person Victor Sergienko    schedule 30.01.2015
comment
спасибо за пояснения. Просто попробовали команды, но ничего не происходит. - person surge_; 04.02.2015