Django ASGI/channels с Streaminghttpresponse
Я добавляю каналы в свой проект и это создает проблему, У меня есть stream func, который транслирует видео с помощью streaminghttpresponse, и это работало хорошо до того, как я добавил asgi/channels для запуска сервера. Я видел, что это какая-то ошибка, которая будет исправлена в django 4.2, но я ищу решение на данный момент/ или если кто-то предложит другую библиотеку для сокета, которая теперь будет вызывать подобную проблему
это мой код
Django v - 4.0 каналы - 3.0.5
views.py
def stream(source,startVideo):
if startvideo :
url = source + str('.mp4')
cap = cv2.VideoCapture(url)
while (cap.isOpened()):
ret, frame = cap.read()
if not ret:
check = False
break
results = model(frame,augment=False,size=320)
det = results.pred[0]
results.render()
annotator = Annotator(frame,line_width=2, pil=not ascii)
im0 = annotator.result()
image_bytes = cv2.imencode('.jpg', im0)[1].tobytes()
yield (b'--frame\r\n'
b'Content-Type: image/jpeg\r\n\r\n' + image_bytes + b'\r\n')
cap.release()
cv2.destroyAllWindows()
@csrf_exempt
def video_feed(request):
if request.method == 'POST':
global startvideo,start,content
startvideo=True
content = request.GET.get('url','not')
return StreamingHttpResponse(stream(content,startvideo), content_type='multipart/x-mixed-replace; boundary=frame')
ASGI.PY
application = ProtocolTypeRouter({
'http': get_asgi_application(),
'websocket':AuthMiddlewareStack(URLRouter(
webcam.routing.websocket_urlpatterns
))
})
setting.py
INSTALLED_APPS = [
'channels',
......
'webcam',
......
]
ASGI_APPLICATION = 'stream.asgi.application'
routing.py
websocket_urlpatterns = [
re_path(r'ws/socket-server/',consumers.ChatConsumer.as_asgi()),
]
consumers.py
class ChatConsumer(AsyncWebsocketConsumer):
async def connect(self):
self.room_group_name = 'test'
await self.channel_layer.group_add(
self.room_group_name,
self.channel_name
)
await self.accept()
async def receive(self,text_data):
text_data_json = json.loads(text_data)
message = text_data_json['message']
await self.channel_layer.group_send(
self.room_group_name, {
'type':'chat_message',
'message':message
}
)
async def chat_message(self,event):
message = event['message']
await self.send(text_data=json.dumps({
'type':'chat',
'message':message
}))