1

我正在从音频服务器创建音频流并将其流式传输到接收器,我希望接收器选择一个通道并将其转换为单声道。

下面的代码是我的接收器的管道。它正在接收一个 rtp 流。

gst-launch-0.10 -v \
udpsrc multicast-group=224.0.0.7 port=5000 \
! "application/x-rtp,media=audio, clock-rate=44100, width=16, height=16, encoding-name=L16, encoding-params=2, payload=96" \
! gstrtpjitterbuffer latency=200 ! rtpL16depay ! audioconvert ! deinterleave name=d    interleave name=i ! alsasink \
d.src_0 ! queue ! audioconvert !"audio/x-raw-int,channels=1"! i.sink1 \
d.src_0 ! queue ! audioconvert !"audio/x-raw-int,channels=1"! i.sink0 

它什么也不听,但是当流通过时,它会抛出一个错误。

ERROR: from element /GstPipeline:pipeline0/GstUDPSrc:udpsrc0: Internal data flow error.
4

1 回答 1

1

你不能连接d.src_0两次。

相反,你可以放弃交错部分,只专注于播放单声道流(我希望我用 替换你的没关系udpsrcuribin但管道更容易阅读):

gst-launch-0.10 -v uridecodebin uri=file://file.ogg ! audioconvert ! \
  deinterleave name=d  d.src0 ! queue ! audioconvert ! alsasink

这将像您的管道一样,对立体声流进行去交错处理,并只采用左声道(d.src0,另一个使用 d.src1),它提供单声道流并将其馈送到 alsasink。

ALSA 不介意您是否向其提供单声道或立体声数据,但如果您明确想要立体声流/文件怎么办?只需添加audiopanorama. 它接收音频流并将其放置在左右扬声器之间的某个位置(panorama参数默认为 0,即中心)并产生立体声流:

gst-launch-0.10 -v uridecodebin uri=file://file.mp3 ! audioconvert ! \
  deinterleave name=d d.src0 ! queue ! audioconvert ! audiopanorama ! alsasink

但正如我所说,ALSA(以及大多数其他声音服务器,如脉冲、osd、...)并不关心您是否将单声道或立体声输入其中,它会在两个通道上播放。

于 2013-05-10T10:41:29.847 回答