Многопроцессная запись звука с неработающим gstreamer - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть программа C ++, которая записывает аудио с карты устройства с помощью gstreamer.

Мне нужно иметь возможность записывать поток из нескольких процессов. Когда я запускаю его один раз, он работает, но я не могу запустить другой процесс одновременно. Я установил для переменной GST_DEBUG значение WARNING, чтобы получить больше журналов.

Вместо того, чтобы копировать / вставлять свой код, я просто использую gst-launch, чтобы упростить его (такая же проблема возникает).

gst-launch-1.0 alsasrc device=hw:1,0 ! fakesink

Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Pipeline is PREROLLED ...
0:00:00.020972034  2289      0x207e680 FIXME                default gstutils.c:4025:gst_pad_create_stream_id_internal:<alsasrc0:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id
Setting pipeline to PLAYING ...
New clock: GstAudioSrcClock
Redistribute latency...
0:00:00.121978078  2289      0x20a9b60 FIXME                    bin gstbin.c:4346:gst_bin_query: implement duration caching in GstBin again

Если я запускаю одну и ту же команду одновременно, я получаю:

gst-launch-1.0 alsasrc device=hw:1,0 ! fakesink
Setting pipeline to PAUSED ...
0:00:00.021713435  2282      0x1986a40 WARN                    alsa pcm_hw.c:1715:snd_pcm_hw_open: alsalib error: open '/dev/snd/pcmC1D0c' failed (-16): Device or resource busy
0:00:00.021804218  2282      0x1986a40 WARN                    alsa gstalsasrc.c:766:gst_alsasrc_open:<alsasrc0> error: Could not open audio device for recording. Device is being used by another application.
0:00:00.021827326  2282      0x1986a40 WARN                    alsa gstalsasrc.c:766:gst_alsasrc_open:<alsasrc0> error: Device 'hw:1,0' is busy
ERROR: Pipeline doesn't want to pause.
Setting pipeline to NULL ...
Freeing pipeline ...

Знаете ли вы, почему я не могу записать поток с одного устройства с несколькими процессами одновременно?

...