django - 如何使用 django 在网页上显示多个视频流?
问题描述
我正在尝试使用 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 来解决这个问题?
解决方案
您应该在视图中定义一个参数 (camera_ip)video
以告知应该返回哪个摄像头流。
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
更改每个循环步骤的位置。
推荐阅读
- regex - 如何捕获每行的第二场比赛?
- gremlin - 使用 Gremlin 针对 Azure Cosmos db 图将边限制为同一组 verices 的最佳方法
- sql - SQL - DTS 向导导出数据失败
- c++ - 如何升级提升进度?
- dynamic - 根据之前的按钮点击跟踪按钮的点击
- arrays - 删除两个数组中满足条件的元素 MATLAB
- python - Filtering rows in DataFrame with a numeric value OR NaN in column
- android - 如何在没有嵌套布局的情况下为 ConstraintLayout 中的某些视图制作填充背景?
- url - Azure DevOps:如何在没有 devops 主菜单的情况下在自己的应用程序中显示 wiki 页面?
- javascript - 使用 for 或 forEach 查询 json 中的每个对象