реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> ALSA-запись двумя приложениями одновременно, лыжи едут по очереди
AlexB
сообщение Aug 29 2012, 13:50
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 37
Регистрация: 9-08-05
Из: The Netherlands
Пользователь №: 7 477



Уважаемые знатоки 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
}

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

Go to the top of the page
 
+Quote Post
DRUID3
сообщение Aug 29 2012, 16:43
Сообщение #2


山伏
*****

Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294



а PulsAudio есть на линуксе? Попробуйте вместо mmap применить read()/write()...


--------------------
Нас помнят пока мы мешаем другим...
//--------------------------------------------------------
Хороший блатной - мертвый...
//--------------------------------------------------------
Нет старик, это те дроиды которых я ищу...
Go to the top of the page
 
+Quote Post
AlexB
сообщение Aug 29 2012, 20:56
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 37
Регистрация: 9-08-05
Из: The Netherlands
Пользователь №: 7 477



Цитата(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> если его уже кто-то использует.
Go to the top of the page
 
+Quote Post
DRUID3
сообщение Aug 29 2012, 21:48
Сообщение #4


山伏
*****

Группа: Свой
Сообщений: 1 827
Регистрация: 3-08-06
Из: Kyyiv
Пользователь №: 19 294



Я давно с "алсой" не игрался, и не все помню, но Вы точно все по документации вызываете там? Чот-то у Вас snd_pcm_open() вообще не из той песни... Вот дока, вот экзампл... А у Вас snd_pcm_open() и snd_pcm_set_params() одна функция чего-то... Может в этом соль? В хидерах эти установочные константы - это же все int-числа. Счас лень все искать и перепроверять но вдруг... Простыми словами: пример с офсайта alsa pcm_min.c тоже блокирует устройство? Если да - то скорее нужно рыть в сторону настроек.

Интересно, а alsaconf есть на платке? Хотя его собрать наверное можно знать бы версию ARM-ки...


--------------------
Нас помнят пока мы мешаем другим...
//--------------------------------------------------------
Хороший блатной - мертвый...
//--------------------------------------------------------
Нет старик, это те дроиды которых я ищу...
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 7th July 2025 - 22:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.01343 секунд с 7
ELECTRONIX ©2004-2016