Sada je: 28 ožu 2024, 09:24.
Audio, video, codeci...

Moderator/ica: Moderatori/ce

Ljudi moji, nadam se da ste dobro.

Malo sam tražio, na ovom forumu ne vidim sličan topic, a i na internetu ih nema baš puno. Pošto sam uložio nešto truda, a uložit ću ga još, red bi bio to podijeliti. Prošle godine sam kupio i testirao Raspberry Pi 4 u nadi da ću ga pretvoriti u neki multimedia player. Na kraju, nakon puno uzbuđenja i "šarafljenja" po hardwareu i softwareu, ispostavilo se da je to i dalje tipični pokućni Linux projekt - zanimljiv, jedinstven, zabavan, ali nikada ne baš tako dobar kao što bi trebao biti. Daleko je to od nekog profesionalnog proizvoda i plug and play principa. U nekim trenucima sam se sjetio 2010. kada sam se prvi puta uopće susreo s Linuxom, tada je to bio preveliki šok za mene tako da sam se bio vratio na dobro poznate Windowse. Bio sam kao neko dijete koje se opeklo na ringlu pa to isto zlo više nije diralo. :D

Hardware na kojem se trenutno igram:

Raspberry Pi 4 Model B 8 GB + Onyx Producer 2-2 DAC
Custom desktop PC s Windows 10 Pro 20H2
Notebook Lenovo ThinkPad T480 s Fedora 34 Linuxom
Notebook Lenovo ThinkPad T580 s Windows 10 Pro 20H2
Smartphone Huawei Mate 10

Naravno, ovo dole je moguće odraditi i u virtualnom okruženju, tipa WSL, QEMU, VirtualBox,... Samo prilagodite IP adrese i nazive interfacea, drugih razlika nema.

Prvo sam se mučio oko izbora OS-a za RPi, srećom, "instalacija" raznih distribucija na SanDisk Extreme 128 GB karticu je išla jako brzo pa to nije dugo trajalo. Izbor je pao na Ubuntu Server 20.04.2 LTS + Desktopify skriptu za konverziju u Desktop verziju gdje sam odabrao MATE desktop environment. Autor skripte inače radi za Canonical tako da je provjereno sigurna. Proces instalacije skripte je jednostavan i trajao je otprilike pola sata.

Linkovi za download i više informacija:

Ubuntu Server > https://ubuntu.com/download/raspberry-pi
Desktopify > https://github.com/wimpysworld/desktopify

Nakon inicijalnog tweakanja sustava po vlastitim željama, instalacije nekih osnovnih paketa i rješavanja popratnih problema, bacio sam se u razmišljanje kako izvesti u naslovu spomenuti streaming. Da odmah odgovorim, ne zanimaju me DLNA, UPNP i slična rješenja koja rade samo s određenim aplikacijama i samo kroz određenu vrstu konekcije. Htio sam nešto što radi sa svakom aplikacijom i sa svakim OS-om, po mogućnosti preko žice odnosno LAN-a. Na neki način sam to i dobio uz pomoć PulseAudio servera koji je prisutan u velikom broju distribucija pa ajde da raspletem sve što sam izveo.

Streaming Windows 10 > (W)LAN > Raspberry Pi > USB > DAC > pojačalo i zvučnici

