LiveTV funktioniert nicht

Hier geht's nur um das JtG-Team Image
Nachricht
Autor
Benutzeravatar
Pedant
admin-c
admin-c
Beiträge: 4285
Registriert: Mo 04 Aug 2003, 16:22
Wohnort: Bad Vilbel
Kontaktdaten:

Re: LiveTV funktioniert nicht

#16 Beitrag von Pedant » Fr 03 Jan 2014, 18:49

Hallo deerhunter,

keine neuen Erkenntnisse, aber eine Spielerei...

Ich hatte die nhttpd /control api doku wohl schon lange nicht mehr gelesen.

Dort habe ich heute einen "neuen", interessanten Parameter gefunden:
http://dbox/control/build_live_url

Die Ausgabe ist beispielsweise sowas:
http://dbox:31339/0,0x0064,0x0065,0x0066
also die Livebild-Url für den aktuellen Sender.
So kann man sich das Auslesen der PIDs, das Umrechnen in hexadezimal und das zusammenbasteln der URL sparen.

Ich hab damit was gebatcht.

Mit dem Batch kann man per Eingabe oder per Parameter die Wiedergabe des Livebildes eines angegebenen oder des aktuellen Senders starten.
Alternativ kann man sich eine komplette Senderliste als txt-Datei erzeugen lassen, damit man weiß, was man ansehen könnte.
Das ist weit entfernt vom Komfort den NeutrinoTV bietet oder auch nur überhaupt ein Programm zu sein und wird es auch bleiben.
Es ist einfach nur eine Eingabehilfe um die Wiedergabe mit VLC zu starten.

Code: Alles auswählen

@echo off

:config
set boxip=dbox
set wget_pfad=C:\Program Files (x86)\Tools\WGET
set vlc_pfad=C:\Program Files (x86)\VideoLAN\VLC

:parameter
set sender=%~1
if "%sender%"=="?"     goto hilfe
if "%sender%"=="-?"    goto hilfe
if "%sender%"=="/?"    goto hilfe
if "%sender%"=="h"     goto hilfe
if "%sender%"=="-h"    goto hilfe
if "%sender%"=="/h"    goto hilfe
if "%sender%"=="help"  goto hilfe
if "%sender%"=="-help" goto hilfe
if "%sender%"=="/help" goto hilfe
goto vlc_beenden

:hilfe
echo.
echo  Syntaxbeispiele:
echo  ---------------
echo  %~nx0
echo   (verwendet den aktuellen Sender)
echo.
echo  %~nx0 ZDF
echo   (verwendet ZDF)
echo.
echo  %~nx0 "Das Erste"
echo   (Sendernamen mit Leerzeichen muessen in Anfuehrungszeichen)
echo.
echo  %~nx0 senderliste
echo   (speichert alle Sendernamen in Sender.txt)
echo.
goto ende

:vlc_beenden
echo.
echo  VLC wird beendet...
tskill.exe vlc /a > nul
ping localhost -n 2 > nul
if "%sender%"=="senderliste" goto senderliste
if "%sender%"=="" goto frage
if not "%sender%"=="" goto umschalten

:senderliste
if exist Sender.txt del Sender.txt
"%wget_pfad%\wget.exe" "http://%boxip%/control/channellist" -q -O Sender1.tmp
for /f "tokens=1*" %%G in (Sender1.tmp) do echo %%H>> Sender2.tmp
type Sender2.tmp | sort > Sender.txt
echo.
echo  Die Liste aller Sender wurde als Sender.txt gespeichert.
goto ende

:frage
echo.
echo  Umschalten?
echo.
echo  Falls Umschalten erwuenscht, dann Sendernamen ohne Anfuehrungszeichen eingeben,
echo  falls nicht, dann nur [Enter].
echo.
set /p sender=
if "%sender%"=="" goto url_ermitteln
goto umschalten

:umschalten
echo.
echo  Es wird auf %sender% umgeschaltet...
"%wget_pfad%\wget.exe" "http://%boxip%/control/zapto?name=%sender%" -q -O nul
ping localhost -n 2 > nul

:url_ermitteln
"%wget_pfad%\wget.exe" "http://%boxip%/control/build_live_url" -q -O url.tmp
set /p url=< url.tmp
ping localhost -n 2 > nul

:wiedergabe
if "%url%"=="" goto fehler
if "%url%"=="http://%boxip%:31339/0,0x0000,0x0000,0x0000" goto fehler
echo.
echo VLC wird gestartet...
START "Livebild" /d "%vlc_pfad%" vlc.exe %url%
goto ende

