Voila, es laeuft. 4HD streams von der fritzbox ohne Ruckler!
Auf der FB, folgendes script um die UDP TS streams auf einen externen Rechner zu forwarden:
Code:
export LD_LIBRARY_PATH=`pwd`
export UDEST0=192.168.0.40:9000
export UDEST1=192.168.0.40:9001
export UDEST2=192.168.0.40:9002
export UDEST3=192.168.0.40:9003
./cableinfo_p -f
Dann vier virtuelle interfaces anlegen (um das 1 stream pro Rechner Problem zu umgehen):
Code:
/sbin/ifconfig lan:20 192.168.20.1
/sbin/ifconfig lan:30 192.168.30.1
/sbin/ifconfig lan:40 192.168.40.1
/sbin/ifconfig lan:50 192.168.50.1
Das gleiche auf einem Windows PC: 4 virtuelle interfaces auf 192.168.20.2/30.2/40.2/50.2
Ein Linux Rechner (192.168.0.40) bekommt die TS streams auf ports 9000-9003, und schickt sie weiter an dem Windows Rechner:
Auf dem Linux rechner laeuft dvblast vier mal:
Code:
./dvblast -D 192.168.0.40:9000/udp -c cfg1&
./dvblast -D 192.168.0.40:9001/udp -c cfg2&
./dvblast -D 192.168.0.40:9002/udp -c cfg3&
./dvblast -D 192.168.0.40:9003/udp -c cfg4&
Die cfg files enthalten:
(bzw. 9001, 9002, 9003) um die einkommenden UDP streams auf die entsprechenden ports nach 192.168.0.57 (Windows PC) weiterzuleiten.
Dort jetzt "nur" noch VLC 4 mal separat mit folgender URI starten (Diese VLC instanzen bekommen kein Bild).
Code:
rtsp://192.168.20.1:554/?freq=522&bw=8&msys=dvbc&mtype=256qam&sr=6900&specinv=0&pids=0,16,17,18,20,5110,5111,1270,1276,5112,5113,5114,5115,5116,5117,5118,5119
Das ist die URI der m3u files die man von der FB bekommt, wobei nur die IP addresse geändert ist. Das ganze muss man mit vier HD sendern machen, jeweis mit einer anderen IP aus dem jew. Subnetz.
192.168.0.40 bekommt jetzt die UDP streams, und schickt sie zurueck. Jetzt
nochmal vier VLC instanzen, mit den Netzwerk URIs als Quelle:
rtp://@:9000
rtp://@:9001
rtp://@:9002
rtp://@:9003
CPU last auf Atom ist ca. 45%.
Das Setup ist mit Sicherheit VIEL zu kompliziert, aber das Ziel von 4 HD streams ist erstmal erreicht.. Den Rest ueberlasse ich erstmal den DVB/tvheadend Experten (kann das direkt einen UDP TS stream empfangen?).
Weiteres Optimierungspotenzial:
- Momentan schickt die library noch eines von 20 paketen an cableinfo. Das ist nötig damit dort kein timeout abläuft. Muss noch sehen wie ich das eliminiere.
- Die 20 Pakte pro Block werden einzeln mit sendto() geschickt. Mit einem grossen TCP/UDP burst des ganzen Blocks wird es nochmal wesentlich effektiver, aber damit kommt z.B. dvblast nicht zurecht.
- Die Vergabe der UDP destinations über setenv ist etwas poplig, aber mir ist auf die schnelle nichts besseres eingefallen.