[Гайд] Делаем эрзац беспроводные наушники/колонку из телефона на андроиде

Как правильно задавать вопросы Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа. Общая рекомендация по составлению тем: 1. Для начала воспользуйтесь поиском форума. 2. Укажите версию ОС вместе с разрядностью. Пример: LM 19.3 x64, LM Sarah x32 3. DE. Если вопрос касается двух, то через запятую. (xfce, KDE, cinnamon, mate) 4. Какое железо. (достаточно вывод inxi -Fxz в спойлере (как пользоваться спойлером смотрим здесь)) или же дать ссылку на hw-probe 5. Суть. Желательно с выводом консоли, логами. 6. Скрин. Просьба указывать 2, 3 и 4 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот
Аватара пользователя

Автор темы
slant
Сообщения: 4469
Зарегистрирован: 21 июн 2017, 18:09
Решено: 95
Благодарил (а): 51 раз
Поблагодарили: 1966 раз
Контактная информация:

[Гайд] Делаем эрзац беспроводные наушники/колонку из телефона на андроиде

#1

24 сен 2021, 19:30

Случилось так, что звезды сошлись, и мне попалось под руку несколько материалов одновременно с вопросом на другом ресурсе: "а можно выводить весь звук с компа на телефон по Wi-Fi?" Т.е. имеется в виду - не транслировать только музыку или аудиодорожку, а использовать телефон как полноценную колонку или наушники, в том числе и в играх, и т.д.

Ответ на этот вопрос: "Да, можно." :)

Однако есть некоторые тонкости.
1. Система должна иметь pipewire как основной звуковой сервер, и pipewire-pulse как слой совместимости с фичами от pulseaudio. Причем, хотя теоретически это решение может работать и с родной ему пульсой, но на практике оно непригодно для вывода через пульсу ВСЕГО звука, разве что музыку из файлов слушать. Latency у пульсы уж слишком большое, приходится обязательно ставить большой буфер, а это ведет к отставанию звука от изображения. У pipewire с этим НАМНОГО лучше. Хотя результат будет так же сильно зависеть от п. 2.
2. Wi-Fi должно быть как минимум по стандарту 802.11g. а лучше - более новым (т.е. n, aс и т.д.) Только в этом случае сам wi-fi линк не будет вносить неприемлемую задержку. Хоть сам по себе g ныне и достаточно стар и есть у всех, но WI-FI устройства любят автоматически скидывать скорость и протокол "назад в прошлое" если качество канала становится плохим, либо "не договорились" из за личной несовместимости. Так что бывает, что по характеритикам железок там ожидается ac, а по факту - аж до b откатилось. :)
3. Решение для внутренней локальной доверенной сети - никакой авторизации там нету. Компьютер начинает транслировать свой звук любому желающему (клиенту). Можно лишь обрезать доступ к порту всем кроме какого-то набора адресов (или даже одного адреса) с помощью firewall но это все равно не "запертая на ключ дверь" а "крючочек на калитке". Так что не стоит такое делать, если у вас компьютер голым интерфейсом в интернет. :)

Если эти требования есть, можно переходить к практике.

