Как отправить данные из файла в элемент webrtcbin в gstreamer?

Я новичок в gstreamer, так что потерпите меня.

У меня есть рабочий конвейер, в котором аудио и видео из тестового источника отправляются в элемент webrtcbin, используемый для отправки предложения. Трубопровод выглядит следующим образом:

PIPELINE_DESC = '''
webrtcbin name=sendrecv stun-server=stun://stun.l.google.com:19302
 audiotestsrc is-live=true wave=red-noise ! audioconvert ! audioresample ! queue ! opusenc ! rtpopuspay !
 queue ! application/x-rtp,media=audio,encoding-name=OPUS,payload=96 ! sendrecv.
 videotestsrc is-live=true pattern=ball ! video/x-raw,width=320,height=240 ! videoconvert ! queue ! x264enc ! rtph264pay !
 queue ! application/x-rtp,media=video,encoding-name=H264,payload=97 ! sendrecv.
'''

Однако это требует много ресурсов ЦП / памяти, поскольку gstreamer должен кодировать аудио / видео. Следовательно, я должен был использовать предварительно записанный файл, чтобы снизить потребление ресурсов.

Я хочу использовать образец файла (sample.mp4) для отправки аудио и видео в элемент webRTCbin. Файл mp4 содержит видео H264 и аудио AAC. Я пробовал много комбинаций элементов, но это не работает. Не могли бы вы помочь мне исправить мой пайплайн?

PIPELINE_DESC = '''
webrtcbin name=sendrecv stun-server=stun://stun.l.google.com:19302
 filesrc location=sample.mp4 ! decodebin ! audioconvert ! sendrecv.
 filesrc location=sample.mp4 ! decodebin ! videoconvert ! sendrecv.
'''

Спасибо заранее.


person Mayank    schedule 13.01.2020    source источник


Ответы (1)


Файл mp4 - это формат файла-контейнера, и его необходимо демультиплексировать для получения видео и аудио. Для этого вы можете использовать элемент qtdemux в GStreamer. .

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

Учитывая вышесказанное, пример конвейера может быть примерно таким

PIPELINE_DESC = '''
filesrc location=test.mp4 ! qtdemux name=demux
webrtcbin name=sendrecv stun-server=stun://stun.l.google.com:19302
demux.audio_%u ! aacparse ! rtpmp4apay !
queue ! application/x-rtp,media=audio,encoding-name=MP4A-LATM,payload=96 ! sendrecv.
demux.video_%u ! h264parse ! rtph264pay !
queue ! application/x-rtp,media=video,encoding-name=H264,payload=97 ! sendrecv.
'''
person Dusan Kovacevic    schedule 14.01.2020
comment
Привет, Душан, спасибо за ваш вклад. Я изменил% u на 0, и вышеуказанный конвейер работает. Однако я хочу, чтобы в приемник sendrecv отправлялся бесконечный поток аудио / видео, поэтому можно ли пройти через test.mp4 для генерации бесконечного потока. Кроме того, указанный выше конвейер по-прежнему потребляет много ресурсов ЦП. Что вызывает это, это демультиплексор или rtpmp4apay / rtph264pay? Если это демультиплексирование, можно ли этого избежать, используя предварительно демультиплексированные тестовые файлы, например. test.aud и test.vid? Не могли бы вы поделиться, например, такого конвейера, который включает цикл и не потребляет много ресурсов ЦП. Спасибо. - person Mayank; 14.01.2020
comment
Исправление, с demux.audio_0 и demux.video_0 работает только видео. Аудио не работает. Сообщите, пожалуйста, какое значение нужно использовать для% u для аудио и видео. - person Mayank; 15.01.2020
comment
@Mayank 1. Зацикливание - попробуйте это SO Q / A , 2. Не может сильно помочь с загрузкой ЦП, так как на нее могут повлиять многие факторы. Попробуй поменять webrtcbin на какой-нибудь другой сток, попробуй уменьшить разрешение видео ... и наблюдай. 3. Что означает неработающий звук? Предоставьте дополнительные сведения (например, отладка Gstreamer и т. Д.) - person Dusan Kovacevic; 15.01.2020