使用Gstreamer接收音频流导致原因没有协商错误

时间:2018-01-12 07:26:03

标签: audio gstreamer multicast gstreamer-1.0

我想通过Gstreamer从MIC流式传输音频数据。 但是我无法用rx播放MIC音频。 如何播放MIC输入的音频流?

  

tx:gst-launch-1.0 -v alsasrc device =" hw:0" ! decodebin! audioconvert   ! rtpL16pay!排队! udpsink host = 239.0.0.1 auto-multicast = true   端口= 5004

     

rx:gst-launch-1.0 udpsrc multicast-group = 239.0.0.1 port = 5004   帽="应用程序/ x-RTP" ! rtpL16depay! alsasink

     

rx结果:将管道设置为PAUSED ...管道是实时的   不需要PREROLL ...将管道设置为PLAYING ...新时钟:   GstSystemClock错误:来自元素   / GstPipeline:pipeline0 / GstUDPSrc:udpsrc0:内部数据流错误。   其他调试信息:   ../../../../gstreamer-1.8.1/libs/gst/base/gstbasesrc.c(2948):   gst_base_src_loop():/ GstPipeline:pipeline0 / GstUDPSrc:udpsrc0:   流媒体任务暂停,原因未协商(-4)执行结束   在0:00:00.009364000之后将管道设置为PAUSED ...设置   管道到READY ...将管道设置为NULL ...释放管道   ...

结果如下。

  

