Jak przesyłać strumieniowo moje wyjście audio GNU / Linux na urządzenia z Androidem przez WI-FI?

39

Chcę przesyłać strumieniowo moje wyjście audio przez sieć (Wi-Fi) na moje urządzenia z Androidem. Nie szukam rozwiązania do przesyłania strumieniowego muzyki / wideo, ale przesyłałbym strumieniowo dowolne wyjście audio z pulpitu GNU / Linux na system Android działający jak słuchawki bluetooth.

Mój pulpit GNU / Linux to Debian Wheezy, a dźwięk zapewnia pulseaudio.

Wypróbowałem moduł Raopa Pulseaudio (i włączyłem go na paprefs) + aplikację Android AirBuddle, ale dźwięk nie jest przesyłany strumieniowo (seens pulseaudio łączy się z AirBuddle, ale dźwięk nie jest odtwarzany, w niektórych programach występuje awaria połączenia, w niektórych w innych programach dźwięk jest zablokowany).

Semente
źródło

Odpowiedzi:

27

Istnieje bardzo proste rozwiązanie, ponieważ PulseAudio ma już wszystkie niezbędne narzędzia.

  1. Uzyskaj nazwę urządzenia źródłowego za pomocą polecenia pactl list | grep Name
  2. Utwórz następujący skrypt o nazwie 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. Wykonaj kilka kontroli i przygotowań (aby umożliwić wykonanie skryptu i sprawdzenie, czy port został pomyślnie otwarty):

    chmod 755 pashare
    ./pashare start
    netstat -nlt | grep 8000 
    telnet 127.0.0.1 8000
    
  4. Pobierz i zainstaluj PulseDroid.apk

  5. Uruchom aplikację na telefonie; ustaw adres IP komputera i port na 8000.

PS Możesz także sprawdzić tę stronę Wiki, aby uzyskać ogólne informacje na temat przesyłania strumieniowego w sieci Pulseaudio, oraz tę stronę Wiki dotyczącą przesyłania strumieniowego RTP. Nie oczekuj zbyt wiele od strumieniowego przesyłania surowego dźwięku przez WiFi; zajmuje ogromną ilość pasma. Nawet z wysokiej klasy bezprzewodowym routerem / punktem dostępowym z mocnym sygnałem nie byłem w stanie uzyskać więcej niż jąkającego się dźwięku. Najlepszym rozwiązaniem jest prawdopodobnie skonfigurowanie odpowiedniego serwera multimediów (takiego jak Rygel, który dobrze współpracuje z Pulseaudio), aby transkodować surowy dźwięk do czegoś takiego jak MP3 i przesyłać strumieniowo.

AlexAndersan
źródło
7
Działa to również doskonale z tą aplikacją na Androida: Simple Protocol Player play.google.com/store/apps/… Pamiętaj, że domyślna wartość to = 44100, więc możesz z tego skorzystać.
Jannes,
1
Wyjaśnij: wyjście pactl list sources short lepiej jest znaleźć numer parametru źródłowego.
wolfmanx
4
używanie pactl list | grep "Monitor Source"pokazuje mi bardziej odpowiednie źródła.
markroxor 10.04.18
18

Możesz użyć VLC do obsługi strumienia MP3 wyjścia pulseaudio przez HTTP.
Główną zaletą jest to, że nie musisz instalować żadnego specjalnego oprogramowania na zdalnym urządzeniu, wystarczy przeglądarka internetowa (lub odtwarzacz muzyki), aby odtworzyć strumień. Minusem jest to, że jest to tylko dźwięk, kilka sekund opóźnienia czyni go bezużytecznym dla filmów

  1. Znajdź nazwę wyjściową pulseaudio za pomocą:

    pactl list | grep "Monitor Source" 
    
  2. Uruchom serwer VLC http, zastępując XXXX nazwą wyjściową:

    cvlc -vvv pulse://XXXX --sout '#transcode{acodec=mp3,ab=128,channels=2}:standard{access=http,dst=0.0.0.0:8888/pc.mp3}'
    
  3. W razie potrzeby znajdź swój lokalny adres IP za pomocą ifconfig

  4. Na urządzeniu zdalnym skieruj przeglądarkę (lub aplikację do przesyłania strumieniowego dźwięku) na:

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

Uwaga: na strumień nie ma wpływu wolumin ustawiony na serwerze, chyba że całkowicie go wyciszysz. W razie potrzeby możesz utrzymać poziom nieco powyżej 0, aby słyszeć tylko zdalne urządzenie.


Pierwsze dwa kroki połączone w jeden przez 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}'
wilks
źródło
1
niesamowite! Jest 3 sekundy opóźnienia, ale cieszę się z tego małego hacka, dopóki nie znalazłem tego cholernego kabla. Prawdopodobnie będę musiał kupić kolejny ...
Slabo,
@Slabo dobra uwaga, z jakiegoś powodu błędnie założyłem, że OP chciał tylko przesyłać strumieniowo muzykę.
Edytowałem
2
Jednowierszowy zamiast dwóch pierwszych wierszy: 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
Strumień jest bezpośrednio zależny od ustawienia głośności dla mnie. Po prostu podłączam słuchawki, aby dźwięk nie dochodził z laptopa.
Rolf
Nawiasem mówiąc, jak mogę zatrzymać opóźnienie trwające około 1/2 godziny?
Rolf
9

