在不同情况下播放多声道音频时出错?

时间:2012-04-03 06:43:19

标签: audio gstreamer alsa

我正在尝试播放2个频道,其中一个音频和另一个频道的静音正在播放。

$ gst-launch \
    interleave name=i ! alsasink
    filesrc location=/home/test1.mp3 \
        ! decodebin ! audioconvert \
        ! audio/x-raw-int,channels=1 ! i. \
    audiotestsrc wave=silence \
        ! decodebin ! audioconvert \
        ! audio/x-raw-int,channels=1 ! volume volume=1.0 ! i.

10秒后我想在第一个频道播放静音,在第二个频道播放一些音频。

$ gst-launch \
    interleave name=i ! alsasink \
    audiotestsrc wave=silence \
        ! decodebin ! audioconvert \
        ! audio/x-raw-int,channels=1 ! i. \
    filesrc location=/home/test2.mp3 \
        ! decodebin ! audioconvert \
        ! audio/x-raw-int,channels=1 ! volume volume=1.0 ! i.

这可以在PC端完成,同时在两个不同的终端中播放这些管道或使其中一个在后台运行。但是,当我在am335x主板上播放一个管道并试图播放另一个时,它就像这样:

Setting pipeline to PAUSED ...
ERROR: Pipeline doesn't want to pause.
ERROR: from element /GstPipeline:pipeline0/GstAlsaSink:alsasink0: Could not open audio device for playback. 
Device is being used by another application.
Additional debug info:
gstalsasink.c(697): gst_alsasink_open (): /GstPipeline:pipeline0/GstAlsaSink:alsasink0:
Device 'default' is busy
Setting pipeline to NULL ...
Freeing pipeline ...

当我们检入gstalsasink.c时,它在非阻塞模式下调用snd_pcm_open。

CHECK (snd_pcm_open (&alsa->handle, alsa->device, SND_PCM_STREAM_PLAYBACK,
      SND_PCM_NONBLOCK), open_error);

那为什么阻止其他事件使用音频设备?

任何人都可以建议我为目标方做些什么,因为PC端alsasink是完美的。

1 个答案:

答案 0 :(得分:1)

关闭嵌入式硬件上的alsa设备会有一点延迟。检查热熔器哪个过程仍然打开。还可以考虑使用gnonlin开发流的顺序回放。这将重用现有的音频接收器。