Как транслировать аудиовыход GNU / Linux на устройства Android через WI-FI?

39

Я хочу транслировать аудиовыход по сети (Wi-Fi) на мои устройства Android. Я не ищу решение для потоковой передачи музыки / видео, но я бы транслировал любой аудиовыход с моего рабочего стола GNU / Linux на мою Android-работу, как наушники Bluetooth.

Мой рабочий стол GNU / Linux - это Debian Wheezy, а звук обеспечивает pulseaudio.

Я попробовал модуль raop Pulseaudio (и включил его в paprefs) + приложение Android AirBuddle, но звук не передается (pulaudio видит, что подключается к AirBuddle, но звук не воспроизводится, в некоторых программах происходит сбой соединения, в некоторых в других программах звук застрял).

semente
источник

Ответы:

27

Существует очень простое решение, потому что PulseAudio уже имеет все необходимые инструменты.

  1. Получить имя вашего исходного устройства с помощью команды pactl list | grep Name
  2. Создайте следующий скрипт с именем pashare:

    #!/bin/sh
    case "$1" in
      start)
        $0 stop 
        pactl load-module module-simple-protocol-tcp rate=48000 format=s16le channels=2 source=<source_name_here> record=true port=8000
        ;;
      stop)
        pactl unload-module `pactl list | grep tcp -B1 | grep M | sed 's/[^0-9]//g'`
        ;;
      *)
        echo "Usage: $0 start|stop" >&2
        ;;
    esac
    
  3. Сделайте некоторые проверки и приготовления (чтобы разрешить выполнение скрипта и проверить, успешно ли открыт порт):

    chmod 755 pashare
    ./pashare start
    netstat -nlt | grep 8000 
    telnet 127.0.0.1 8000
    
  4. Загрузите и установите PulseDroid.apk

  5. Запустите приложение на вашем телефоне; установите IP-адрес вашего компьютера и порт 8000.

PS Вы также можете проверить эту страницу Wiki для получения общей информации о потоковой передаче сети Pulseaudio и эту страницу Wiki о потоковой передаче по протоколу RTP. Не ожидайте слишком многого от потокового аудио через WiFi; это занимает огромные полосы пропускания. Даже с высокопроизводительным беспроводным маршрутизатором / AP с мощным сигналом я не смог получить больше, чем просто заикаться из него. Лучше всего, вероятно, настроить надлежащий медиа-сервер (например, Rygel, который хорошо работает с Pulseaudio), чтобы транскодировать необработанный звук во что-то вроде MP3 и передавать его вместо этого.

AlexAndersan
источник
7
Это также прекрасно работает с этим приложением для Android: Simple Protocol Player, play.google.com/store/apps/… Обратите внимание, что по умолчанию это значение равно 44100, поэтому вы можете использовать его.
Янв
1
Просто чтобы уточнить: на выходе pactl list sources short лучше найти номер параметра источника.
wolfmanx
4
Использование pactl list | grep "Monitor Source"показывает более актуальные источники для меня.
Маркроксор
18

Вы можете использовать VLC для обслуживания MP3-потока вывода импульса через HTTP.
Основным преимуществом является то, что вам не нужно устанавливать какое-либо специальное программное обеспечение на удаленное устройство, веб-браузер (или музыкальный проигрыватель) - это все, что вам нужно для воспроизведения потока. Недостатком является то, что это только аудио, задержка в несколько секунд делает его бесполезным для видео

  1. Найти имя выхода pulseaudio с помощью:

    pactl list | grep "Monitor Source" 
    
  2. Запустите http-сервер VLC, заменив XXXX на ваше выходное имя:

    cvlc -vvv pulse://XXXX --sout '#transcode{acodec=mp3,ab=128,channels=2}:standard{access=http,dst=0.0.0.0:8888/pc.mp3}'
    
  3. При необходимости найдите свой локальный IP-адрес с помощью ifconfig

  4. На удаленном устройстве укажите браузер (или приложение для потоковой передачи аудио) на:

    http://your.local.ip.address:8888/pc.mp3
    

Примечание. На поток не влияет громкость, установленная на сервере, если только вы не отключите звук полностью. При необходимости вы можете оставить уровень чуть выше 0, чтобы слышать только удаленное устройство.


Первые два шага объединены в один с помощью polynomial_donut :

