Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ gstreamer选择一个通道并转换为单声道(解交织)_C++_Audio Streaming_Gstreamer - Fatal编程技术网

C++ gstreamer选择一个通道并转换为单声道(解交织)

C++ gstreamer选择一个通道并转换为单声道(解交织),c++,audio-streaming,gstreamer,C++,Audio Streaming,Gstreamer,我正在从音频服务器创建一个音频流,并将其传输到接收器,我希望接收器选择一个频道并将其转换为单声道 下面的代码是我的接收器的管道。它正在接收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,

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

下面的代码是我的接收器的管道。它正在接收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.

您不能连接
d.src\u 0
两次

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

这将像您的管道一样,对立体声流进行逐行扫描,只取左侧通道(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(以及大多数其他声音服务器,如pulse、osd等)不在乎你是在它里面输入单声道还是立体声,它会在两个频道上播放。

你不能连接
d.src\u 0
两次

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

这将像您的管道一样,对立体声流进行逐行扫描,只取左侧通道(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(以及其他大多数声音服务器,如pulse、osd等)不在乎你是在它里面输入单声道还是立体声,它会在两个频道上播放