Ankündigung

Einklappen
Keine Ankündigung bisher.

- √ - Python - VLC - Webcam

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • thehansa
    antwortet
    Hier kannst Du echt was lernen!

    Gruß
    Hansa

    Einen Kommentar schreiben:


  • MarkusL
    antwortet
    Zitat von thehansa Beitrag anzeigen
    Leider killt Forensoft die Tabs/Spaces, was für einen Python Anfänger die Hölle ist.
    Natürlich nur in normalem Text
    => Verwedne doch einfach die CODE Tags, dann geht es auch. Sieht dann so aus:

    Code:
     #!/usr/bin/env [URL="http://redaktion.knx-user-forum.de/lexikon/python/"]python[/URL]
     
     [URL="http://redaktion.knx-user-forum.de/lexikon/import/"]import[/URL] os
     [URL="http://redaktion.knx-user-forum.de/lexikon/import/"]import[/URL] socket
     [URL="http://redaktion.knx-user-forum.de/lexikon/import/"]import[/URL] sys
     [URL="http://redaktion.knx-user-forum.de/lexikon/import/"]import[/URL] time
     [URL="http://redaktion.knx-user-forum.de/lexikon/import/"]import[/URL] subprocess
     
    HOST = ''
    PORT = 7017
     
    SECRET = 'geheim'
     
    def log(msg):
        sys.stderr.write('[%s] %s\n' % (time.ctime(), msg))
     
    while True:
        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        s.bind((HOST, PORT))
        s.listen(1)
        conn, addr = s.accept()
        data = conn.recv(1024)
        if not data: continue
     
        if data.strip() != SECRET:
            log('received invalid secret from %s' % repr(addr))
            continue
        conn.close()
        s.close()
        s=None
        log('starting vlc...')
        subprocess.call("/usr/bin/vlc" + " --qt-minimal-view  'rtsp://root:xyz@192.168.0.80:554/axis-media/media.amp?videocodec=h264&streamprofile=Quality'",  shell=True)
    Besser?

    Gruß,
    Markus

    Einen Kommentar schreiben:


  • thehansa
    antwortet
    yes!
    so geht es!

    hab noch eine schleife weggelassen.

    #!/usr/bin/env python

    import os
    import socket
    import sys
    import time
    import subprocess

    HOST = ''
    PORT = 7017

    SECRET = 'geheim'

    def log(msg):
    sys.stderr.write('[%s] %s\n' % (time.ctime(), msg))

    while True:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind((HOST, PORT))
    s.listen(1)
    conn, addr = s.accept()
    data = conn.recv(1024)
    if not data: continue

    if data.strip() != SECRET:
    log('received invalid secret from %s' % repr(addr))
    continue
    conn.close()
    s.close()
    s=None
    log('starting vlc...')
    subprocess.call("/usr/bin/vlc" + " --qt-minimal-view 'rtsp://root:xyz@192.168.0.80:554/axis-media/media.amp?videocodec=h264&streamprofile=Quality'", shell=True)

    Leider killt Forensoft die Tabs/Spaces, was für einen Python Anfänger die Hölle ist.

    Hab das Script attached.

    Vielen Dank Nils!
    Angehängte Dateien

    Einen Kommentar schreiben:


  • NilsS
    antwortet
    Und wie wäre es wenn du den Serversocket, bei erfolg einfach schließt und erst nach dem subprocess wieder auf machst.

    also

    while True:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind((HOST, PORT))
    s.listen(1)

    while True:
    conn, addr = s.accept()
    data = conn.recv(1024)
    if not data:
    continue

    if data.strip() != SECRET:
    log('received invalid secret from %s' % repr(addr))
    continue
    conn.close()
    s.close()
    s=None
    log('starting vlc...')

    subprocess.Popen("/usr/bin/vlc" + " --qt-minimal-view 'rtsp://root:xyz@192.168.0.80:554/axis-media/media.amp?videocodec=h264&streamprofile=Quality'", shell=True)
    ## wichtig hier darfs erst weiter gehen, wenn der vlc beendet ist.

    Einen Kommentar schreiben:


  • thehansa
    antwortet
    geht leider auch nicht.

    log('starting vlc...')
    #os.system("vlc --qt-minimal-view 'rtsp://root:xyz@192.168.0.80:554/axis-media/media.amp?videocodec=h264&streamprofile=Quality'")
    p = subprocess.Popen("/usr/bin/vlc" + " --qt-minimal-view 'rtsp://root:xyz@192.168.0.80:554/axis-media/media.amp?videocodec=h264&streamprofile=Quality'", shell=True)
    conn.close()
    data = ""
    log(data)


    Macht nun pro Aufruf einmal den vlc auf. Damit habe ich bei 3 Aufrufen 3 mal den vlc laufen.

    Einen Kommentar schreiben:


  • NilsS
    antwortet
    Mach doch mal den conn.close() hinter den vlc dann kann der Listen(1) ja nicht mehr Clients annehmen.

    Einen Kommentar schreiben:


  • thehansa
    antwortet
    p = subprocess.Popen("/usr/bin/vlc" + " --qt-minimal-view 'rtsp://root:xyz@192.168.0.80:554/axis-media/media.amp?videocodec=h264&streamprofile=Quality'", shell=True)

    Macht leider keinen Unterschied. Das Problem besteht ja nicht darin, dass er den VLC mehrmals öffnet, sondern, dass er den VLC sofort neu startet, wenn man ihn schließt.

    Ein
    data = " "
    hilft leider auch nicht...

    Einen Kommentar schreiben:


  • NilsS
    antwortet
    Versuchs mal statt mit os.system mit
    17.1. subprocess ? Subprocess management — Python v2.7.2 documentation

    der wartet dann.

    Einen Kommentar schreiben:


  • thehansa
    hat ein Thema erstellt HS/FS - √ - Python - VLC - Webcam.

    - √ - Python - VLC - Webcam

    Liebe Pythonversteher,

    folgendes Script verwende ich auf einem Linux Desktop um mir von meinem Homeserver das Türkamerabild anzeigen zu lassen. Dies ist per Bewegungsmelder getriggert.

    Leider passiert nun Folgendes: Der VLC wir brav geöffnet, sobald der HS auf Port 7010 das richtige Secret sendet. Sendet der HS jedoch während des laufenden Streams nochmals, z.b weil der Bewegungsmelder erneut ausgelöst hat, so lässt sich der VLC kaum noch beenden, da dieser sofort neu gestartet wird.
    Unter Umständen muss ich so der VLC 5 mal schließen, bis er zu bleibt.

    Irgendwie puffert der "data = conn.recv(1024)" die Dinger bis der VLC beendet wird...

    Konnte man das Problem verstehen?? Und ggf. sogar lösen?

    Grüße
    Hansa


    ---- schnipp ----
    #!/usr/bin/env python

    import os
    import socket
    import sys
    import time

    HOST = ''
    PORT = 7010

    SECRET = 'geheim'

    def log(msg):
    sys.stderr.write('[%s] %s\n' % (time.ctime(), msg))

    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind((HOST, PORT))
    s.listen(1)

    while True:
    conn, addr = s.accept()
    data = conn.recv(1024)
    conn.close()

    if not data:
    continue
    if data.strip() != SECRET:
    log('received invalid secret from %s' % repr(addr))
    continue

    log('starting vlc...')
    os.system("vlc --qt-minimal-view 'rtsp://root:xyz@192.168.0.80:554/axis-media/media.amp?videocodec=h264&streamprofile=Quality'")

    --- schnapp ---
Lädt...
X