Как отправить данные из файла в элемент webrtcbin в gstreamer? - PullRequest
1 голос
/ 14 января 2020

Я новичок в 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 и аудио AA C. Я пробовал много комбинаций элементов, но это не работает. Не могли бы вы помочь мне исправить мой трубопровод?

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.
'''

Большое спасибо заранее.

1 Ответ

1 голос
/ 14 января 2020

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

enter image description here

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

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.
'''
...