Aby przesyłać strumieniowo wyjście audio przez Wi-Fi na telefon z Androidem, musisz zainstalować oprogramowanie serwera, które wysyła dźwięk, na PC i oprogramowanie klienckie na urządzenie z Androidem. Dostępne opcje to

Bezprzewodowy głośnik WiFi Audio

Uruchom aplikację WiFi Audio Android i naciśnij Start, zobaczysz adres IP urządzenia mobilnego na dole po uruchomieniu aplikacji Windows / Linux i umieść adres IP urządzenia mobilnego w polu adresu IP, a następnie naciśnij start w aplikacji na PC. Teraz cały dźwięk wychodzący z komputera zostanie przesłany na urządzenie mobilne, a dźwięk będzie słyszalny na urządzeniu mobilnym.
Ściągnij

SoundWire

Bezprzewodowo przesyłaj dowolną muzykę lub dźwięk z komputera na telefon, tablet lub inne komputery z Androidem.
Strona główna Zobacz także

Inne przydatne linki
XBMC android SE

Totti
źródło
SoundWire opóźnia się o 1-2 sekundy
Gaurav Gupta
@gauravgupta Bez opóźnień, jeśli wybierzesz mniejszy rozmiar bufora. Spróbuj także użyć kompresji. To działało dla mnie bardzo dobrze.
raacer
czy możesz umieścić tutaj link do pobrania aplikacji WiFi Audio na PC?
oglądał
1
Bezprzewodowy głośnik WiFi Audio został usunięty z github, a skompilowana wersja na forach jest zgłaszana przez użytkowników jako szkodliwe oprogramowanie. Bądź ostrożny! Soundwire również wygląda podejrzanie ze względu na sposób dystrybucji.
Genom,
0

Dla tych, którzy używają Soundwire i wysyłają Wi-Fi ze swojego laptopa lub komputera, używając ifconfig UPEWNIJ SIĘ, ŻE KORZYSTASZ PRAWIDŁOWY ADRES IP. To nadal działa do dziś, ale większość dystrybucji Linuksa potrzebuje drugiego adaptera Wi-Fi, aby wysłać Wi-Fi i musisz użyć tego, do którego podłączony jest Android. nie ten, który otrzymuje Internet. Ten, który go wysyła.

tzn. -> Jeśli używasz adaptera Wi-Fi „A” do łączenia się z Internetem i „B”, aby wysyłać Wi-Fi z „A”, podłącz SoundWire na Androidzie do „B” NIE „A”.

SoundWire NIE będzie się łączyć lub przesyłać strumieniowo, jeśli podłączysz się do adaptera, który nie wysyła Wi-Fi, więc wprowadź odpowiednio swój adres IP do aplikacji Andoroid, używając odpowiednio polecenia terminalowego ifconfig.

Tak, istnieje opóźnienie, ale ta aplikacja, SoundWire, jest najprostszym dostępnym systemem „podłączania wielu urządzeń do sieci IP i zapomnienia”. Brak szalonych menu do przejścia. I tak, akceptuje więcej niż jedno połączenie. Użyłem 2 innego dnia. Dodaje liczbę podłączonych do niego urządzeń w głównym oknie urządzenia wysyłającego transmisję.

Używanie tego osobiście jako systemu radiowego Wi-Fi w wielu pokojach / na krótkie odległości w moim miejscu do dnia dzisiejszego.

Cieszyć się.

Roiikka
źródło
-4

Wow, to jest stare ...

W każdym razie użyj VLC. Całkiem ładne GUI.

  • Odpal VLC na pulpicie.
  • Hit Stream, wybierz plik (dodaj ile plików chcesz), hit stream.
  • „Dalej”, jeśli wszystko jest poprawne.
  • W polu Nowy cel wybierz „http” (lub cokolwiek, czego chcesz użyć). Wybierz opcję Wyświetl lokalnie, jeśli chcesz odtwarzać ją również na komputerze, z którego strumieniujesz. Kilka następnych dialogów nie wymaga wyjaśnień.

Uruchom VLC na urządzeniu z Androidem. Kliknij ikonę obok przycisku wyszukiwania (strzałka wskazująca kropkę). wpisz http://<IP ADDRESS O OF THE MACHINE RUNNING VLC>:8080/dla mnie to byłohttp://xxx.ca:8080/

Testowane i działające. Czy można to zrobić w czasach starożytnych z 9 czerwca 2013 r.? Może, ale jestem zbyt leniwy, by sprawdzać dzienniki wysyłania VLC;)

Zeroedout
źródło
3
Nie szuka rozwiązania do przesyłania strumieniowego muzyki / wideo.
Cristian Ciupitu