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
        }))
Вернуться на верх