Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ALSA-запись двумя приложениями одновременно
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Linux
AlexB
Уважаемые знатоки Linux, подскажите пожалуйста, как использовать ALSA для чтения данных с микрофона/линейного входа из двух приложений одновременно?

Дано: сетевая камера и самодельное приложение для неё.

Если камера "стримит" без звука (MJPEG), то приложение работает. Стоит переключить её на H.264 - приложение не запускается и наоборот: если вначале запустить приложение, камера не переключается на поток со звуком.
Аналогичная ситуация и при использовании "arecord" на камере: ИЛИ звук в потоке ИЛИ приложение ИЛИ "arecord".
Arecord вываливается с сообщением: <arecord: main:654: audio open error: Device or resource busy>

В моём приложении участок кода:
if ((err = snd_pcm_open (&capture_handle,"default", SND_PCM_STREAM_CAPTURE,
SND_PCM_ACCESS_MMAP_NONINTERLEAVED
)) < 0) {
printf("Error in ALSA snd_pcm_open: %i -> %s\n",err,snd_strerror (err));
return 1;
}
возвращает: <Error in ALSA snd_pcm_open: -16 -> Device or resource busy>

Файл /etc/asound.conf содержит:
pcm.audiosource0 {
type route
slave {
pcm "hw:0,0"
channels 2
}
ttable {
0.0= 1
0.1= 1
1.1= 1
1.0= 1
}
}

ctl.audiosource0 {
type hw
card 0
}

Подскажите, пожалуйста, направление поиска решения данной проблемы (готовое предпочтительней).
Заранее благодарен.

DRUID3
а PulsAudio есть на линуксе? Попробуйте вместо mmap применить read()/write()...
AlexB
Цитата(DRUID3 @ Aug 29 2012, 20:43) *
а PulsAudio есть на линуксе?

Нет, PulseAudio в камере нет (производителю предстоит его добавить).

Цитата(DRUID3 @ Aug 29 2012, 20:43) *
Попробуйте вместо mmap применить read()/write()...

Не имеет значения какой режим я выбираю SND_PCM_ACCESS_MMAP_(NON)INTERLEAVED или SND_PCM_ACCESS_RW_(NON)INTERLEAVED - первое же обращение к ALSA (snd_pcm_open(x,x,x,x) ) с целью открыть устройство для чтения или записи приводит к <Device or resource busy> если его уже кто-то использует.
DRUID3
Я давно с "алсой" не игрался, и не все помню, но Вы точно все по документации вызываете там? Чот-то у Вас snd_pcm_open() вообще не из той песни... Вот дока, вот экзампл... А у Вас snd_pcm_open() и snd_pcm_set_params() одна функция чего-то... Может в этом соль? В хидерах эти установочные константы - это же все int-числа. Счас лень все искать и перепроверять но вдруг... Простыми словами: пример с офсайта alsa pcm_min.c тоже блокирует устройство? Если да - то скорее нужно рыть в сторону настроек.

Интересно, а alsaconf есть на платке? Хотя его собрать наверное можно знать бы версию ARM-ки...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.