【发布时间】:2020-09-22 03:00:47
【问题描述】:
要使用flask 进行视频流式传输,this link 和this link 都建议使用generator 进行流式传输。以下是我流式传输一个视频的工作示例。 但我的问题是:如何同时流式传输多个视频?
我的文件夹结构如下:
root_folder/
templates/
index.html
server.py
video1.mp4
video2.mp4
server.py
Camera 类读取视频文件并转换为.jpeg 格式。路由'/video_feed/<index>' 指向分配有index 的视频源。
import cv2
from flask import Flask, render_template, Response
app = Flask(__name__)
class Camera:
def __init__(self, index):
self.path = f'video{index}.mp4'
self.cap = cv2.VideoCapture(self.path)
def get_frame(self):
while 1:
success, image = self.cap.read()
# to replay video infinitely
if not success:
print('replay')
self.cap = cv2.VideoCapture(self.path)
success, image = self.cap.read()
_, encoded = cv2.imencode(".jpg", image)
yield(b'--frame\r\n' b'Content-Type: image/jpeg\r\n\r\n' +
bytearray(encoded) + b'\r\n')
@app.route('/')
def index():
return render_template('index.html')
@app.route('/video_feed/<index>')
def video_feed(index):
return Response(Camera(index).get_frame(),
mimetype='multipart/x-mixed-replace; boundary=frame')
if __name__ == '__main__':
app.run(debug=True)
index.html
<img src="{{ url_for('video_feed', index='1') }}">
<!--<img src="{{ url_for('video_feed', index='2') }}">-->
当只有一个img 标签要求视频源时,这非常有用。但是如何同时流式传输多个视频?当我取消注释另一个 img 标签时,前端卡住了。流没有播放,CPU 使用率飙升。
我想我完全搞砸了。我的代码怎么了?
在普通的 python 程序中(不使用烧瓶),我会使用多进程或线程处理多个视频。但是,我对烧瓶中的线程概念感到困惑,无法弄清楚如何实现。
感谢任何建议。谢谢!
【问题讨论】: