Полнодуплексная связь Alsa

Я хочу реализовать полнодуплексную связь с помощью alsa. Сначала я написал программы захвата и воспроизведения, и я передаю данные из захваченного процесса в процесс воспроизведения, используя UDP-связь. Он отлично работает, когда я запускал два процесса, один из которых записывает, а другой воспроизводит (рассмотрите это как полудуплекс от A до B), проблема возникает, когда я пытался реализовать еще один полудуплекс (полудуплекс от B до A) затем я получаю ошибку Broken Pipe при чтении данных с микрофона. Как это решить? Любая помощь, заранее спасибо.

Примечание. Я запускаю два процесса в разных системах.


person Siva Krishna Aleti    schedule 18.11.2013    source источник
comment
Как ваша программа определяет, когда пора читать с устройства PCM?   -  person CL.    schedule 18.11.2013
comment
Я постоянно читаю с устройства и пишу на устройство, используя асинхронный обратный вызов (путем установки avail-min).   -  person Siva Krishna Aleti    schedule 19.11.2013
comment
Не используйте асинхронность. Разорванная трубка — это EPIPE, а это значит, что вы читали недостаточно быстро. Насколько велики буферы?   -  person CL.    schedule 19.11.2013
comment
Я использую буфер размером 1880. У меня есть некоторые сомнения относительно чтения и записи. Каков оптимальный размер, который я могу записывать или читать за раз с/на устройство (один период или два периода) и после чтения/записи, сколько времени мне придется ждать следующего чтения/записи.   -  person Siva Krishna Aleti    schedule 19.11.2013


Ответы (1)


Когда приложению приходится ждать устройства PCM, оно переходит в спящий режим и просыпается на границе следующего периода. Следовательно, оптимальный размер для чтения/записи — один период (или кратный ему).

Вы должны прочитать/записать образцы данных, как только будут доступны некоторые кадры.

Чтобы уменьшить вероятность переполнения/опустошения, увеличьте размер буфера. (На устройствах захвата увеличение размера буфера не увеличивает задержку.)

person CL.    schedule 19.11.2013
comment
Вы должны прочитать/записать образцы данных, как только будут доступны некоторые кадры, это означает, когда именно я должен прочитать ... я должен использовать опрос или что-то еще - person Siva Krishna Aleti; 20.11.2013
comment
snd_pcm_read* будет ждать, пока некоторые кадры станут доступными (в режиме блокировки). - person CL.; 20.11.2013