我正在尝试构建一个 gstreamer 管道以使用 iLBC 编解码器创建 RTP 音频流。Gstreamer(从 0.10 版开始)有一个名为rtpilbcpay
. 不幸的是,只实现了 RTP 打包,编解码器本身不包含在 gstreamer 中。使用 RFC 3951 中的参考代码,我为我希望能够与 gstreamer 一起使用的示例音频创建了 iLBC 编码文件。但是,当我将这些文件导入时,rtpilbcpay
我最终会遇到错误。我使用 将管道“愚蠢”到最低限度fakesink
,错误仍然相同:
~/tmp% gst-launch-0.10 filesrc location=sample.ilbc ! rtpilbcpay ! fakesink
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
ERROR: from element /GstPipeline:pipeline0/GstRTPILBCPay:rtpilbcpay0: Element doesn't implement handling of this stream. Please file a bug.
Additional debug info:
gstbasertpaudiopayload.c(909): gst_base_rtp_audio_payload_handle_buffer (): /GstPipeline:pipeline0/GstRTPILBCPay:rtpilbcpay0:
subclass did not configure us properly
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
Freeing pipeline ...
我可能在管道中遗漏了一个关键部分(文件格式声明?),因为我同样无法播放 PCMU 编码文件(queue
缓冲区也没有帮助):
~/tmp% gst-launch-0.10 filesrc location=sample.pcmu ! mulawdec ! fakesink
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
ERROR: from element /GstPipeline:pipeline0/GstFileSrc:filesrc0: Internal data flow error.
Additional debug info:
gstbasesrc.c(2550): gst_base_src_loop (): /GstPipeline:pipeline0/GstFileSrc:filesrc0:
streaming task paused, reason not-negotiated (-4)
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
Freeing pipeline ...
这只是一个错误还是管道设置错误(我希望是后者)?我在管道中还需要哪些“胶水”元素?