GStreamer opusdec: Try decode Opus bitstream failed

Initial Issue

I would like to use gstreamer plugin opusdec to decode an Opus bitstream . The final purpose is to make glue around it with appsrc and appsink as input/output, to decode 20 ms Opus packets coming from a RTP packet payload and provide PCM sample.

Remark: I can't use gstreamer rtpopusdepay

The following pipeline works:

gst-launch-1.0 filesrc location=testvector01.bit.opus ! oggdemux ! opusdec ! fakesink

In my final application I'm no expected OGG contained data so I did the following:

1) Desencapsulate Opus bitstream

gst-launch-1.0 filesrc location=testvector01.bit.opus ! oggdemux ! filesink location = testvector01.bit.demux

That works. And then:

2) Decode Opus bitstream

gst-launch-1.0 filesrc location=testvector01.bit.demux ! opusdec ! fakesink

and I have the following error:

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

Input File

testvector01.bit.opus From Opus test vector :https://people.xiph.org/~greg/opus_testvectors/

My question is: What is the proper way to use gstreamer plugin opusec without transport container?

Update

Gstreamer version 1.2.4

As recommended I tried to add opusparse after filesrc and got the following error.

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

The following pipeline

gst-launch-1.0 filesrc location = testvector01.bit.demux ! opusparse ! opusdec ! audioconvert ! alsasink

halt here:

Setting pipeline to PAUSED ... Pipeline is PREROLLING ...

Gstreamer 1.13.1

gst-launch-1.0 filesrc location = testvector01.bit.demux ! opusparse ! opusdec ! alsasink

Playback just produce a short audio glitch while no gstreamer error is raised.

gst-launch-1.0 filesrc location = testvector01.bit.opus ! oggdemux ! opusparse ! opusdec ! alsasink

Playback is choppy while no gstreamer error is raised.

Regards,


You need to have a parser (opusparse) in between as opusdec doesn't know what format it is, try the following pipeline:

gst-launch-1.0 filesrc location=testvector01.bit.demux ! opusparse ! opusdec ! fakesink dump=true

链接地址: http://www.djcxy.com/p/43932.html

上一篇: 无损压缩的JPEG gstreamer元素?

下一篇: GStreamer opusdec:尝试解码Opus比特流失败