2

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秒後、最初のチャンネルで無音を再生し、2番目のチャンネルでオーディオを再生したいと思います。

$ 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.

これは、2 つの異なるターミナルでこれらのパイプラインを再生するか、バックグラウンドで 1 つを実行しながら、PC 側で実行できます。しかし、am335x ボードで 1 つのパイプラインを再生していて、もう 1 つのパイプラインを再生しようとすると、次のようになります。

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は完璧なので、ターゲット側で何をすべきかを誰かに提案してもらえますか。

4

1 に答える 1

1

組み込みハードウェアの alsa デバイスを閉じるのに少し時間がかかる可能性があります。どのプロセスがまだ開いているかを定着器で確認します。また、ストリームの順次再生を開発するために gnonlin を使用することも検討してください。これにより、既存のオーディオ シンクが再利用されます。

于 2012-04-04T06:44:09.200 に答える