Raspberry+ffmpeg transkoodaus

Sivustoa
		sponsoroi SatShop.fi

JKJ

Huoltovalikon jäsen
Sijainti
Hikiä
Laitteisto
Vu+ Duo 4K SE
OpenViX 6.2 | DVB-T Digita | IPTV smartiuse.com
(jatkoa kokeiluille ketjussa HD-Tallenteiden jatkojalostus Linuxilla, etenkin tekstitykset)


Rakentelin tässä tarpeeseen Raspberryssä toimivan transkoodaajan, joka käyttää ffmpegiä ja nginxiä. Eli ottaa striimin Enigma2-boksilta, transkoodaa ja lähettää nettiin (ja tietty lähiverkkoon).

Täytyi saada striimattua eri kanavia erilaisilla tekstitys- ääni- jne asetuksilla eteenpäin, niin päädyin ratkaisuun että on yksi konfiguraatiotiedosto, johon Enigma2-boksin striimit syötän manuaalisesti (/etc/kanavat.list).
Automaattinen kielivalinta kun ei oikein onnistu kun eri kanaville on niin erilaisia tarpeita. Esimerkiksi joillain kanavilla on tekstitys-raita suomelle, mutta siellä ei useimmiten ole tekstiä. Sen sijaan ruotsiksi kaikki
ohjelmat on tekstitetty, joten valitaan se. Näitä erilaisia sääntöjä olisi tullut niin paljon, että helpompi syöttää lähdestriimin tiedot käsin.

Periaate on yksinkertainen. Uudelle Raspberryn Raspbian Buster Lite asennnuksen muistikortille siirretään asennuspaketti

ja puretaan se sinne:
Koodi:
tar -xvf asenna-raspi-hls-server.tar

asennetaan: Tämä todellakin jyrää asetukset kyselemättä, joten älä käytä sellaiselle muistikortille, jossa on toimiva/ tärkeä asennus ennestään!
Koodi:
sudo ./asenna-raspi-hls-server


Skripti asentaa tarvittavat ohjelmat ja käynnistyksen jälkeen sen pitäisi olla toimintavalmis.
Ainoa tiedosto jota tarvitsee editoida, on se /etc/kanavat.list



Uloslähtevä striimi luodaan siinä vaiheessa, kun sitä pyydetään. Ja se palvelee sen aikaa kun sitä katsotaan. Kun striimillä ei katsojia ole tietyn ajan sisään ollut, se tapetaan.


Skriptissä /usr/bin/fsvalvo voi tarvittaessa tätä aikaa säätää. Oletuksena striimi tapetaan 30 sek sen jälkeen kun sillä ei ole enää katsojia. Uuden juuri luodun striimin tapauksessa odotetaan 90sek.

STRIIMIN PYYTÄMINEN
Koodi:
vlc '<raspi_ip>/stream.cgi?input=33'
VLC pyytää Raspberryltä striimiä. Raspberry luo striimin ja odottaa kunnes striimi on saatavilla ja sitten ohjaa VLC:n striimin varsinaiseen osoitteeseen.

Jos samaan aikaan tarvitaan useampia striimejä (ainakaan Raspberry 3:n tehot ei oikein riitä), niitä voi käynnistellä eri ulostulo-kanaville:
Koodi:
vlc '<raspi_ip>/stream.cgi?input=33&output=4'
pyytäisi käynnistämään striimin ulostulokanavalle 4. Ilman valintaa ulostulokanava on aina 0, mutta sen voi määrätä itse välille 0..9.

Striimien varsinaiset osoitteet joihin soitin uudelleenohjataan:

http://<raspi_ip>/hls/0/stream.m3u8
http://<raspi_ip>/hls/1/stream.m3u8
http://<raspi_ip>/hls/2/stream.m3u8
jne


Koodi:
                         [/dev/shm/komento]
                                 |
                                 |
[/etc/rc.local]-----[/usr/bin/autoexec]--------[/usr/bin/fsvalvo]
                                 |
                                 |
                           [/usr/bin/fstriimaa]
                                 |
                                 |
                       [/tmp/hls/<ch>]---------->[nginx]------->[http://<raspi_ip>/hls/<ch>/stream.m3u8]


Tuossa ffmpegissä mahdollisuus tehdä asioita on aika rajaton. Varsinkin tekstityksen liittämisen ja kuvan koon muutoksen järjestyksillä voi löytää paljon toista kevyempiä ratkaisuja.
Nuo kaanvat.list:ssä ei ole optimoitu vaan HD-kanavien kanssa tulee ongelmia että Raspberry ei vain jaksa noilla asetuksilla transkoodata. SD-kanavat kyllä onnistuu ihan ongelmitta.


Jos jollain on parempia parametrejä, niin vinkkejä otetaan mielellään vastaan!


kanavat.list rakenne:
2|NRK 1 Nordnytt|-y -re -c:v h264_mmal -i http://192.168.1.12:8001/1:0:19:1EB0:46:46:E080000:0:0:0: -map 0:v:0 -map 0:a:0 -b:v 1.5..

2=id, jolla kyseistä kanavaa pyydetään. Esim VLC antaa tämän input=2 -parametrinä
kanavan nimi
viimeisessä sarakeessa ffmpegille annettava komento ILMAN ulostulotiedoston nimeä.
 
Takaisin
Ylös