【问题标题】:How to display multiple video streams on webpage using django?如何使用 django 在网页上显示多个视频流?
【发布时间】:2020-05-16 02:59:37
【问题描述】:

我正在尝试使用 django 在网页上显示来自手机(使用 IP 网络摄像头)的实时流。 代码:

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 video(request):
    return StreamingHttpResponse(gen(IPWebCam(camera_ip)),content_type='multipart/x-mixed-replace; boundary=frame')


class IPWebCam(object):
    def __init__(self,camera_ip):
        self.url = "https://"+ camera_ip + "/shot.jpg"
        print(self.url)

    def __del__(self):
        cv2.destroyAllWindows()

    def get_frame(self):
        imgResp = urllib.request.urlopen(self.url,context=context)
        imgNp = np.array(bytearray(imgResp.read()), dtype=np.uint8)
        img = cv2.imdecode(imgNp, -1)
        # We are using Motion JPEG, but OpenCV defaults to capture raw images,
        # so we must encode it into JPEG in order to correctly display the
        # video stream
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        resize = cv2.resize(img, (270,250), interpolation=cv2.INTER_LINEAR)
        ret, jpeg = cv2.imencode('.jpg', resize)
        return jpeg.tobytes()

所以这里video 是显示实时流的视图。我正在使用"{% url 'video' %}" 在模板上呈现视图,并在 urlpatterns 中添加了视图。我显示流的模板具有网格视图。我想在每个网格中显示具有不同 IP 的摄像机。现在我能够在所有网格中显示相同的 IP 网络摄像头流,因为只有一个视图,即 video,并且我在模板中呈现相同的视图。

我想知道,如何在对应的网格中显示多个流?一页上有六个网格。我是否应该为每个网格创建一个视图,但会有超过 1 页,我不能继续创建这些视图并将它们添加到 urlpatterns。有没有办法可以使用相同的视图并使用动态 url 来解决这个问题?

【问题讨论】:

    标签: django python-3.x django-views django-templates


    【解决方案1】:

    您应该在video 视图中定义一个参数 (camera_ip) 来告知应该返回哪个摄像头流。

    def video(request, camera_ip):
        return StreamingHttpResponse(gen(IPWebCam(camera_ip)),content_type='multipart/x-mixed-replace; boundary=frame')
    

    您应该将所有 camera_ip 值传递给在您的详细视图中呈现的页面(我认为该视图存在但在您的问题中未提及),然后遍历 ip 信息以调用 "{% url 'video' camera_ip %}" 其中camera_ip 应该更改每个循环步骤.

    【讨论】:

    • django.urls.exceptions.NoReverseMatch:找不到带有参数“('camera_ip)'的'video'的反向。尝试了 1 种模式: ['home/video/$'] 。这是我现在遇到的错误@Deniz
    • 我已经想通了。我添加了正则表达式 url 模式,以便它匹配任何 IP 地址。现在可以使用了,感谢@Deniz
    猜你喜欢
    • 2015-06-16
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 2010-10-10
    • 2018-03-19
    • 2019-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多