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 -
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?
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
@zvone es friert jetzt nicht dank, aber immer noch gibt es keine Ausgabe.Nur ein gebrochenes Bildsymbol. – XZ6H
@zvone hat auch time.sleep (1) hinzugefügt, aber immer noch keine Änderung. – XZ6H