GStreamer opusdec: Попробовать декодировать битовый поток Opus не удалось
Первый выпуск
Я хотел бы использовать плагин gstreamer opusdec для декодирования потока битов Opus. Конечная цель состоит в том, чтобы склеить его с помощью appsrc и appsink в качестве ввода / вывода, декодировать 20-миллисекундные пакеты Opus, поступающие из полезной нагрузки RTP-пакетов, и предоставлять образец PCM.
Примечание: я не могу использовать gstreamer rtpopusdepay
Работает следующий трубопровод:
gst-launch-1.0 filesrc location = testvector01.bit.opus! oggdemux! опусдек! fakesink
В моем последнем заявлении я не ожидал, что OGG содержал данные, поэтому я сделал следующее:
1) Дезенкапсулированный битум Opus
gst-launch-1.0 filesrc location=testvector01.bit.opus! oggdemux! fileink location = testvector01.bit.demux
Это работает. А потом:
2) Расшифровать битум Opus
gst-launch-1.0 filesrc location=testvector01.bit.demux! опусдек! fakesink
и у меня есть следующая ошибка:
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
ERROR: from element /GstPipeline:pipeline0/GstFileSrc:filesrc0: Internal data flow error.
Additional debug info:
gstbasesrc.c(2865): gst_base_src_loop (): /GstPipeline:pipeline0/GstFileSrc:filesrc0:
streaming task paused, reason error (-5)
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
Freeing pipeline ..
Входной файл
testvector01.bit.opus Из тестового вектора Opus: https://people.xiph.org/~greg/opus_testvectors/
Мой вопрос:как правильно использовать плагин gstreamer opusec без транспортного контейнера?
Обновить
Gstreamer версия 1.2.4
В соответствии с рекомендациями я попытался добавить opusparse после filesrc и получил следующую ошибку.
Pipeline is PREROLLING ...
(gst-launch-1.0:5147): GStreamer-WARNING **:
gstpad.c:4555:store_sticky_event:<opusparse0:src> Sticky event
misordering, got 'caps' before 'stream-start'
(gst-launch-1.0:5147): GStreamer-WARNING **:
gstpad.c:4555:store_sticky_event:<opusdec0:sink> Sticky event
misordering, got 'caps' before 'stream-start' Pipeline is PREROLLED
... Setting pipeline to PLAYING ... New clock: GstAudioSinkClock
ERROR: from element /GstPipeline:pipeline0/GstOpusDec:opusdec0:
Decoding error: -4 Additional debug info: gstopusdec.c(460):
opus_dec_chain_parse_data ():
/GstPipeline:pipeline0/GstOpusDec:opusdec0 Execution ended after
0:00:00.063372478 Setting pipeline to PAUSED ... Setting pipeline to
READY ... Setting pipeline to NULL ... Freeing pipeline ...
GStreamer 1.8.1
Следующий конвейер
gst-launch-1.0 filesrc location=testvector01.bit.demux! опуспарсе! опусдек! аудиоконвертировать! alsasink
остановка здесь:
Установка конвейера в состояние PAUSED ... Трубопровод прервал...
Gstreamer 1.13.1
gst-launch-1.0 filesrc location=testvector01.bit.demux! опуспарсе! опусдек! alsasink
Воспроизведение просто производит короткий аудио сбой, пока не возникает ошибка gstreamer.
gst-launch-1.0 filesrc location = testvector01.bit.opus! oggdemux! опуспарсе! опусдек! alsasink
Воспроизведение прерывистое, пока не возникла ошибка gstreamer.
С Уважением,
1 ответ
appsrc is-live=true do-timestamp=true name=audiosrc ! opusparse ! oggmux ! filesink location=test.ogg
gstreamer 1.14.1 работает нормально
Вы должны иметь анализатор (opusparse) между ними, так как opusdec не знает, в каком он формате, попробуйте следующий конвейер:
gst-launch-1.0 filesrc location = testvector01.bit.demux! опуспарсе! опусдек! fakesink dump=true