客户端连接

时间:2016-10-15 06:59:57

标签: python windows python-3.x flask mjpeg

我有这个python程序,它使用烧瓶进行视频流(独立JPEG图片序列)。我知道我应该首先自己调试,但是一旦客户端连接index.html,只显示一个损坏的图像图标,计算机就会冻结。 我试过了 -

  • 在运行良好的Linux上运行它。
  • 禁用或启用线程但无效。

编辑2

它在Linux上运行,因为它安装了python 2.7。在python 3中它没有显示任何错误但不起作用。尝试在四个系统(windows和linux)上进行测试,这似乎是一个兼容性问题,因为它在所有使用python 3但没有使用python 3的计算机上都失败了。如何使它在python 3中工作?

编辑1 :通过在time.sleep(1)的循环中添加gen()来修复冻结,但浏览器中仍然没有输出。修改了Chrome中的网络活动开发者工具。这是一个截图 - enter image description here

以下是代码:

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.
我该如何解决?

1 个答案:

答案 0 :(得分:0)

看来您可能需要仔细检查app.py中图像文件的路径,即确保它们位于同一目录中,或者如果它们位于/ images目录中,请仔细检查路径文件或他们在那里开始。

作为测试,(git)克隆Miguel的项目并运行它,看看你是否得到相同的结果。

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