76 lines
1.8 KiB
Python
Executable File
76 lines
1.8 KiB
Python
Executable File
#!/usr/bin/env python
|
|
# Simple REST wrapper to start / stop streaming
|
|
|
|
import os
|
|
import sys
|
|
from flask import Flask
|
|
from subprocess import Popen
|
|
|
|
base_dir = "/opt/webcam/mjpg-streamer/mjpg-streamer-experimental"
|
|
mjpg_input = "input_raspicam.so -fps 5"
|
|
mjpg_output = "output_http.so -w " + base_dir + "/www"
|
|
app = Flask(__name__)
|
|
stream = None
|
|
|
|
|
|
def stream_start():
|
|
global stream
|
|
if stream:
|
|
return "Streaming already running"
|
|
else:
|
|
stream = Popen([
|
|
os.path.join(base_dir, 'mjpg_streamer'),
|
|
'-i', mjpg_input,
|
|
'-o', mjpg_output
|
|
], stdout=sys.stdout, stderr=sys.stderr)
|
|
return "Streaming started"
|
|
|
|
|
|
def stream_stop():
|
|
global stream
|
|
if stream:
|
|
stream.terminate()
|
|
stream.wait()
|
|
stream = None
|
|
return "Streaming stopped"
|
|
else:
|
|
return "Streaming not running"
|
|
|
|
|
|
@app.route("/on")
|
|
def stream_on():
|
|
return stream_start()
|
|
|
|
|
|
@app.route("/off")
|
|
def stream_off():
|
|
return stream_stop()
|
|
|
|
|
|
def initialize():
|
|
global mjpg_input
|
|
print("*** Starting WebcamStream")
|
|
sys.stdout.flush()
|
|
if os.getenv('RESIN'):
|
|
# Expunge unexpanded variables from docker-compose
|
|
for key, val in os.environ.items():
|
|
if key.startswith('WEBCAM_') and val.startswith('${'):
|
|
os.environ.pop(key)
|
|
|
|
# Set Library path for mjpg_streamer
|
|
if os.getenv('LD_LIBRARY_PATH'):
|
|
os.environ['LD_LIBRARY_PATH'] += ':' + base_dir
|
|
else:
|
|
os.environ['LD_LIBRARY_PATH'] = base_dir
|
|
|
|
if os.getenv('WEBCAM_INPUT'):
|
|
mjpg_input = os.getenv('WEBCAM_INPUT')
|
|
|
|
if os.getenv('WEBCAM_START', 'true') == 'true':
|
|
stream_start()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
initialize()
|
|
app.run(debug=False, host="0.0.0.0", port=5200)
|