Czy istnieje sposób na przesyłanie strumieniowe obrazu wyjściowego karty dźwiękowej z naszego pulpitu LTS amd64 12.04.1 na urządzenie zewnętrzne zgodne z DLNA w naszej sieci? Wybieranie treści multimedialnych w udostępnianych katalogach za pomocą Rygel, miniDLNA i uShare jest zawsze w porządku - ale jak dotąd nie udało nam się uzyskać strumienia audio na żywo do klienta za pośrednictwem DLNA.
Pulseaudio twierdzi, że ma serwer mediów DLNA / UPnP, który razem z Rygel powinien to zrobić. Ale nie udało nam się go uruchomić.
Wykonaliśmy kroki opisane w live.gnome.org , tę odpowiedź tutaj, a także w innym podobnym przewodniku .
W 12.04 LTS możemy wybrać lokalne urządzenie audio lub nasz strumień GST-Launch w kliencie DLNA, ale Rygel wyświetla następujący komunikat i klient stwierdza, że osiągnął koniec listy odtwarzania:
(rygel:7380): Rygel-WARNING **: rygel-http-request.vala:97: Invalid seek request
Na kliencie nie było sposobu na słuchanie strumieni audio na żywo.
Dopiero po aktualizacji dystrybucji do 14.04 LTS byliśmy w stanie wybrać transmisję na żywo na naszych rendererach DLNA z ustawień ładnie opisanych w poniższej odpowiedzi . Musieliśmy jednak wybrać ustalony strumień po rozpoczęciu Rygel i nie byliśmy w stanie zepchnąć nowego strumienia do naszych urządzeń UPnP. Metadane audio nie zostały przesłane.
Czy istnieją inne alternatywy dla przesyłania dźwięku z naszej karty dźwiękowej jako strumienia na żywo do klienta DLNA?
Odpowiedzi:
Pulseaudio-DLNA
Stworzyłem mały serwer, który wykrywa wszystkie renderery upnp w twojej sieci i dodaje je jako ujścia do pulseaudio. Dzięki temu możesz kontrolować każdą aplikację za pomocą pavucontrol, aby grać na urządzeniach UPNP.
Tego rodzaju wygody zawsze chciałem mieć do czynienia z urządzeniami upnp w systemie Linux.
Aplikację można zainstalować ze źródła lub pakietu DEB do pobrania z git lub po dodaniu do naszych źródeł oficjalnej ppa: qos / pulseaudio-dlna projektu:
Następnie uruchamiamy pulseaudio-dlna z wiersza poleceń z następującymi opcjami:
Zobacz także pulseaudio-dlna „About”, aby uzyskać więcej.
Gdy obecny był renderer DLNA, możemy go wybrać z menu dźwięku jako zlew wyjściowy:
źródło
python-requests
jako zależności i mogliśmy wybrać renderer z domyślnych kontrolek audio - nie trzeba instalować pavucontrol.Pavucontrol to brakujący element tej układanki! Ustawiłem też wszystko poprawnie, a urządzenie zewnętrzne (telewizor LG) pokazywało, że dźwięk jest odtwarzany, ale nie słyszałem żadnego dźwięku. Dzisiaj zainstalowałem pavucontrol i kiedy go otworzyłem, znalazłem opcję kierowania dźwięku przez serwer DLNA. Opcja DLNA jest wyświetlana tylko wtedy, gdy dźwięk jest odtwarzany przez odtwarzacz do pulseaudio.
źródło
Invalid seek request
od Rygla. Są tam katalogi medialne, ale mój strumień GST jest zawsze EOF.Przykro mi, że nie mogę w ogóle pomóc Rygelowi, ale może istnieć alternatywa, która może Ci pomóc.
Zasadą jest, aby program nagrał strumień do pliku audio, a następnie uruchom miniDLNA z niestandardową konfiguracją, która wskazuje katalog, w którym znajduje się strumień.
Przykład: Powiedzmy, że pracujemy w ~ / stream /. Utwórz ~ / stream / minidlna.conf
Następnie zapisz strumień do pliku audio w tym katalogu. Googling dla „FFmpeg nagrywanie dźwięku karty dźwiękowej” dał to polecenie
ale nie miałem z tym dużo szczęścia. Inną opcją jest vlc, jeśli masz GUI i to nie działa.
Następnie uruchom miniDLNA w innym oknie terminala:
To powinno znaleźć OutputStream.flac a następnie być dostępne z urządzeniem sieciowym.
Mam nadzieję, że jeśli jeszcze tego nie rozwiązałeś, masz kilka pomysłów.
źródło
Jednym z pomysłów, które musiałem przesyłać strumieniowo „to, co słyszę” do renderera DLNA (takiego jak WDTV), było serwerowanie strumienia za pomocą VLC jako strumienia HTTP
pulse://alsa_output.xxx.monitor
jako wejściowego i transkodowanie go do formatu MP3 lub FLAC. Następnie chciałem użyć punktu kontrolnego DLNA, aby renderer mógł odtwarzać strumień. VLC obsługuje poprawnie transkodowany strumień, ale nie pozwala ustawić typu MIME, więc renderer odmawia jego odtworzenia.Następnym pomysłem było napisanie serwera http w pythonie, który zamiast tego obsługuje strumień. Pobiera strumień audio z impulsu za pomocą
parec
, koduje go za pomocąflac
(lame
lub cokolwiek chcesz) i poprawnie ustawia typ MIME.Działa z następującym (bardzo prostym) skryptem:
Dostosuj parametry, uruchom go i skieruj renderer DLNA na swój komputer. Działa to dla mnie z WDTV jako rendererem i telefonem z Androidem z BubbleUPnP jako punktem kontrolnym (możesz wpisać URL strumienia podczas ręcznego dodawania nowego elementu do listy odtwarzania). Ale powinien działać z każdym urządzeniem zgodnym z DLNA.
źródło
UWAGA: To rozwiązanie działa, ale Massimo zaproponowało nowsze i prawdopodobnie lepsze rozwiązanie .
Oto odpowiedź na Ubuntu 14.04 (również przetestowana i działająca 15.04 ), dla kompletności:
zainstaluj potrzebne pakiety:
sudo apt-get install rygel rygel-preferences rygel-gst-launch
utwórz plik
~/.config/rygel.conf
zawierający następujące elementy:Wykonaj następujące polecenia z wiersza poleceń (w razie potrzeby można je umieścić w skrypcie):
Uruchom
paprefs
polecenie i upewnij się, że obie opcje DLNA są włączone (zaznaczone) na karcie „Serwer sieciowy”.Odtwórz dźwięk na komputerze. Uruchom
pavucontrol
program i na karcie „Odtwarzanie” zmień urządzenie wyjściowe na „Streaming DLNA / UPnP”.W tym momencie powinieneś być w stanie odtwarzać strumienie MPEG i FLAC z klienta DLNA (renderer / punkt kontrolny).
UWAGA: może być konieczne ponowne uruchomienie komputera (lub ponowne uruchomienie pulsu), aby wszystko zaczęło działać.
źródło
Skrypt Pythona od Adama jest właśnie tym, czego potrzebowałem. Znakomity. Rygel z gst-launch nie działa z jednym z moich rendererów, ale ten skrypt działa z oboma. W moim przypadku pobieram strumień audio z squeezelite (dla squeezebox) i wysyłam do renderera. Skrypt działa również w oryginalnej formie, jeśli pobiera dane z monitora pulseaudio, jeśli jest to potrzebne.
Niewiele o tym wiedząc, udało mi się wprowadzić kilka dodatków do skryptu, które:
i) zezwól na uruchomienie go ze skryptu powłoki i zakończenie z SIGTERM / SIGKILL (instrukcja „oprócz” obejmuje teraz „systemexit”)
ii) umożliwia zatrzymanie i ponowne uruchomienie skryptu oraz ponowne użycie tego samego portu (ponieważ był to zrestartowany skrypt, którego działanie zwykle kończyło się niepowodzeniem, mówiąc, że nie można otworzyć portu, jeśli moduł renderujący nadal go miał otwarty) - (instrukcja allow_reuse_address = True)
iii) stwórz wersję, która pobiera dane wejściowe ze standardowego wejścia i ponownie próbkuje je, używając sox do wyświetlania w formacie wav (na porcie 8082)
Moja wersja wygląda więc tak:
źródło
Nie jestem pewien, czy będzie to dla ciebie przydatne teraz, ale napisałem post o tym, jak to działa na Ubuntu 12.10:
http://dpc.ucore.info/blog/2012/11/07/dlna-streaming-in-ubuntu-12-dot-10/
źródło