cvlc -vvv pulse://$(pactl list | grep "Monitor Source" | awk '{print $3}') --sout '#transcode{acodec=mp3,ab=128,channels=2}:standard{access=http,dst=0.0.0.0:8888/pc.mp3}'
Уилкс
источник
1
здорово! Отставание составляет 3 секунды, но я доволен этим маленьким взломом, пока не найду этот чертов кабель. Мне, вероятно, придется купить еще один ...
Slabo
@ Хороший вопрос, по какой-то причине я ошибочно предположил, что OP хотел только слушать музыку. Отредактировал мой ответ
wilks
2
Однострочник вместо первых двух строчек: cvlc -vvv pulse://$(pactl list | grep "Monitor Source" | awk '{print $3}') --sout '#transcode{acodec=mp3,ab=128,channels=2}:standard{access=http,dst=0.0.0.0:8888/pc.mp3}'
polynomial_donut
Поток напрямую зависит от настройки громкости для меня. Я просто подключаю наушники, чтобы звук не поступал с ноутбука.
Рольф
Кстати, как я могу остановить длительность задержки, как 1/2 часа?
Рольф
9

Для потоковой передачи аудиосигнала через Wi-Fi на телефон Android необходимо установить серверное программное обеспечение, которое отправляет аудио, на ПК и клиентское программное обеспечение на устройстве Android. Доступные варианты

WiFi Audio Беспроводной динамик

Запустите приложение WiFi Audio для Android и нажмите «Пуск», после чего вы увидите IP-адрес мобильного устройства, после чего запустите приложение Windows / Linux, введите IP-адрес мобильного устройства в поле IP-адреса и нажмите «Пуск» в приложении для ПК. Теперь все аудио, поступающие с ПК, будут отправлены на мобильное устройство, и вы услышите звук на мобильном устройстве.
Скачать

SoundWire

Беспроводная передача любой музыки или звука с вашего ПК на телефон, планшет или другое устройство Android.
Домашняя страница Также см.

Другие полезные ссылки
XBMC android SE

Тотти
источник
SoundWire отстает на 1-2 секунды
Гаурав Гупта
@gauravgupta Нет лагов, если вы выбираете меньший размер буфера. Также попробуйте использовать сжатие. Это сработало для меня очень хорошо.
гонщик
Вы можете разместить здесь ссылку на скачивание WiFi приложения для ПК?
Сейед
1
WiFi Audio Wireless Speaker был удален из github, и пользователи считают, что скомпилированная версия на форумах является вредоносной программой. Быть осторожен! Soundwire также выглядит подозрительно, от того, как он распространяется.
Геном
0

Для тех из вас, кто использует Soundwire и отправляет Wi-Fi с вашего ноутбука или ПК, с помощью ifconfig, убедитесь, что вы используете правильный IP-адрес. Это все еще работает и по сей день, но большинству дистрибутивов Linux нужен второй адаптер Wi-Fi для отправки Wi-Fi, и вы должны использовать тот, к которому подключен ваш Android. не тот, кто получает интернет. Тот, кто отправляет это OUT.

т.е. -> Если вы используете адаптер Wi-Fi «A» для подключения к Интернету и «B» для отправки Wi-Fi из «A», подключите SoundWire на Android к «B», а не «A».

SoundWire НЕ будет подключаться или выполнять потоковую передачу, если вы подключитесь к адаптеру, не отправляющему Wi-Fi, поэтому введите свой IP-адрес в свои приложения Andoroid соответственно, используя соответствующую команду терминала ifconfig.

Да, есть задержка, но это приложение, SoundWire, является самой простой системой «multi-connect to ip and забыть». Нет сумасшедших меню, чтобы пройти. И да, он принимает более одного подключения. Я использовал 2 на днях. Он добавляет количество устройств, подключенных к нему, в главном окне устройства, отправляющего передачу.

Используя это лично в качестве многокомнатной / короткой дистанционной системы Wi-Fi у меня дома и по сей день.

Наслаждаться.

Roiikka
источник
-4

Вау, это старое ...

В любом случае, используйте VLC. Красивые графические интерфейсы.

  • Запустите VLC на вашем рабочем столе.
  • Нажмите «Поток», выберите файл (добавьте сколько угодно файлов), нажмите «Поток».
  • «Далее», если все правильно.
  • Для New Destination выберите «http» (или что вы хотите использовать). Выберите Отображать локально, если вы хотите воспроизвести его на той машине, с которой вы также ведете потоковую передачу. Следующие несколько диалогов не требуют пояснений.

Запустите VLC на вашем устройстве Android. Нажмите значок рядом с кнопкой поиска (стрелка, указывающая на точку). введите http://<IP ADDRESS O OF THE MACHINE RUNNING VLC>:8080/для меня это былоhttp://xxx.ca:8080/

Проверено и работает. Можно ли сделать это в древние времена 9 июня 13 года? Возможно, но мне лень проверять логи коммитов VLC;)

Zeroedout
источник
3
Он не ищет решения для потоковой передачи музыки / видео.
Кристиан Чиупиту