Зависимости элементов GStreamer: Как подключить playbin к hlssink?

1

Я новичок в GStreamer и пытаюсь создать несколько простых конвейеров, используя gst-launch-1.0. Мне трудно понять, какие элементы должны идти вместе. Например, я хочу передать потоковое видео в веб-тег HTML5 в браузере. Чтобы открыть и прочитать файл, я думаю, что мне нужно использовать playbin:

gst-launch-1.0 playbin uri=file:///home/ubuntu/g-streamer-lively/skyrim.webm ...

Затем, чтобы сделать файл доступным, я использую hlssink:

! hlssink max-files=5  playlist-root=http://10.12.9.3/ location=/var/www/html/hlssink.webm

Затем в своем браузере я использую тег видео:

<video src="http://10.12.9.3/hlssink.webm" controls>

Так что этот конвейер не запустится, и я получаю следующую ошибку:

WARNING: erroneous pipeline: could not link playbin0 to hlssink0

Так что это говорит мне, что я не могу связать эти два элемента. Хорошо, но где я могу найти другие элементы, которые нужно включить в мой конвейер, чтобы эта работа работала?

Заранее спасибо.

Przemek Lach
источник

Ответы:

0

Я полагаю, вам следует остановиться и немного прочесть документацию gstreamer, чтобы понять, как это работает. GStreamer - это фреймворк для построения графа для обработки данных. Вы можете найти руководство здесь: http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/index.html

Playbin - это особый элемент (мусорное ведро), и он соберет для вас внутренний конвейер. Playbin не будет открывать никаких связывающих площадок, так как он предназначен для создания полноценного конвейера воспроизведения, поэтому вы не можете связать его с hlssink.

Вы можете использовать другие элементы для создания конвейера для перекодировки вашего webm-входа в hlssink, например, вы можете использовать uridecodebin, который является другим bin-модулем, который автоматически создаст конвейер декодирования для любого носителя, который вы используете (при условии, что у вас есть соответствующие плагины ). Что-то вроде:

gst-launch-1.0 uridecodebin uri=<youruri> name=decbin ! queue ! videoconvert ! x264enc ! tsmux name=muxer ! hlssink decbin. ! queue ! audioconvert ! faac ! muxer.

Я не проверял это, но что-то подобное должно работать для преобразования вашего ввода в mpegts с использованием H264 и AAC, например, и передачи данных для hlssink.

Чтобы проверить, какие элементы есть в вашей системе, используйте инструмент gst-inspect-1.0. В нем будут перечислены все элементы, если вы не дадите ему аргумент или не предоставите подробную информацию о конкретном элементе, если вы дадите ему один, например:

gst-inspect-1.0 hlsssink

РЕДАКТИРОВАТЬ: исправить трубопровод, который вы предложили в комментариях

gst-launch-1.0 uridecodebin uri=file:///home/ubuntu/g-streamer-lively/skyrim.webm name=decbin ! queue ! videoconvert ! x264enc ! mpegtsmux name=muxer ! hlssink max-files=5 playlist-root=10.12.9.3 location=/var/www/html/hlssink decbin. ! queue ! audioconvert ! avenc_aac ! muxer.
thiagoss
источник
Итак, я прочитал документацию раньше, но мне все еще трудно разобраться в порядке элементов. Возможно, это потому, что у меня нет опыта в редактировании видео / аудио, поэтому я не совсем понимаю процесс. Если я просто хочу транслировать файл .webm, почему я должен делать такие вещи, как видеоконверт, x264enc и т. Д. Я могу предоставить файл .webm напрямую в свой браузер через apache, почему мне нужно использовать эти дополнительные элементы gstreamer для простого перемещения файл через простой конвейер?
Przemek Lach
Я попытался использовать ваш конвейер и мне пришлось изменить несколько вещей: gst-launch-1.0 uridecodebin uri = file: ///home/ubuntu/g-streamer-lively/skyrim.webm name = decbin! очередь ! видеоконвертер! x264enc! mpegtsmux name = muxer! hlssink decbin. ! очередь ! аудиоконвертировать! avenc_aac! мультплексор. ! hlssink max-files = 5 playlist-root = 10.12.9.3 местоположение = / вар / WWW / HTML / hlssink.webm. Теперь, когда я пытаюсь начать, я получаю сообщение об ошибке: ПРЕДУПРЕЖДЕНИЕ: ошибочный конвейер: ссылка без исходного элемента.
Przemek Lach
Вы не «двигаете» файл через конвейер, он будет обрабатываться на каждом узле. Когда вы используете uridecodebin, он будет демультиплексировать и декодировать ваш входной файл, при условии, что у вас есть как видео, так и аудио, вы получите 2 выхода из него. Каждый из них перекодируется с новым форматом для слияния в mpegts, который обычно используется по протоколу HLS, который вы хотели использовать.
thiagoss
Ваш конвейер неверен, созданы два экземпляра hlssink, и я не уверен, что вы понимаете, что такое HLS и как он работает по выбранным вами параметрам. HLS создаст список воспроизведения небольших файлов, которые будут загружаться и воспроизводиться последовательно.
thiagoss
Привет, спасибо за редактирование. Я попробовал ваш новый конвейер и получил следующую ошибку: ОШИБКА: от элемента / GstPipeline: pipeline0 / avenc_aac: avenc_aac0: Кодек экспериментальный, но настройки не позволяют кодировщикам производить вывод экспериментального качества. Я пытался выяснить, где я могу установить «экспериментальное качество», но не смог его найти. Я пропускаю флаг или что-то?
Przemek Lach