Multiple Bilder laden / AJAX mit Flask möglich?

Django, Flask, Bottle, WSGI, CGI…
Antworten
Popkultur
User
Beiträge: 30
Registriert: Donnerstag 20. Oktober 2016, 16:46

Hallo,

ich habe ein Flask-Script, das mir einen Videostream im Browser darstellt. Es geht um das Darstellen von mehreren Streams im Browser gleichzeitig.

Grob etwa so (habs zusammengestrichen zur Übersicht):

Code: Alles auswählen

app = Flask(__name__)

# Template rendern
@app.route('/')
def index():
    return render_template('index.html', videosources=videosources)

# IP Kamera Frame auslesen
def gen(camera):
    while True:
        frame = camera.get_frame()
        yield (b'--frame\r\n'
            b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n')

# Feed Adresse
@app.route('/video_feed', methods=['GET'])
def video_feed():
    # Hier wäre wohl etwas zu verändern, um mehrere Streams anzuzeigen
    return Response(gen(IpCamera()), 
                    mimetype='multipart/x-mixed-replace; boundary=frame')

if __name__ == '__main__':
    app.run(host='127.0.0.1', port=int("80"), debug=True)
Template:

Code: Alles auswählen

<!DOCTYPE html>
<html>
  <head>
    <title>Video Streaming Demonstration</title>
  </head>
  <body>
    <h1>Video Streaming Demonstration</h1>
  <img src="{{ url_for('video_feed') }}"> <!-- Hier wäre eine Schleife im Template einzufügen -->
  </body>
</html>
Wie und womit müsste ich den Code umschreiben, so dass ich mehrere Streams gleichzeitig darstellen kann? Ich vermute, das ist mit Flask nicht möglich. Wäre "Klein" dafür geeignet? Ich möchte das HTML-Template um AJAX-Funktionen erweitern, so dass ich einen Stream einfügen oder rauswerfen kann in der Bildschirmdarstellung, und später das ganze Datenbankhinterlegt gespeichert wird.
Zuletzt geändert von Anonymous am Freitag 21. Oktober 2016, 13:53, insgesamt 1-mal geändert.
Grund: Quelltext in Codebox-Tags gesetzt.
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@Popkultur: eine Endlosschleife in einem kooperativen Server ist nie eine gute Idee. So blockierst Du ja jegliche weiteren Anfragen. Also app.run mit threaded=True starten und am besten die Frames irgendwo puffern, dass auch mehrere Seiten gleichzeitig die gleichen Bilder bekommen können. Danach ist das erweitern auf mehrere Kameras trivial.
Popkultur
User
Beiträge: 30
Registriert: Donnerstag 20. Oktober 2016, 16:46

Danke, funktioniert!
Antworten