Za streaming s Windowsa 10 sam odabrao Scream - projekt s GitHuba koji se oslanja na PulseAudio pošto PulseAudio nema Windows klijent, a WinESD projekt je davno stao s razvojem pa se nisam htio mučiti nečime što nema nikakve budućnosti i upitne je funkcionalnosti na novim Windowsima (https://www.freedesktop.org/wiki/Softwa ... udioclient).

Link za download i instalaciju Screama > https://github.com/duncanthrax/scream

Na Windows mašini sam instalirao sender:

https://github.com/duncanthrax/scream/releases

Napomena: u trenutku pisanja teksta je najnovija verzija bila 3.6. Na početnoj stranici se spominju problemi sa secure bootom i upgradeanim Windowsima, međutim, te probleme nisam susreo iako sam ga više puta reinstalirao. Ako budete imali problema, pokušajte držati lijevi SHIFT, kliknuti restart i u izborniku koji se pojavi odabrati Disable Driver Signature Enforcement. Na stranici GitHuba također postoje neka rješenja.

ZIP arhivu sam spremio u Downloads (kod vas je možda drugi directory, nebitno), a zatim raspakirao:

slika

Pokrenuo Command Prompt kao administrator (elevated mode):

slika

Pokrenuo skriptu Install.bat (tu me tražio još jednu potvrdu za unsigned driver, ali nažalost nisam screenshotao, budem u VM-u pa updateam topic) i to je to:

slika

Nakon toga se pojavio novi audio izlaz odnosno virtaulna zvučna kartica i postavljena je kao glavna:

slika slika slika

Zatim sam DAC prebacio na Raspberry Pi te instalirao receiver. Odabrao sam Applications directory u Homeu jer tu spremam i pokrećem sve pakete koje skidam izvan repositorya, ali vi ga možete smjestiti gdje hoćete, može i u Home jer root nije potreban.

Kod: Označi sve
mkdir ~/Applications
cd ~/Applications
sudo apt update
sudo apt install libpulse-dev cmake make git
git clone https://github.com/duncanthrax/scream.git
cd scream/Receivers/unix/
mkdir build && cd build
cmake ..
make


Napravio rule u ufw firewallu (preskočite ako vam je isključen):

Kod: Označi sve
sudo ufw allow 4010/udp


Ili ako koristite firewalld:

Kod: Označi sve
sudo firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 11 -p udp --dport 4010 -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT
sudo firewall-cmd --reload


Radi testa, pokrenuo sam Scream s verboseom i odredio mu LAN interface (zamijenite eth0 sa svojim):

Kod: Označi sve
./scream -vi eth0

# Using Pulseaudio output
# Starting unicast receiver


Rekao sam to je to, pokrenuo player sa stranim hitovima, međutim, glas iz metalne kante je progovorio da neće moći ove noći, odlučio me mučiti još malo. Muzike naravno nigdje nije bilo. Bacio se na troubleshoting i vidio da se multicast paketi šalju sa svih interfacea, samo ne odakle trebaju, a to je LAN (imam još VirtualBox i VPN).

slika

Srećom, Scream se može namjestiti da "puca" na jednu IP adresu odnosno unicast pa sam dodao registry key s IP addresom Raspberrya.

slika slika

Kôd niže možete kopirati, zalijepiti u Notepad, staviti IP adresu svog Raspberrya, spremiti kao scream_unicast.reg i importati u registry.

Kod: Označi sve
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Scream\Options]
"UnicastIPv4"="10.17.25.113"
"UnicastPort"=dword:00000fab


Potom restartao ljutu mašinu i namjestio firewall za novi port i IP adresu Raspberrya.

slika slika

Na Raspberryu dodao nove argumente za Scream kako bih ga prilagodio novonastaloj situaciji:

Kod: Označi sve
./scream -uvp 4011 -i eth0


Ponovno pokrenuo player, ovaj puta sam stavio najnovije hitove s Balkana i voila, zagrmilo je iz JBL Pro zvučnika. Bacio brzi pogled u terminal, status je dobio još jedan redak:

Kod: Označi sve
# Using Pulseaudio output
# Starting unicast receiver
# Switched format to sample rate 48000, sample size 32 and 2 channels.


Tcpdump gori od navale paketića narodne muzike:

Kod: Označi sve
sudo tcpdump

