试图包装 RSTP 流,StreamingHttpResponse
并且在 Django 中使用 WSGI 服务器完全可以正常工作,但我需要使用 ASGI 应用程序来实现这一点。
下面的代码供参考。
在 ASGI 中,由于 while True 循环而不断加载,但在 WSGI 中它可以正常工作。我不确定它是否因为 WSGI 或 ASGI 而发生。
def gen(camera):
while True:
frame = camera.get_frame()
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n')
def livecam_feed(request):
return StreamingHttpResponse(gen(LiveWebCam()),
content_type='multipart/x-mixed-replace; boundary=frame')
class LiveWebCam(object):
def __init__(self):
self.url = cv2.VideoCapture("<RTSP link here>")
def __del__(self):
cv2.destroyAllWindows()
def get_frame(self):
success,imgNp = self.url.read()
resize = cv2.resize(imgNp, (640, 480), interpolation = cv2.INTER_LINEAR)
ret, jpeg = cv2.imencode('.jpg', resize)
return jpeg.tobytes()
asgi.py
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'BMS_host.settings')
# application = get_asgi_application()
django.setup()
application = ProtocolTypeRouter({
"http": get_asgi_application(),
"websocket": AuthMiddlewareStack(
URLRouter([
url(r'^ws/', BmsConsumer.as_asgi()),
url(r'^dash/', DashConsumer.as_asgi()),
url(r'^component/', ComponentConsumer.as_asgi()),
])
),
})