django StreamingHttpResponse picamera运行但不渲染流,请指教

django StreamingHttpResponse picamera runs but does not render the stream, please advise

希望我能找到你。

我真的在为一个个人项目苦苦挣扎,如果有人能帮我解决问题,我将不胜感激。

我希望在 django 中从 picamera 流式传输视频。我看到了一些 cv2 实现,在使用 cv2 时遇到了一些问题,因此决定尝试另一种方法。这里的一些代码是从 picamera 文档中提取的,一些来自我遇到的一些 cv2 实现。

当我点击 django url 时,摄像头开始流式传输,但是网页是灰色的,中间有一个小框,看不到流。

python3 -m django --version: 3.0.6

下面发布了完整的代码。 This is what I see

有人能给我指出正确的方向吗?

谢谢, 达伦

from django.shortcuts import render
from django.http import HttpResponse
from django.http import StreamingHttpResponse
from doron.models import Storage
from django.views import generic
import picamera
import io
from threading import Condition
from time import sleep

class StreamingOutput(object):
    def __init__(self):
        self.frame = None
        self.buffer = io.BytesIO()
        self.condition = Condition()

    def write(self, buf):
        if buf.startswith(b'\xff\xd8'):
            # New frame, copy the existing buffer's content and notify all
            # clients it's available
            self.buffer.truncate()
            with self.condition:
                self.frame = self.buffer.getvalue()
                self.condition.notify_all()
            self.buffer.seek(0)
        return self.buffer.write(buf)

def livefe(request):

        def cam():
                with picamera.PiCamera(resolution='640x480', framerate=24) as camera:
                        output = StreamingOutput()
                        camera.start_recording(output, format='mjpeg')
                        try:
                                while True:
                                        with output.condition:
                                                output.condition.wait()
                                                frame = output.frame
                                        yield(b'--frame\r\n'
                                                b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n\r\n')

                        finally:
                                camera.stop_recording()

        try:
                return StreamingHttpResponse(cam(), content_type="multipart/x-mixed-replace;boundary=frame")
        except:  
                pass

我现在确实在研究同一个主题,我们似乎在线使用了几乎相同的模板。我遇到了这个问题,如果我没记错的话,我通过在录制开始和流式传输开始之间增加一点睡眠来解决它。

最后,我将整个 init 块移动到另一个函数中,然后我可以通过页面上的按钮或其他条件调用它(稍后我将在第一次客户端登录时打开它,在最后一次客户端注销时将其关闭):

camera = picamera.PiCamera(resolution='640x480', framerate=12)
output = StreamingOutput()
camera.start_recording(output, format='mjpeg')

希望对您有所帮助。