12:17:37.770334 IP DOMY-PC.4011 > domy-pi.4011: UDP, length 1157
12:17:37.780084 IP DOMY-PC.4011 > domy-pi.4011: UDP, length 1157
12:17:37.780182 IP DOMY-PC.4011 > domy-pi.4011: UDP, length 1157
12:17:37.780385 IP DOMY-PC.4011 > domy-pi.4011: UDP, length 1157
12:17:37.790090 IP DOMY-PC.4011 > domy-pi.4011: UDP, length 1157
12:17:37.790214 IP DOMY-PC.4011 > domy-pi.4011: UDP, length 1157
12:17:37.790365 IP DOMY-PC.4011 > domy-pi.4011: UDP, length 1157
12:17:37.790745 IP DOMY-PC.4011 > domy-pi.4011: UDP, length 1157
12:17:37.800056 IP DOMY-PC.4011 > domy-pi.4011: UDP, length 1157
12:17:37.800127 IP DOMY-PC.4011 > domy-pi.4011: UDP, length 1157


Zatim bacio pogled na sound applet i osmijeh na licu se još malo povećao. Kao što se vidi, novi klijent se pojavio među aplikacijama.

slika slika slika

Dobro, sada kada konačno sve radi, priveo sam ovaj korak kraju i napravio servis kako bi se Scream pokrenuo automatski nakon prijave na Raspberry.

Kod: Označi sve
sudo nano /usr/lib/systemd/user/scream.service


Zalijepio sam sljedeće (vi prilagodite ExecStart za svoju putanju, port i interface):

Kod: Označi sve
[Unit]
After=graphical.target
ConditionUser=!root
Description=Scream
Wants=pulseaudio.service

[Service]
ExecStartPre=/bin/sleep 15
ExecStart=/home/domy/Applications/scream/Receivers/unix/build/scream -up 4011 -i eth0
Restart=on-failure
Type=simple

[Install]
WantedBy=default.target


Nakon toga reloadao systemd daemon, uključio Scream u startupu i pokrenuo servis (sve ide bez sudo!):

Kod: Označi sve
systemctl daemon-reload --user
systemctl enable --now --user scream.service


Napomena: u ovoj verziji Ubuntua se PulseAudio pokreće pod userom, ne kao system service, iz tog razloga sam i Scream stavio kao user service, inače se ne bi mogao pokrenuti.

Testirao sam oporavak Screama "ubijanjem" PulseAudio servisa, sve radi, sve se zeleni.

slika

Top i System Monitor nisu pokazivali neko značajno opterećenje slabašnog Raspberrya:

slika slika

Šećer na kraju, nakon restarta RPi-a ili PC-a nije potrebno ništa raditi, sve se automatski pokrene, vaše je samo da se prijavite u user account (ili namjestite autologon). Glasnoća se može regulirati na svim mjestima, znači PC, RPi i eventualno vanjski DAC, ako ga imate. Moguće je streamanje s više klijenata odjednom, u mom slučaju je u isto vrijeme radio player na Windowsima i na Raspberryu.

Toliko za sada, nadam se da je nekome bilo korisno, veliki pozdrav, čuvajte se i sve najbolje!

Nedovršeno: Streaming Linux > Raspberry Pi > USB DAC

Nedovršeno: Streaming Linux > Windows 10 > USB DAC

Nedovršeno: Streaming Android > Raspberry Pi > USB DAC
Avatar
Postovi: 228
Postovi: 228
Pridružen/a: 11 srp 2020, 20:09
Podijelio/la zahvalu: 11 puta
Primio/la zahvalu: 52 puta
Spol: M
OS: Linux Fedora
Nemam blage veze s ovom temom, ali tekst mi djeluje impresivno! :bravo
Avatar
Postovi: 1058
Postovi: 1058
Pridružen/a: 27 ruj 2012, 12:39
Podijelio/la zahvalu: 86 puta
Primio/la zahvalu: 149 puta
Spol: M
OS: Kubuntu 22.04, Debian 12

Na mreži
Trenutno korisnika/ca: / i 10 gostiju.