Звук по сети

Материал из MediaWiki
Перейти к навигации Перейти к поиску

Существуют разные способы обеспечения передачи звука по сети. Я же наткнулся на интересную статью, где рассказывается, как элементарно обеспечить себе передачу звука по сети без ненужных приблуд, вроде PulseAudio. Здесь предоставлю вольный перевод той статьи.

Итак, нужно нам для этого немного: лишь активировать звуковое устройство-петлю snd-aloop (модуль — часть Alsa), а с удаленной машины (со звуком) зайти на нашу (без звука) и запустить передачу звука по сети при помощи sox (посредством этого устройства-петли) и воспроизведение его локально (через трубу).

Теперь подробности. Назовем машину, не имеющую акустической системы, speakerless, а имеющую — speakerfull.

  1. На машине speakerless запускаем звуковое устройство-петлю:
    modprobe snd-aloop index=0 pcm_substreams=1
    Это устройство создает две виртуальные звуковые карты: вход одной перенаправляется на выход другой.
  2. В файл .asoundrc пишем следующее:
    pcm.!default {
    type dmix
    slave.pcm "hw:Loopback,0,0"
    }
    pcm.loop {
    type plug
    slave.pcm "hw:Loopback,1,0"
    }
    Таким образом по умолчанию звук от всех приложений микшируется и направляется на вход виртуальной звуковой карты номер 0. Забрать звук мы сможем с выхода виртуальной звуковой карты номер 1, которую мы обозвали синонимом loop.
  3. На машине speakerfull делаем следующее:
    ssh -C speakerless sox -q -t alsa loop -t wav -b 24 -r 48k - | play -q - 
    Т. е. мы соединяемся по ssh с машиной speakerless, запускаем там sox для воспроизведения звука с устройства loop (т. е. нашей виртуальной звуковой карты номер 1), отправляем его в трубу и воспроизводим уже на машине speakerfull при помощи play.
  4. Все. Наслаждаемся звуком.

P. S. Добавлю отсебятины: по идее, можно поменять местами правую и левую части в команде ssh (соответственно, заменив speakerless на speakerfull). Тогда мы сможем держать машину speakerfull постоянно включенной, а ssh-подключение активировать при загрузке машины speakerless (естественно, сначала настроив авторизацию по ключам).

P. P. S. Еще (теоретически) можно реализовать это без ssh, открыв на машине speakerfull определенный порт (слушать его можно, например, curl’ом), данные из которого перенаправлять сразу на play. Тогда машине speakerless «выхлоп» sox’а надо будет послать (опять‐таки, например, через curl) на нужный порт машины speakerfull.