GStreamer opusdec:尝试解码Opus位流失败 首次发行

GStreamer opusdec:尝试解码Opus位流失败 首次发行,gstreamer,ogg,opus,Gstreamer,Ogg,Opus,我想使用gstreamer插件opusdec来解码Opus比特流。最终目的是使用appsrc和appsink作为输入/输出,在其周围制作胶水,以解码来自RTP数据包有效负载的20毫秒Opus数据包,并提供PCM样本 备注:我不能使用gstreamer rtpopusdepay 以下管道工程: gst-launch-1.0 filesrc location=testvector01.bit.opus!oggdemux! opusdec!假货 在我的最终应用程序中,我不希望OGG包含数据,因此我执行

我想使用gstreamer插件opusdec来解码Opus比特流。最终目的是使用appsrc和appsink作为输入/输出,在其周围制作胶水,以解码来自RTP数据包有效负载的20毫秒Opus数据包,并提供PCM样本

备注:我不能使用gstreamer rtpopusdepay

以下管道工程:

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

在我的最终应用程序中,我不希望OGG包含数据,因此我执行了以下操作:

1) 去封装Opus位流

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

这很有效。然后:

2) 解码Opus位流

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

我有以下错误:

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测试向量:

我的问题是: 在没有运输容器的情况下,使用gstreamer插件的正确方法是什么

使现代化 Gstreamer版本1.2.4

按照建议,我尝试在filesrc之后添加opusparse,但出现以下错误

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 ...
管道正在预滚动。。。
(gst-launch-1.0:5147):GStreamer警告**:
gstpad.c:4555:store\u sticky\u事件:sticky事件
顺序错误,在“流启动”之前有“上限”
(gst-launch-1.0:5147):GStreamer警告**:
gstpad.c:4555:store\u sticky\u事件:sticky事件
订购错误,在“流启动”管道预滚之前获得“caps”
... 正在将管道设置为播放。。。新时钟:GstAudioSinkClock
错误:来自元素/GstPipeline:pipeline0/gstopudec:opusdec0:
解码错误:-4其他调试信息:gstopudec.c(460):
opus_dec_chain_parse_data():
/GstPipeline:pipeline0/GstOpusDec:OPUSDC0执行在
0:00:00.063372478正在将管道设置为暂停。。。将管道设置为
准备好的正在将管道设置为空。。。释放管道。。。
GStreamer 1.8.1

以下管道

gst-launch-1.0 filesrc location=testvector01.bit.demux!天哪! opusdec!音频转换!阿尔萨斯辛

停在这里:

正在将管道设置为暂停。。。管道正在预滚

Gstreamer 1.13.1

gst-launch-1.0 filesrc location=testvector01.bit.demux!天哪! opusdec!阿尔萨斯辛

播放只会产生短暂的音频故障,而不会引发gstreamer错误

gst-launch-1.0 filesrc location=testvector01.bit.opus!oggdemux!天哪! opusdec!阿尔萨斯辛

播放不稳定,但未引发gstreamer错误

关于,

由于opusdec不知道它是什么格式,您需要在两者之间设置一个解析器(OpusSpaser),请尝试以下管道:

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


gstreamer 1.14.1运行良好

我在demuxed ogg文件上试用过,效果很好,你能附上你的文件吗?另外,您正在使用哪个版本的gstreamer(在1.8.3中测试)?看来你需要更新gstreamer了!如上所述,我使用1.2.4和1.8.1进行了测试。两者都失败了(不同的wya)。至少在1.2.4中,OpuSpaser似乎有缺陷。查找此线程的参考:在运行gstreamer 1.8.3版的ubuntu 16.0.4上测试testvector01.bit.opus,效果完美!不幸的是,你是对的,普拉巴卡尔。升级到1.13.1后,它就可以工作了。我还尝试单独升级libopus、opusparse和oped,但没有成功。如果有人有线索,那将是受欢迎的。
appsrc is-live=true do-timestamp=true name=audiosrc ! opusparse ! oggmux ! filesink location=test.ogg