Для потоковой передачи видео с flask, по этой ссылке и по этой ссылке оба предлагают потоковую передачу с 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
, интерфейс завис. Потоки не воспроизводились, а загрузка процессора взлетела до небес.
Я думаю, что полностью испортил. Что происходит с моим кодом?
В обычных python программах (не с flask) я бы имел дело с несколькими видео с многопроцессорностью или многопоточностью. Тем не менее, я путаюсь с концепциями потоков в flask и не могу понять, как реализовать.
Любое предложение приветствуется. Спасибо!