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

Другие вопросы по тегам