:fehler
cls
echo.
echo  Fehler:
echo  Die Live-Url konnte nicht ermittelt werde.
echo  Eventuell muss die Box neu gestartet werden.
goto ende

:ende
set boxip=
set wget_pfad=
set vlc_pfad=
set sender=
set url=
if exist url.tmp del url.tmp
if exist Sender1.tmp del Sender1.tmp
if exist Sender2.tmp del Sender2.tmp
Code

Obigen Code kopieren und als Batchdatei speichern, beispielsweise als LiveTV.cmd.

Vor der Nutzung muss bei :config noch Folgendes angepasst werden:
1. Die IP oder der Netbios-Name der box
set boxip=dbox2 (Beispielsweise: set boxip=192.168.0.98)
2. Der Pfad zu Wget (wget.exe)
set wget_pfad=C:\Program Files (x86)\Tools\WGET
3. Der Pfad zu VLC (vlc.exe)
set vlc_pfad=C:\Program Files (x86)\VideoLAN\VLC

Falls VLC nicht jedesmal beendet werden soll, sollte diese Zeile auskommentiert werden:
tskill.exe vlc /a > nul
also REM tskill.exe vlc /a > nul
Das ist beispielsweise sinnvoll, wenn VLC als Dienst eingerichtet ist.

Wget

Falls man Wget noch nicht haben sollte, dann findet man es hier:
http://sourceforge.net/projects/gnuwin3 ... /1.11.4-1/

Wget muss nicht installiert werden, es reicht, wenn man die nötigen Dateien in einen Ordner kopiert.
Benötigt werden:
wget.exe
aus wget-1.11.4-1-bin.zip
libeay32.dll
libiconv2.dll
libintl3.dll
libssl32.dll

aus wget-1.11.4-1-dep.zip

Mit Wget lassen sich Webseiten per Eingabeaufforderung aufrufen und lokal speichern.
Hier wird es benutzt um die Controls des nhttpd aufzurufen und damit die box abzufragen und zu steuern.

Gruß Frank
Sagem 1xi + HDD Kabel, JtG-Team Image v2.4.6 (19.12.2015), avia600vb028, ucode int., cam_01_02_105D
Coolstream Neo, FW 2.10 (leider kaputt)
Win 10 Pro x64, i7 920, 12 GB, SSD
u-Grabber 0.2.7.6-> TS -> PX 0.91.0.08 -> IfoEdit 0.971 -> ImgBurn 2.5.0.0 -> DVD-R

Benutzeravatar
Pedant
admin-c
admin-c
Beiträge: 4285
Registriert: Mo 04 Aug 2003, 16:22
Wohnort: Bad Vilbel
Kontaktdaten:

Re: LiveTV funktioniert nicht

#17 Beitrag von Pedant » So 12 Jan 2014, 15:03

Hallo deerhunter,

...bevor's April ist:
Pedant hat geschrieben:Ich werde mal versuchen ob über's COM-Terminal hilfreiche Informationen reinkommen...
Im COM-Termial erscheint im Moment des Streamabrisses kein Eintrag.
Ich konnte allerdings Folgendes beobachten:

Wenn ich auf Das Erste umschalte, dann erscheinen eine zeitlang (ca. 90 Sek.), in kurzer Folge eine lange Reihe dieser Einträge:

Code: Alles auswählen

12.01.2014 10:41:23: 10:39:22.870 [sectionsd] DMX::readNbytes received POLLERR, pid 0x12, filter[1] filter 0x50 mask 0xf0
12.01.2014 10:41:24: 10:39:24.266 [sectionsd] DMX::readNbytes received POLLERR, pid 0x12, filter[1] filter 0x50 mask 0xf0
12.01.2014 10:41:26: 10:39:25.659 [sectionsd] DMX::readNbytes received POLLERR, pid 0x12, filter[1] filter 0x50 mask 0xf0
...
In anderen Beiträgen habe ich gelesen, dass das passiere wenn vom Sender zu schnell, zu viele EPG-Informationen geliefert würden, als sie vom sectionsd verarbeitet werden könnten.

Ich habe zusätzlich zum COM-Terminal auch die CPU-Auslastung der Box ausgelesen.
Wenn ich nach einen box-Neustart erstmalig auf "Das Erste" umschalte (noch ohne mir dabei dem Stream abzuholen) dann kommen die erwähntet Meldungen und in der Zeit ist die CPU ausgelastet.
idle sinkt auf ca. 2%.
(idle = Leerlauf => 100%-2%=98% Auslastung)

