我有这个python程序,它使用烧瓶进行视频流(独立JPEG图片序列)。我知道我应该首先自己调试,但是一旦客户端连接index.html,只显示一个损坏的图像图标,计算机就会冻结。 我试过了 -
编辑2 :
它在Linux上运行,因为它安装了python 2.7。在python 3中它没有显示任何错误但不起作用。尝试在四个系统(windows和linux)上进行测试,这似乎是一个兼容性问题,因为它在所有使用python 3但没有使用python 3的计算机上都失败了。如何使它在python 3中工作?
编辑1 :通过在time.sleep(1)
的循环中添加gen()
来修复冻结,但浏览器中仍然没有输出。修改了Chrome中的网络活动开发者工具。这是一个截图 -
以下是代码:
app.py(服务器)
#!/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(客户端)
<html>
<head>
<title>Video Streaming Demonstration</title>
</head>
<body>
<h1>Video Streaming Demonstration</h1>
<img src="{{ url_for('video_feed') }}">
</body>
</html>
正如我已经提到的,我不能使用调试器,因为整个计算机立即冻结.python版本 - 3.5和os - windows 10.
我该如何解决?
答案 0 :(得分:0)
看来您可能需要仔细检查app.py中图像文件的路径,即确保它们位于同一目录中,或者如果它们位于/ images目录中,请仔细检查路径文件或他们在那里开始。
作为测试,(git)克隆Miguel的项目并运行它,看看你是否得到相同的结果。
https://blog.miguelgrinberg.com/post/video-streaming-with-flask