RTSP на Django с использованием OpenCV

Мне нужно транслировать камеру наблюдения на сайт, основанный на Django. Я нашел учебник на Youtube, но он очень простой. Ниже приведен мой код:

from django.shortcuts import render
from django.views.decorators import gzip
from django.http import StreamingHttpResponse

import cv2

# Create your views here.

@gzip.gzip_page
def Home(request):
    try:
        cam = videoCamera()
        return StreamingHttpResponse(gen(cam), content_type="multipart/x-mixed-replace;boundary=frame")
    except:
        pass

    return render(request, 'index.html')


# Video Capture
class videoCamera(object):

    video = cv2.VideoCapture("[user]:[password]@rtsp://[ip-address]:554/sub")

    while True:
        _, frame = video.read()
        cv2.imshow("RTSP", frame)
        k = cv2.waitKey(10)
        if k == ord('q'):
            break

    video.release()
    cv2.destroyAllWindows()

Однако я столкнулся с ошибкой:

cv2.error: OpenCV(4.6.0) D:\a\opencv-python\opencv-python\opencv\modules\highgui\src\window.cpp:967: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow'
<

попробуйте это в классе videoCamera, не забудьте импортировать threading

class VideoCamera(object):
   def __init__(self):
       self.video = cv2.VideoCapture("put your video link here")
       (self.grabbed , self.frame) = self.video.read()
       threading.Thread(target=self.update , args=()).start()
    
    
   def __del__(self):
       self.video.release()

   def get_frame(self):
       image = self.frame 
       _ , jpeg = cv2.imencode(' .jpg' , image)
       return jpeg.tobytes()

   def update(self):
       while True:
           (self.grabbed , self.frame) = self.video.read()
Вернуться на верх