Hier kannst Du echt was lernen!
Gruß
Hansa
Ankündigung
Einklappen
Keine Ankündigung bisher.
- √ - Python - VLC - Webcam
Einklappen
X
-
Natürlich nur in normalem TextZitat von thehansa Beitrag anzeigenLeider killt Forensoft die Tabs/Spaces, was für einen Python Anfänger die Hölle ist.
=> Verwedne doch einfach die CODE Tags, dann geht es auch. Sieht dann so aus:
Besser?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)
Gruß,
Markus
Einen Kommentar schreiben:
-
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:
-
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:
-
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:
-
Mach doch mal den conn.close() hinter den vlc dann kann der Listen(1) ja nicht mehr Clients annehmen.
Einen Kommentar schreiben:
-
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:
-
Versuchs mal statt mit os.system mit
17.1. subprocess ? Subprocess management — Python v2.7.2 documentation
der wartet dann.
Einen Kommentar schreiben:
-
- √ - 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 ---Stichworte: -


Einen Kommentar schreiben: