2016-10-15 1 views
0

Ich habe dieses Python-Programm, das Kolben für Video-Streaming (Sequenz von unabhängigen JPEG-Bildern) verwendet. Ich weiß, dass ich das zuerst selbst debuggen sollte, aber sobald der Klient verbindet, zeigt index.html nur ein defektes Bildsymbol und der Computer friert ein. Ich habe versucht -Python-Programm friert nach Client verbindet

  • Läuft es auf Linux, wo es gut läuft.
  • Deaktivieren oder Aktivieren von Threading, aber es hat keine Auswirkungen.

bearbeiten 2:

Es auf Linux gearbeitet, weil es Python hatte 2.7 installiert. In Python 3 zeigt es keinen Fehler aber funktioniert nicht. Versuchte es auf vier Systemen (Windows und Linux) und es scheint ein Kompatibilitätsproblem zu sein, weil es auf allen Computern mit Python 3 fehlschlug, aber nicht mit Python 2. Wie kann es gemacht werden, um in Python 3 zu arbeiten?

bearbeiten 1: Das Einfrieren wurde durch Zugabe von time.sleep(1) innerhalb der Schleife in gen() fixiert worden, aber es gibt noch keine Ausgabe in der browser.Recorded die Netzwerkaktivität in Chrom Developer Tools. Hier ist ein Screenshot - enter image description here

Hier ist der Code:

app.py (Server)

#!/usr/bin/env python 
from flask import Flask, render_template, Response 

# emulated camera 
from camera import Camera 

app = Flask(__name__) 


@app.route('/') 
def index(): 
    """Video streaming home page.""" 
    return render_template('index.html') 


def gen(camera): 
    """Video streaming generator function.""" 
    while True: 
     frame = camera.get_frame() 
     yield (b'--frame\r\n' 
       b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n') 


@app.route('/video_feed') 
def video_feed(): 
    """Video streaming route. Put this in the src attribute of an img tag.""" 
    return Response(gen(Camera()), 
        mimetype='multipart/x-mixed-replace; boundary=frame') 


if __name__ == '__main__': 
    app.run(host='0.0.0.0', debug=False, threaded=False) 

camera.py

from time import time 
class Camera(object): 
    """An emulated camera implementation that streams a repeated sequence of 
    files 1.jpg, 2.jpg and 3.jpg at a rate of one frame per second.""" 

    def __init__(self): 
     self.frames = [open(f + '.jpg', 'rb').read() for f in ['1', '2', '3']] 

    def get_frame(self): 
     return self.frames[int(time()) % 3] 

index.py (Client)

<html> 
    <head> 
    <title>Video Streaming Demonstration</title> 
    </head> 
    <body> 
    <h1>Video Streaming Demonstration</h1> 
    <img src="{{ url_for('video_feed') }}"> 
    </body> 
</html> 

Wie ich bereits erwähnt habe, kann ich keinen Debugger verwenden, weil der gesamte Computer sofort einfriert. Python version - 3.5 und os - windows 10.
Wie kann ich es beheben?

+0

Try Debuggen von 'während true' Ersetzen mit' for i in range (10) '. Friert es dann noch ein? Sollte es nicht auch ein 'time.sleep (1)' nach jedem Frame geben, wenn Sie einen Frame pro Sekunde streamen? – zvone

+0

@zvone es friert jetzt nicht dank, aber immer noch gibt es keine Ausgabe.Nur ein gebrochenes Bildsymbol. – XZ6H

+0

@zvone hat auch time.sleep (1) hinzugefügt, aber immer noch keine Änderung. – XZ6H

Antwort

0

Es könnte sein, dass Sie die Routen zu den Bilddateien von app.py aus überprüfen möchten, dh stellen Sie sicher, dass sie sich im selben Verzeichnis befinden oder überprüfen Sie den Pfad zu/images in einem Verzeichnis/images die Dateien oder das, womit sie beginnen sollen.

Als Test, (Git) Klon Miguel-Projekt und führen Sie es und sehen, ob Sie das gleiche Ergebnis erhalten.

https://blog.miguelgrinberg.com/post/video-streaming-with-flask

+0

Versucht, zu klonen, aber immer noch zeigt der Browser das Symbol für defekte Bilder. – XZ6H

Verwandte Themen