Dreambox/VlcPlayer: Unterschied zwischen den Versionen
Cbs (Diskussion | Beiträge) |
Cbs (Diskussion | Beiträge) (→problem 2) |
||
Zeile 77: | Zeile 77: | ||
# der server kann fork()-en und port 8080 binden!!! | # der server kann fork()-en und port 8080 binden!!! | ||
# der stream laeuft und ich kann ihn mit einem vlc-player auf einem 3. rechner ansehen. | # der stream laeuft und ich kann ihn mit einem vlc-player auf einem 3. rechner ansehen. | ||
− | # die dm800 zeigt nach wie | + | # die dm800 zeigt nach wie vor ein schwarzes bild! |
− | # der timer laeuft, ich kann augenscheinlich spulen, etc. aber der bildschirm bleibt schwarz. | + | # der timer laeuft, ich kann augenscheinlich spulen, etc. aber der bildschirm bleibt schwarz. sagte ich das schon? ;-) |
<u>folglich:</u><br/> | <u>folglich:</u><br/> |
Version vom 21. Juni 2010, 12:41 Uhr
Inhaltsverzeichnis
VlcPlayer plugin
Client Versionen
ich hatte probleme mit meinem vlc-player plugin auf der dm800
uname -a Linux dm800 2.6.12-5.1-brcmstb-dm800 #1 Tue Mar 10 13:19:31 CET 2009 7401c0-nand unknown # ipkg list_installed | grep -i vlc enigma2-plugin-extensions-vlcplayer - 2.7cvs20100104-r0
Server Versionen
ii vlc 0.8.6-svn20061012.debian-5.1+etch3
nach einem upgrade auf lenny geht das ganze nicht mehr!! :-( dies war aber zum abspielen von HD-videos noetig |
wenn man ein lenny benutzt muss man also folgendes repo einbinden:
wget http://debian.oppserver.net/gpg-opp-signing-pubkey.asc -O - | apt-key add -
sources.list:
deb http://debian.oppserver.net/debian/ lenny main non-free contrib deb-src http://debian.oppserver.net/debian/ lenny main non-free contrib
nun ein:
apt-get update ...
apt-get dist-upgrade
nun habe ich auf dem server:
ii vlc 1.0.3-1+opp~1
und alles ist gut und er spielt zumindest .mkv-files
configuration dm800
- Name des Servers: vlc.lan.mydomain.de
- Server-Adresse: vlc.lan.mydomain.de
- Server-Port: 8080
configuration server
Starten des vlc-binary mit folgenden parametern:
vlc -I http --http-host vlc.lan.mydomain.de:8080 -vvv
problem 1
- das plugin kann zum server connecten.
- ich kann durch die verzeichnis-struktur browsen
- ich kann filme zum abspielen auswaehlen
- abspielen von streams zeigt die dm800 ein schwarzes bild zeigt.
- der timer laeuft, ich kann augenscheinlich spulen, etc. aber der bildschirm bleibt schwarz.
nach etwas debugen habe ich dann rausgefunden dass der vlc-server beim starten eines streams
einen fork() macht und versucht, soweit nichts explizit angefordert wird,
default den port 8080 zu verwenden. dies fuehrte bei mir zu einem:
[...] Could not bind port. Allready in use. [...]
was ja auch logisch ist, da unser vlc-webinterface des servers ja bereits auf 8080 lauscht.
ich aendere also meine configuration folgendermassen:
configuration dm800
- Name des Servers: vlc.lan.mydomain.de
- Server-Adresse: vlc.lan.mydomain.de
- Server-Port: 8081
configuration server
Starten des vlc-binary mit folgenden parametern:
vlc -I http --http-host vlc.lan.mydomain.de:8081 -vvv
problem 2
- das plugin kann zum server connecten.
- ich kann durch die verzeichnis-struktur browsen
- ich kann filme zum abspielen auswaehlen
- der server kann fork()-en und port 8080 binden!!!
- der stream laeuft und ich kann ihn mit einem vlc-player auf einem 3. rechner ansehen.
- die dm800 zeigt nach wie vor ein schwarzes bild!
- der timer laeuft, ich kann augenscheinlich spulen, etc. aber der bildschirm bleibt schwarz. sagte ich das schon? ;-)
folglich:
- die dm800 versuchte den stream vom configurierten port (8081) zu lesen statt vom default-port 8080
und bekommt einen 404 vom vlc-server auf port 8081
loesung
ich habe dann einen quick'n dirty patch fuer den client gemacht.
da der vlc-client keinen expliziten port anfodert wird mein server IMMER 8080 verwenden.
daher habe ich an der stelle wo der serverstream geoeffnet werden soll
'self.getHttpPort()' einfach statisch durch 8080 ersetzt.
patch
# cd /usr/lib/enigma2/python/Plugins/Extensions/ # diff -uBr VlcPlayer.orig/VlcServer.py VlcPlayer/VlcServer.py --- VlcPlayer.orig/VlcServer.py 2010-03-06 12:42:48.000000000 +0100 +++ VlcPlayer/VlcServer.py 2010-03-06 13:23:20.000000000 +0100 @@ -254,7 +254,7 @@ return None else: self.lastError = None - return "http://%s:%d/%s.ts" % (self.getHost(), self.getHttpPort(), streamName) + return "http://%s:8080/%s.ts" % (self.getHost(), streamName) def unpause(self): self.__xmlRequest("status", {"command": "pl_pause"})
- patch auf der dreambox einspielen - see 'man patch'
- auf der dm800 loechen der .pyc
rm /usr/lib/enigma2/python/Plugins/Extensions/VlcPlayer/VlcServer.pyc
sonst wird die veraenderung an der VlcServer.py nicht uebernommen! - dm800 rebooten
sonst wird die veraenderung an der VlcServer.py nicht uebernommen! - vlc-server starten, falls noch nicht geschehen:
vlc -I http --http-host vlc.lan.mydomain.de:8081 -vvv
- vlc-server auf der dm800 auf port 8081 configurieren
- film auswaehlen
- bier holen
- entspannen!!!!
Appendix
- init-script fuer lenny:
#! /bin/sh ### BEGIN INIT INFO # Provides: VLCStream # Required-Start: $local_fs $remote_fs # Required-Stop: $local_fs $remote_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start vlc as streaming server # Description: Starts vlc as streaming server for dream dm800 ### END INIT INFO # Author: Christoph Steidl <chris@rubbish.de> # Do NOT "set -e" #set -x # PATH should only include /usr/* if it runs after the mountnfs.sh script PATH=/sbin:/usr/sbin:/bin:/usr/bin DESC="VLC Streaming Service" NAME=vlc # using sudo as daemon since vlc-1.0.x # giving vlc-binary as daemon-args DAEMON=/usr/bin/sudo DAEMON_ARGS="-u $NAME /usr/bin/$NAME -vvv -I http --http-host vlc.lan.mydomain.de:8081" PIDFILE=/var/run/$NAME.pid SCRIPTNAME=/etc/init.d/vlcstreamd # unset DISPLAY - we have no X and will run vlc as server unset DISPLAY # Exit if the package is not installed [ -x "$DAEMON" ] || exit 0 # Read configuration variable file if it is present [ -r /etc/default/$NAME ] && . /etc/default/$NAME # Load the VERBOSE setting and other rcS variables . /lib/init/vars.sh # Define LSB log_* functions. # Depend on lsb-base (>= 3.0-6) to ensure that this file is present. . /lib/lsb/init-functions # verbose =YES VERBOSE=yes # # Function that starts the daemon/service # do_start() { # Return # 0 if daemon has been started # 1 if daemon was already running # 2 if daemon could not be started start-stop-daemon --start --quiet --background --make-pidfile \ --user vlc --group vlc --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS [ -n "`/bin/pidof $NAME`" ] && return 0 || return 2 } # # Function that stops the daemon/service # do_stop() { # Return # 0 if daemon has been stopped # 1 if daemon was already stopped # 2 if daemon could not be stopped # other if a failure occurred start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME if [ $? -eq 0 ]; then rm $PIDFILE; return 0 else return 2 fi } # # Function that sends a SIGHUP to the daemon/service # do_reload() { # # If the daemon can reload its configuration without # restarting (for example, when it is sent a SIGHUP), # then implement that here. # #start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME log_daemon_msg "Reload of $DESC not possible" log_daemon_msg "Please stop and start the service" log_end_msg 1 return 0 } case "$1" in start) [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" do_start case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; stop) [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" do_stop case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; reload) # # If do_reload() is not implemented then leave this commented out # and leave 'force-reload' as an alias for 'restart'. # #log_daemon_msg "Reloading $DESC" "$NAME" do_reload log_end_msg $? ;; restart|force-reload) # # If the "reload" option is implemented then remove the # 'force-reload' alias # log_daemon_msg "Restarting $DESC" "$NAME" do_stop if [ `pidof $NAME` ]; then log_end_msg 1; exit 1; fi case "$?" in 0|1) do_start case "$?" in 0) log_end_msg 0 ;; 1) log_end_msg 1 ;; # Old process is still running *) log_end_msg 1 ;; # Failed to start esac ;; *) # Failed to stop log_end_msg 1 ;; esac ;; *) echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2 exit 3 ;; esac :