Dreambox/VlcPlayer: Unterschied zwischen den Versionen

Aus SchnallIchNet
Wechseln zu: Navigation, Suche
(configuration dm800)
Zeile 1: Zeile 1:
 
==VlcPlayer plugin==
 
==VlcPlayer plugin==
  
===Client===
+
===Client Versionen===
 
ich hatte probleme mit meinem vlc-player plugin auf der dm800
 
ich hatte probleme mit meinem vlc-player plugin auf der dm800
 
<pre>
 
<pre>
Zeile 10: Zeile 10:
 
</pre>
 
</pre>
  
===Server===
+
===Server Versionen===
 
  ii vlc      0.8.6-svn20061012.debian-5.1+etch3
 
  ii vlc      0.8.6-svn20061012.debian-5.1+etch3
  
Zeile 32: Zeile 32:
  
 
und alles ist gut und er spielt zumindest .mkv-files
 
und alles ist gut und er spielt zumindest .mkv-files
 
=== configuration server ===
 
Starten des vlc-binary mit folgenden parametern:
 
vlc -I http --http-host vlc.lan.mydomain.de:8080 -vvv
 
  
 
=== configuration dm800 ===
 
=== configuration dm800 ===
Zeile 42: Zeile 38:
 
# Server-Port: 8080
 
# Server-Port: 8080
  
=== problem ===
+
=== 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.
 
# das plugin kann zum server connecten.
 
# ich kann durch die verzeichnis-struktur browsen
 
# ich kann durch die verzeichnis-struktur browsen
Zeile 61: Zeile 61:
  
 
ich aendere also meine configuration folgendermassen:
 
ich aendere also meine configuration folgendermassen:
 
=== configuration server ===
 
Starten des vlc-binary mit folgenden parametern:
 
vlc -I http --http-host vlc.lan.mydomain.de:8081 -vvv
 
  
 
=== configuration dm800 ===
 
=== configuration dm800 ===
Zeile 71: Zeile 67:
 
# Server-Port: 8081
 
# Server-Port: 8081
  
 +
=== configuration server ===
 +
Starten des vlc-binary mit folgenden parametern:
 +
vlc -I http --http-host vlc.lan.mydomain.de:8081 -vvv
  
=== problem ===
+
=== problem 2===
 
# das plugin kann zum server connecten.
 
# das plugin kann zum server connecten.
 
# ich kann durch die verzeichnis-struktur browsen
 
# ich kann durch die verzeichnis-struktur browsen
Zeile 81: Zeile 80:
 
# 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.
  
<u>folgeproblem:</u><br/>
+
<u>folglich:</u><br/>
 
# die dm800 versuchte den stream vom configurierten port (8081) zu lesen statt vom default-port 8080 <br/>und bekommt einen 404 vom vlc-server auf port 8081
 
# die dm800 versuchte den stream vom configurierten port (8081) zu lesen statt vom default-port 8080 <br/>und bekommt einen 404 vom vlc-server auf port 8081
 
  
 
===loesung===
 
===loesung===
Zeile 91: Zeile 89:
 
'self.getHttpPort()' einfach statisch durch 8080 ersetzt.<br/><br/>
 
'self.getHttpPort()' einfach statisch durch 8080 ersetzt.<br/><br/>
  
hier der patch:
+
===patch===
 
+
 
<pre>
 
<pre>
 
# cd /usr/lib/enigma2/python/Plugins/Extensions/
 
# cd /usr/lib/enigma2/python/Plugins/Extensions/
Zeile 113: Zeile 110:
 
# dm800 rebooten <br/>'''sonst wird die veraenderung an der VlcServer.py nicht uebernommen!'''
 
# dm800 rebooten <br/>'''sonst wird die veraenderung an der VlcServer.py nicht uebernommen!'''
 
# vlc-server starten, falls noch nicht geschehen:<pre>vlc -I http --http-host vlc.tron.rubbish.de:8081 -vvv</pre>
 
# vlc-server starten, falls noch nicht geschehen:<pre>vlc -I http --http-host vlc.tron.rubbish.de:8081 -vvv</pre>
# vlc-server auf der dm800 configurieren
+
# vlc-server auf der dm800 auf port 8081 configurieren
 
# film auswaehlen
 
# film auswaehlen
 
# bier holen
 
# bier holen

Version vom 12. März 2010, 10:05 Uhr

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
Achtung.jpeg 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

  1. Name des Servers: vlc.lan.mydomain.de
  2. Server-Adresse: vlc.lan.mydomain.de
  3. 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

  1. das plugin kann zum server connecten.
  2. ich kann durch die verzeichnis-struktur browsen
  3. ich kann filme zum abspielen auswaehlen
  4. abspielen von streams zeigt die dm800 ein schwarzes bild zeigt.
  5. 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

  1. Name des Servers: vlc.lan.mydomain.de
  2. Server-Adresse: vlc.lan.mydomain.de
  3. 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

  1. das plugin kann zum server connecten.
  2. ich kann durch die verzeichnis-struktur browsen
  3. ich kann filme zum abspielen auswaehlen
  4. der server kann fork()-en und port 8080 binden!!!
  5. der stream laeuft und ich kann ihn mit einem vlc-player auf einem 3. rechner ansehen.
  6. die dm800 zeigt nach wie vorein schwarzes bild zeigt.
  7. der timer laeuft, ich kann augenscheinlich spulen, etc. aber der bildschirm bleibt schwarz.

folglich:

  1. 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"})
  1. patch auf der dreambox einspielen - see 'man patch'
  2. 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!
  3. dm800 rebooten
    sonst wird die veraenderung an der VlcServer.py nicht uebernommen!
  4. vlc-server starten, falls noch nicht geschehen:
    vlc -I http --http-host vlc.tron.rubbish.de:8081 -vvv
  5. vlc-server auf der dm800 auf port 8081 configurieren
  6. film auswaehlen
  7. bier holen
  8. entspannen!!!!

Appendix

  1. 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.tron.rubbish.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

: