Holas,
estoy trantando de stremear una webcam con django. Cuando utilizo el runserver
de desarrollo puedo abrir dos ventanas de chrome y tengo el video en ambas ventanas. Pero cuando lo quiero ejecutar con Gunicorn solo lo puedo hacer de a una ventana a la vez, por qué puede ser?
El read de opencv lo tengo en un thread (siguiendo las recomendaciones que hay por internet)
Gracias!
from concurrent import futures
from functools import wraps
import cv2
video_capture = cv2.VideoCapture(0)
def threaded(func):
@wraps(func)
def wrapper(*args, **kwargs):
with futures.ThreadPoolExecutor() as executor:
future = executor.submit(func)
frame = future.result()
return frame
return wrapper
@threaded
def read_camera():
if not video_capture.isOpened():
raise RuntimeError()
status, frame = video_capture.read()
if status:
return frame
raise RuntimeError()
def stream_camera():
while True:
frame = read_camera()
status, jpeg = cv2.imencode(".jpg", frame)
if not status or jpeg is None:
raise RuntimeError
yield b"--frame\r\nContent-Type: image/jpeg\r\n\r\n%b\r\n\r\n" % jpeg.tobytes()
@gzip.gzip_page
def video(request):
return StreamingHttpResponse(
stream_camera(),
content_type="multipart/x-mixed-replace;boundary=frame",
)