Ist der EPG-Kram verarbeitet steigt idle wieder auf ca. 80%.
Wiederhole ich den Vorgang bei frisch gestarteter Box und versuche mir dabei den Stream von "Das Erste" anzuschauen, kommte es in kurzer Folge immer wieder zu Abbrüchen, bis die EPG-Verarbeitung abgeschlossen ist.
Danach läuft der Stream deutlich stabiler, aber Abbrüche kommen dennoch in zu kurzen Zeitabständen, als dass es Spaß macht.
Fehlermeldungen im COM-Terminal gibt es bei den Abbrüchen, wie schon erwähnt, keine.

Wiederhole ich das Ganze mit z.B. "arte" läuft der Stream stabil, auch während der EPG-Verarbeitung.
Obige Meldungen kommen bei "arte" auch nicht und die Verarbeitung der EPG-Daten geht deutlich zügiger und mit deutlich weniger CPU-Last.

Die CPU-Last durch die EPG-Verarbeitung, kann man generell vermeiden, indem man den sectionsd anhält und damit keine EPG-Daten verarbeitet werden.
Anhalten: http://dbox2/control/zapto?stopsectionsd
Starten: http://dbox2/control/zapto?startsectionsd

Beim Betrachten des Streams läuft auf der Box der Prozess "streamts".
Sein Anteil der CPU-Belastung liegt bei "Das Erste" relativ konstant bei knapp 30%.
Bei "arte" pendelt der Wert, wobei er auch die 30% oft erreicht.
So oder so ist idle aber nie unter 30%, was eigentlich bedeuten sollte/könnte, dass das Steamen die CPU nicht überlastet.
Dennoch gibt es bei "Das Erste" häufig Abbrüche und bei "arte" praktisch keine.

Anmerkung:
Wurde aktuell von einem Sender der EPG schon eingelesen, dann wird beim erneuten Schalten auf diesen Sender der EPG nicht noch einmal komplett verarbeitet.
Die CPU-Last ist dann auch bei "Das Erste" geringer und die Verarbeitungszeit recht kurz.
Deswegen habe ich bei meinen vergleichenden Untersuchungen die Bbox immer frisch gebootet.

Hinweis:
Die CPU-Auslastung der box kann man in der Eingabeaufforderung per telnet mit dem Befehl top anzeigen lassen:
C:\>telnet dbox
dbox login: root
Password: dbox2 (Defaultkennwort)
/ var > top
Mit q kann man das Auslesen geenden.
Mit exit kann man die telnet-Verbindung beenden.
Die Anzeige der CPU-Daten wird im 3-4-Sekundentakt erneuert.
Der Befehl "top" erzeugt seinerseits auch zirka 10% CPU-Last.

Zusammenfassend:
Da ein Streamabbruch keine Meldung im COM-Terminal mit sich bringt und der Stream sofort wieder mit [Play] im VLC weiter läuft, denke ich, dass es kein Fehler oder Absturz von sonstwas ist, sondern einfach nur eine kurzzeitige Überlast.
Ich bin mir allerdings immer noch nicht sicher, ob der Engpass die CPU oder das Netzwerk ist oder Beides.
Bei "Das Erste" ist zwar der Netzwerktraffik höher, als bei "arte", ich hatte aber nicht den Eindruck, dass er während meiner Tests kritische Werte erreicht hätte.
Eine Aufnahme am PC von "Das "Erste" läuft ohne Abbruch, was bedeutet, dass der Stream prinzipell schon durch's Netzwerk passt.
JtG-Log hat geschrieben:@00:02:52: max: 8,3 Mbit/s total data rate
@00:02:52: average: 7,5 Mbit/s total data rate
Die Aufnahme erfolgt allerdings mit udrec, also im wesentlichen per upd und die Live-Wiedergabe mit VLC erfolgt per tcp. Letzeres hat mehr Overhead.

Gruß Frank
Sagem 1xi + HDD Kabel, JtG-Team Image v2.4.6 (19.12.2015), avia600vb028, ucode int., cam_01_02_105D
Coolstream Neo, FW 2.10 (leider kaputt)
Win 10 Pro x64, i7 920, 12 GB, SSD
u-Grabber 0.2.7.6-> TS -> PX 0.91.0.08 -> IfoEdit 0.971 -> ImgBurn 2.5.0.0 -> DVD-R

Antworten