首页 > 解决方案 > 使用 socketio 的网络服务器上的视频流仅在第一次工作

问题描述

我有这个问题,我想使用带有 OpenCV 的 flask-socketio 将我的本地流式传输到 Web 服务器。

import cv2
from flask import Flask, render_template, Response
from flask_socketio import SocketIO

app = Flask(__name__)
socketio = SocketIO(app, async_mode='threading')

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/video_feed')
def video_feed():
    return Response(gen_frames(), mimetype='multipart/x-mixed-replace; boundary=frame')

def gen_frames():
    while (True):
        # Capture frame-by-frame
        ret, frame = vcap.read()
        # print cap.isOpened(), ret
        if frame is not None:
            ret, buffer = cv2.imencode('.jpg', frame)
            frame = buffer.tobytes()
            yield (b'--frame\r\n'b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')  # concat frame one by one and show result
        else:
            break


if __name__ == '__main__':

        # Open a sample video available in sample-videos
        vcap = cv2.VideoCapture(0)

        print('[INFO] Starting server at http://localhost:5000')
        socketio.run(app=app, host='0.0.0.0', port=5000)

问题是这只适用于第一次,如果我停止并再次运行此代码,网络服务器上将没有视频。如果你等了 5 分钟或 10 分钟,它会再次工作并回到我说的循环。

此外,更改主机和端口也可以。但只有一次。

任何人有任何想法?

谢谢!

标签: opencvpython-socketio

解决方案


推荐阅读