将管道设置为PAUSED ...管道是实时的,不需要   PREROLL ...将管道设置为PLAYING ...新时钟:   GstAudioSrcClock / GstPipeline:pipeline0 / GstAlsaSrc:alsasrc0:   实际缓冲时间= 200000   / GstPipeline:pipeline0 / GstAlsaSrc:alsasrc0:actual-latency-time =   10000 /GstPipeline:pipeline0/GstAlsaSrc:alsasrc0.GstPad:src:caps =   " audio / x-raw \,\ format \ =(string)S16LE \,\   layout \ =(string)interleaved \,\ rate \ =(int)44100 \,\   channels \ =(int)2 \,\ channel-mask \ =(bitmask)0x0000000000000003"   /GstPipeline:pipeline0/GstDecodeBin:decodebin0.GstGhostPad:sink.GstProxyPad:proxypad0:   caps =" audio / x-raw \,\ format \ =(string)S16LE \,\   layout \ =(string)interleaved \,\ rate \ =(int)44100 \,\   channels \ =(int)2 \,\ channel-mask \ =(bitmask)0x0000000000000003"   /GstPipeline:pipeline0/GstDecodeBin:decodebin0/GstTypeFindElement:typefind.GstPad:src:   caps =" audio / x-raw \,\ format \ =(string)S16LE \,\   layout \ =(string)interleaved \,\ rate \ =(int)44100 \,\   channels \ =(int)2 \,\ channel-mask \ =(bitmask)0x0000000000000003"   重新分配延迟......   /GstPipeline:pipeline0/GstAudioConvert:audioconvert0.GstPad:src:cap   =" audio / x-raw \,\ layout \ =(string)interleaved \,\ rate \ =(int)44100 \,\ format \ =(string)S16BE \,\ channels \ =(int)2 \,\   通道掩模\ =(位掩码)0x0000000000000003"   /GstPipeline:pipeline0/GstRtpL16Pay:rtpl16pay0.GstPad:src:caps =   " application / x-rtp \,\ media \ =(string)audio \,\   clock-rate \ =(int)44100 \,\ encoding-name \ =(string)L16 \,\   encoding-params \ =(string)2 \,\ channels \ =(int)2 \,\   payload \ =(int)96 \,\ ssrc \ =(uint)3961155089 \,\   timestamp-offset \ =(uint)725507323 \,\ seqnum-offset \ =(uint)20783"   /GstPipeline:pipeline0/GstQueue:queue0.GstPad:src:caps =   " application / x-rtp \,\ media \ =(string)audio \,\   clock-rate \ =(int)44100 \,\ encoding-name \ =(string)L16 \,\   encoding-params \ =(string)2 \,\ channels \ =(int)2 \,\   payload \ =(int)96 \,\ ssrc \ =(uint)3961155089 \,\   timestamp-offset \ =(uint)725507323 \,\ seqnum-offset \ =(uint)20783"   /GstPipeline:pipeline0/GstUDPSink:udpsink0.GstPad:sink:caps =   " application / x-rtp \,\ media \ =(string)audio \,\   clock-rate \ =(int)44100 \,\ encoding-name \ =(string)L16 \,\   encoding-params \ =(string)2 \,\ channels \ =(int)2 \,\   payload \ =(int)96 \,\ ssrc \ =(uint)3961155089 \,\   timestamp-offset \ =(uint)725507323 \,\ seqnum-offset \ =(uint)20783"   /GstPipeline:pipeline0/GstQueue:queue0.GstPad:sink:caps =   " application / x-rtp \,\ media \ =(string)audio \,\   clock-rate \ =(int)44100 \,\ encoding-name \ =(string)L16 \,\   encoding-params \ =(string)2 \,\ channels \ =(int)2 \,\   payload \ =(int)96 \,\ ssrc \ =(uint)3961155089 \,\   timestamp-offset \ =(uint)725507323 \,\ seqnum-offset \ =(uint)20783"   /GstPipeline:pipeline0/GstRtpL16Pay:rtpl16pay0.GstPad:sink:caps =   " audio / x-raw \,\ layout \ =(string)interleaved \,\ rate \ =(int)44100 \,\   format \ =(string)S16BE \,\ channels \ =(int)2 \,\   通道掩模\ =(位掩码)0x0000000000000003"   /GstPipeline:pipeline0/GstAudioConvert:audioconvert0.GstPad:sink:cap   =" audio / x-raw \,\ format \ =(string)S16LE \,\ layout \ =(string)interleaved \,\ rate \ =(int)44100 \,\   channels \ =(int)2 \,\ channel-mask \ =(bitmask)0x0000000000000003"   /GstPipeline:pipeline0/GstDecodeBin:decodebin0.GstDecodePad:src_0.GstProxyPad:proxypad1:   caps =" audio / x-raw \,\ format \ =(string)S16LE \,\   layout \ =(string)interleaved \,\ rate \ =(int)44100 \,\   channels \ =(int)2 \,\ channel-mask \ =(bitmask)0x0000000000000003"   /GstPipeline:pipeline0/GstDecodeBin:decodebin0/GstTypeFindElement:typefind.GstPad:sink:   caps =" audio / x-raw \,\ format \ =(string)S16LE \,\   layout \ =(string)interleaved \,\ rate \ =(int)44100 \,\   channels \ =(int)2 \,\ channel-mask \ =(bitmask)0x0000000000000003"   /GstPipeline:pipeline0/GstDecodeBin:decodebin0.GstGhostPad:sink:cap   =" audio / x-raw \,\ format \ =(string)S16LE \,\ layout \ =(string)interleaved \,\ rate \ =(int)44100 \,\   channels \ =(int)2 \,\ channel-mask \ =(bitmask)0x0000000000000003"   / GstPipeline:pipeline0 / GstRtpL16Pay:rtpl16pay0:timestamp = 725507323   / GstPipeline:pipeline0 / GstRtpL16Pay:rtpl16pay0:seqnum = 20783

我认为rx管道是错误的,但我找不到解决方案。 请告诉我如何制作管道。

PS: 我尝试了以下命令,并且rx播放麦克风音频!这意味着接收器设备无法播放L16音频?

  

tx:gst-launch-1.0 -v alsasrc device =" hw:0" ! decodebin! audioconvert   !听觉样本! alawenc! rtppcmapay!排队! udpsink   host = 239.0.0.1 auto-multicast = true port = 5004

     

rx:gst-launch-1.0 udpsrc multicast-group = 239.0.0.1 port = 5004   caps =" application / x-rtp,media =(string)audio,clock-rate =(int)8000,   encoding-name =(string)PCMA,encoding-params =(string)2,   channels =(int)1,payload =(int)8" ! rtppcmadepay! alawdec! alsasink

1 个答案:

答案 0 :(得分:0)

您需要在接收中添加上限,请尝试以下管道:

  

gst-launch-1.0 udpsrc multicast-group = 239.0.0.1 port = 5004   caps ='application / x-rtp,media =(string)audio,clock-rate =(int)44100,   encoding-name =(string)L16,encoding-params =(string)2,channels =(int)2,   payload =(int)96'! rtpL16depay! audioconvert! alsasink