Snabbguide: Streama dreambox över nätverk med VLC i Unix

I denna guide kommer jag att ge er tips på hur ni kan streama bild och ljud från er dreambox med hjälp utav VLC. Denna guide använder sig inte utav dreamboxens transportström (port 31339, "webtv-interfacet") utan tar bild och ljud från port 31338 och bakar ihop det till en transportström som sedan VLC streamar vidare till klienter över nätverket. Dreamboxens egna transportström fungerar tyvärr inte allt för bra på många kanaler, anledningen till det har jag inte forskat i men gissningsvis kan det bero på dreamboxens klena hårdvaruspecifikationer.

I mitt exempel kommer jag att omkoda dreamboxens råa bildformat till mpeg4, skala ner bilden med 25%, och sänka bitraten för att klienter med lägre bandbredd även skall kunna titta på bilden utan problem.
Ljudet kommer att komprimeras med mpeg4, använda två kanaler med 128 kbit/s bitrate.

Några funktioner jag ej kommer att ta upp är hur ni streamar DTS ljud samt textning. VLC kan hantera text både som separat textspår (som på en DVD), eller lägga texten över videoinformationen (som en subbad film).
VLC har många andra roliga funktioner, ni kan t ex lägga in er egna logga över bilden, med transparans och alpha-kanal, samt via RSS-strömmar visa textmeddelanden över bilden som visas under en definerad tid. Allt en hobbypirat behöver.

Mjukvara som behövs:

Videolan client, VLC: http://www.videolan.org/vlc/
ggrab: http://getto.dyndns.org/dbox2/backup/ggrab/

Jag kommer inte att gå igenom hur ni installerar dessa program, förhoppningsvis har ni det i paketform - eller så är ni mobbade som undertecknad och får kompilera själv.
Överlägset, då kör vi igång.

Grovt så fungerar vår lösning som följande.
ggrab strömmar bild och ljud från din dreambox över nätverket, bakar ihop informationen till en mpeg2 transportström som VLC kan hantera och skickar det till VLC som i sin tur (i vårat exempel) komprimerar om informationen till valfritt format, och agerar streamserver åt klienterna. Super simpelt.

Kommandot i sin helhet:

Kod:
ggrab -host 192.168.1.1 -q -o - -p 0x1000 0x1100 | vlc -  :sout="#transcode{vcodec=mp4v,vb=2048,scale=0.75,acodec=mp4a,ab=128,channels=2}:duplicate{dst=std{access=http,mux=ts,url=:1234}}" -I http
0x1000 i ggrab kommandot är video-piden, och den efterföljande är ljud-piden. Vilka pidar som skall in där för olika kanaler kan man enklast hämta ifrån http://192.168.1.1/cgi-bin/streaminfo, förslagsvis kan ni scripta det med curl och sed/awk. "-o -" parametern säger åt ggrab att skicka all data till stdout, som standard skapar ggrap mpeg-filer vilket är användbart om ni vill spela in program från dreamboxen.

"-" parametern i VLC fungerar precis som "-o -" i ggrab fast omvänt, VLC läser in information från stdin från ggrab.
#transcode{} parametern bestämmer hur VLC skall koda om video- och ljud-informationen. Man kan enkelt generera fram alla parametrar i VLC genom inställingarna för "Stream output" med GUIt. Denna del kan helt tas bort om ni vill strömma bilden i sitt originalutförande, något som är bra om ni har en klen maskin som skall agera server.

duplicate{} parametern startar själva server-delen, i detta fall genom http på serverns port 1234.
Dom två sista parametern aktiverar VLCs http interface, denna är helt frivillig att använda.

Svårare än så här behöver livet inte vara ibland, nu är det bara att knappa in adressen till servern och njuta av din dreambox vart du än är i världen. Adressen i vårat exempel blir http://192.168.1.2:1234/ (vår dreambox är 192.168.1.1 och servern är 192.168.1.2).
Bilden släpar lite för mig, men det är helt klart mindre irriterande än hur originalbilden kan uppträda genom originalströmmen via dreamboxens port 31339. Denna släpning förekommer inte om jag använder ett DVB-C kort som källa, så det bör vara ggrab som skapar dessa.

Med vänliga hälsningar, Joakim "tajson" Gissberg
joakim at gissberg punkt nu

Tips: Om eran server av någon anledning krashar kan ni lägga kommandot i en oändlig while-loop:

Kod:
while true; do starta_server.sh; sleep 5; done