我正在尝试播放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是完美的。
答案 0 :(得分:1)
关闭嵌入式硬件上的alsa设备会有一点延迟。检查热熔器哪个过程仍然打开。还可以考虑使用gnonlin开发流的顺序回放。这将重用现有的音频接收器。