- На телефон/планшет ставим вот это: https://play.google.com/store/apps/deta ... ocolplayer - сие есть просто плеер, который умеет играть поток нужного формата.
- Запускаем, настройки оставляем по умолчанию за исключением адреса - туда надо вбить IP вашего компьютера который будет транслировать звук, и порта - туда лучше вбить что-то нестандартное т.к. на стандартном порту 4711 у многих почему-то не работает. Так что вбиваем 12345, например. Так же желательно поставить галку Enable network retries. Далее жмем иконку "играть" (треугольник). С телефоном пока все.
- На компьютере ставим пакет pipewire-pulse если еще нету.
- Делаем проверку возможностей:
systemctl --user restart pipewire-pulse
pactl load-module module-simple-protocol-tcp port=12345 record=true
Если все сделано верно и pipewire достаточно свежий - звук играющий в этот момент на компьютере начнет дублироваться на телефоне. Но пока мы лишь проверили систему, работать будет до перезагрузки.
Чтобы оно работало постоянно надо сделать вот что:
- Идем в /etc/pipewire и смотрим есть ли там что-то похожее на файл pipewire-pulse.conf. Если нету даже самого каталога /etc/pipewire - не страшно. Тогда:
- Идем в /usr/share/pipewire, и ищем там образец все того-же pipewire-pulse.conf.
- Копируем этот файл (откуда нашли) себе в ~/.config/pipewire - место где лежит индивидуальная настройка каждого пользователя.
- Открываем его на редактором, и ищем строчку context.modules = [ , и сразу после нее вставляем вот такой кусок конфига:

Код: Выделить всё

    {   name = libpipewire-module-protocol-simple
        args = {
            # Provide capture stream, clients can capture data from PipeWire
            capture = true
            #
            # Provide playback stream, client can send data to PipeWire for playback
            #playback = true
            #
            # The node name or id to use for capture.
            #capture.node = null
            #
            # The node name or id to use for playback.
            #playback.node = null
            #
            #audio.rate = 44100
            #audio.format = S16
            #audio.channels = 2
            #audio.position = [ FL FR ]
            #
            # The addresses this server listens on for new
            # client connections
            server.address = [
                "tcp:12345"
            ]
        }
    }
Т.е. мы добавляем вызов-загрузку еще одного модуля с параметрами - то, делали через pactl интерактивно, но теперь на постоянной основе.
Далее делаем рестарт pipewire-pulse - systemctl --user restart pipewire-pulse и если сделано правильно - телефон будет цепляться сразу без команды pactl...
Убедившись что все работает как надо подводим черту:
systemctl --user enable pipewire-pulse - запускать автоматически при входе пользователя в систему.
Да, это не общесистемный сервис а частный, одного пользователя. Кстати, по этому - не вздумайте делать это от root или использовать где-то в процессе sudo. root здесь не только не нужен но и вреден.
И с точки зрения сети - сервером у нас здесь является компьютер, а клиентом - телефон (точнее особый плеер на нем), т.е. как бы "наоборот" от видимого функционала.

Дополнительные материалы: https://gitlab.freedesktop.org/pipewire ... PulseAudio

Далее остаются твики: на телефоне имеет смысл пробовать уменьшать настройку Buffer Size до тех пор пока сохраняется устойчивое качество звука - чем она меньше, тем меньше отставание звука от изображения. У меня звук сораняется даже при 10-15 ms, а вот если меньше - уже начинается треск или прерывания.

Можно поиграться с настройками rate, format, channels - это уже надо делать синхронно и на компе и на телефоне. (Каналы - это моно или стерео. А position - куда какой канал, если скажем левый начнет в правом ухе играть).

Тестировалось на manjaro. Но в минте, по идее тоже должно работать с переходом на pipewire. Ну и в других системах где он есть или возможен как вариант. Ну и разумеется решение чувствительно к качеству Wi-Fi. Не столько скорости, сколько отсутствие потерь пакетов и "класс" линка, т.е задержка ему критична - ping-ом можно померять. У меня между телефоном и компом те самые 10-15ms получаются...

Аватара пользователя

Sova
Сообщения: 99
Зарегистрирован: 15 мар 2020, 08:58
Решено: 1
Благодарил (а): 29 раз
Поблагодарили: 7 раз
Контактная информация:

[Гайд] Делаем эрзац беспроводные наушники/колонку из телефона на андроиде

#2

25 сен 2021, 03:27

А не проще расшарить медийные директории посредством smb/ftp/DLNA и юзать на клиенте (Ведро) софт, способный считывать вышеперечисленное? Будет (относительно) меньше секса с настройками и возможность использовать оба устройства независимо друг от друга. Я так музло с ноута телефоном слушаю (через блютус-гарнитуру).

Аватара пользователя

Автор темы
slant
Сообщения: 4469
Зарегистрирован: 21 июн 2017, 18:09
Решено: 95
Благодарил (а): 51 раз
Поблагодарили: 1966 раз
Контактная информация:

[Гайд] Делаем эрзац беспроводные наушники/колонку из телефона на андроиде

#3

25 сен 2021, 06:21

Sova писал(а):
25 сен 2021, 03:27
Я так музло с ноута телефоном слушаю (через блютус-гарнитуру).
Запустите на компе игру и поиграйте со звуком идущим на телефон. Посмотрите стрим с твича, причем не запись а live, так чтобы со стримером пообщаться через чат. А я посмотрю, как вы это через dlna сделаете. :)

