如何通过Gstreamer同时在不同的耳机上播放两首不同的歌曲?

时间:2011-12-26 06:14:39

标签: audio gstreamer

我们尝试使用interleave插件同时播放两首歌曲。

> gst-launch
    filesrc location=/home/test.mp3
        ! decodebin ! audioconvert ! "audio/x-raw-int,channels=2"
        ! alsasink 
    filesrc location=/home/song.mp3
        ! decodebin ! audioconvert ! audio/x-raw-int,channels=2
        ! deinterleave name=d
    interleave name=i ! audioconvert  ! alsasink
    d.src0 ! queue ! audioconvert ! i.sink1
    d.src1 ! queue ! audioconvert ! i.sink0

我可以在左右耳塞上听到两首歌。但是我希望test.mp3在右声道播放,song.mp3在左声道播放。 如果在上面的管道中,我改变了通道= 1而不是2,它说

  

将管道设置为PAUSED ...   管道是PREROLLING ......   我什么都听不到。

有人可以建议我正确的管道结构吗?

1 个答案:

答案 0 :(得分:2)

在交错播放两首歌曲之前,您需要将它们转换为单声道。使用audioconvert可以做到这一点。只需将频道设置为1。

audioconvert ! "audio/x-raw-int,channels=1"

然后只将interleave分成一个流:

$ gst-launch                                                      \
    interleave name=i ! alsasink                                  \
    filesrc location=07.\ No\ Woman\,\ No\ Cry.mp3                \
        ! decodebin ! audioconvert ! "audio/x-raw-int,channels=1" \
        ! i.sink1                                                 \
    filesrc location=11.\ Sun\ Is\ Shining.mp3                    \
        ! decodebin ! audioconvert ! "audio/x-raw-int,channels=1" \
        ! i.sink0

更新:哦,我的!它与interleavehere上的管道几乎相同。在下次询问之前尝试阅读一些文档。这并不难。