Raspberrystä videostriimiä Enigma2:lle

Sivustoa
		sponsoroi SatShop.fi

JKJ

Huoltovalikon jäsen
Sijainti
Hikiä
Laitteisto
Vu+ Duo 4K SE
OpenViX 6.2 | DVB-T Digita | IPTV smartiuse.com
Yritin googlettaa mitä vaihtoehtoja olisi videostriimin lähettämiseen Raspberrystä Enigmaan. Linux-pohjaisia avoimia videoservereitä on useita, mutta ongelmaksi muodostuu Raspberryn tehon puute.

ffserver on kevyt ratkaisu, mutta se ei (ainakaan helposti) tue lähetettävän materiaalin vaihtamista/ lisäämistä lennosta.
HLS on tietysti kuin tehty tekniikka tähän. Sitä pystyy uudemmilla ffmpeg-soittimilla tuottamaan helposti.
Ensin tosiaan Raspberryyn pitää uudempi ffmpeg asentaa vaikkapa tämän ohjeen mukaan pakettilähteitä muokkaamalla ja sitten komentamalla:
Koodi:
sudo apt update && sudo apt install -y -t buster ffmpeg

Muutan tiedostot valmiiksi mp4-muotoon, niin että keyframet on sekunnin välein. Itse striimaus-vaiheessa ei näin ollen tarvitse enää transkoodata, pelkkä tiedoston pilkkominen sekunnin siivuiksi riittää.
Koodi:
ffmpeg -y -i alkuperäinen.mp4 -r 25 -crf 20.0 -vcodec libx264 -filter:v scale=w=720:h=576 -preset ultrafast -acodec aac -strict experimental -ar 48000 -b:a 128k -coder 1 -g 25 -threads 0 muutettu.mp4
Keyframeilla on se merkitys, että striimaus-vaiheessa ffmpeg striimin vaihtuessa vaihtaa sen aina keyframen kohdalla. Eli jos keyframet on sekunnin välein, periaatteessa striimi voidaan vaihtaa sekunnin viiveellä.

Nyt kun tiedostot on tuossa muodossa, itse HLS-striimin lähettäminen onnistuu yksinkertaisesti:
Koodi:
ffmpeg -loglevel panic -re -i muutettu.mp4 -codec: copy -hls_time 1 -hls_list_size 3 -hls_flags delete_segments+append_list+omit_endlist -f hls /tmp/hls/stream.m3u8
Striimiä pystyy lennosta muokkaamaan miten haluaa, muutaman sekunnin viiveellä. Tapetaan vain ffmpeg ja avataan uusi, joka tallentaa samaan paikkaan /tmp/hls/stream.m3u8.


Tietenkin tarvitaan Raspberryssä pyörimässä www-palvelin, joka varsinaisesti tuota HLS-striimiä palvelee eteenpäin.
Itsellä Nginx ja olen lisännyt sen konffiin tuon /tmp/hls -hakemiston asetuksissa:
kohdassa http:
Koodi:
server {
    location /hls {
        root /tmp;
        add_header Cache-Control no-cache;
    }
}


Enigma2-boksissa striimin saa kanavalistalle näin:
Koodi:
#SERVICE 4097:0:0:0:0:0:0:0:0:0:http%3a//192.168.1.16/hls/stream.m3u8:Raspi3-player4097

Tein Pythonilla pienen soittolista-projektin. Ohjelma lukee soittolista-tiedostoa ja soittaa aina listan ylimmän rivin. Kun se on soitettu, poistetaan ylin rivi, siirretään muut rivit yhtä ylemmäksi ja soitetaan taas ylin rivi. Tätä jatketaan kunnes soittolista loppuu.

Seuraavaan videoon siirtyminen kesken kaiken onnistuu yksinkertaisesti soittolistan ensimmäisen rivin poistamalla.

Jos video halutaan samantien toistaa, kirjoitetaan se soittolistan ylimmälle riville.

Jos lista on tyhjä tai listaa ei ole, toistaa ohjelma testikuva-videon, jonka oletetaan löytyvän paikasta /www/testikuva.mp4. Sijainti määrätään estriimaaja.cfg-tiedostossa.

Ohjelma on vielä aikalailla vaiheessa, mm. kaikenlainen varautuminen soittolistan virheellisiin syötteisiin puuttuu täysin.
Mutta tässä linkki zippiin, jos joku haluaa tutustua projektiin: estriimaaja

Tarkoitus on projektia jatkojalostaa niin, että Raspberry omatoimisesti hakee ohjelmia svtplay-dl:llä ja yle-dl:llä, transkoodaa ne oikeaan muotoon ja sitten soittaa ne haluttuna ajankohtana.
Ikään kuin oma tv-kanava, johon on koostettu vain itselle tarpeelliset ohjelmat ja ihmisen ei tarvitse kuin istua ruutukalsarit jalassa sohvalla ja katsoa!
(Voiko sitä omaa laiskuutta enää tämän enempää automatisoida?)
 
Takaisin
Ylös