Аватара пользователя

Sova
Сообщения: 99
Зарегистрирован: 15 мар 2020, 08:58
Решено: 1
Благодарил (а): 29 раз
Поблагодарили: 7 раз
Контактная информация:

[Гайд] Делаем эрзац беспроводные наушники/колонку из телефона на андроиде

#4

25 сен 2021, 06:30

slant писал(а):
25 сен 2021, 06:21
Sova писал(а):
25 сен 2021, 03:27
Я так музло с ноута телефоном слушаю (через блютус-гарнитуру).
Запустите на компе игру и поиграйте со звуком идущим на телефон. Посмотрите стрим с твича, причем не запись а live, так чтобы со стримером пообщаться через чат. А я посмотрю, как вы это через dlna сделаете. :)
А зачем я его через телефон буду запускать? У меня для этого есть более подходящие устройства: встроенные в ноут динамики, блютус-гарнитура, еще где-то валялись старые проводные наушники или можно у жены или детей блютус-колонки отобрать.

Аватара пользователя

FreeStyler
Сообщения: 795
Зарегистрирован: 23 июл 2018, 07:58
Решено: 6
Откуда: Сиб
Благодарил (а): 756 раз
Поблагодарили: 94 раза
Контактная информация:

[Гайд] Делаем эрзац беспроводные наушники/колонку из телефона на андроиде

#5

25 сен 2021, 08:28

Прикол! Как раз вчера думал почему ещё нет наушников которые передевали бы звук по WiFi? А то по блюпупу есть, но он слабее - по квартире уже не походишь. А с WiFi уже можно было бы по хате ходить и не парица. Да и блюпуп не у всех компов есть, а WiFi раутер уже у многих. Если ещё WiFi 5G будет, то можно ещё попробовать блюпуп наушники к нему подключить и по идее будут WiFi наушники :joke:
deadmau5 - Harmonic Mix
■ KDE Neon 22.04 (UE) @ Lenovo IdeaPad 3-15 Ryzen 5 4500U, 18 Гб DDR-4, 128 Gb SSD +1 Gb SSD 1920x1080

Аватара пользователя

Автор темы
slant
Сообщения: 4469
Зарегистрирован: 21 июн 2017, 18:09
Решено: 95
Благодарил (а): 51 раз
Поблагодарили: 1966 раз
Контактная информация:

[Гайд] Делаем эрзац беспроводные наушники/колонку из телефона на андроиде

#6

25 сен 2021, 13:32

Sova писал(а):
25 сен 2021, 06:30
А зачем я его через телефон буду запускать?
А если вам не зачем - то зачем вообще здесь ваш комментарий не в тему?
Sova писал(а):
25 сен 2021, 06:30
У меня для этого есть более подходящие устройства: встроенные в ноут
У вас есть, у других нету. Скажем на стационарной машине bluetooth до сих пор редкость. А оные usb свистки - это лотерея, особенно дешевые. А Wi-Fi есть гораздо чаще.

Ответить

Вернуться в «Arch-based [Arch / Manjaro / Antegros]»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей