设计一个监控摄像头物联网IOT(webRTC、音视频、文件存储)
前言:
设计一个完整的 监控摄像头物联网 IoT 平台 涉及 视频直播和点播、WebRTC 和 文件存储模块,可以分为以下几个主要部分:摄像头设备、服务端处理、Web 前端、视频流存储和回放。以下是结合这些技术的一个具体完整流程设计,涵盖了各个组件的相互关系、数据流动及关键技术点。
1. 系统组成
- 监控摄像头:摄像头设备负责采集实时视频流并进行编码(如 H.264 或 VP8)。
- Java 服务端:服务端基于 Spring Boot 等框架,负责摄像头的控制、视频流的处理、存储和与前端的交互。
- Web 前端:用户通过浏览器访问 Web 应用来查看实时视频流、历史视频,并控制摄像头。
- 文件存储模块:负责存储视频文件、视频的元数据、备份和视频流的管理。
2. 整体流程概述
整个流程可以分为以下几个阶段:
- 摄像头设备启动与视频流发送
- 服务端接收与处理视频流
- 视频流转发至 Web 端(WebRTC)
- 视频流存储
- 视频回放(点播)
- 控制和管理(如设备控制、日志等)
3. 详细流程
阶段 1:摄像头设备启动与视频流发送
- 摄像头初始化:
- 摄像头设备(如基于 RTSP 协议的设备)在启动时连接到 IoT 平台的 Java 服务端,进行身份验证。
- 摄像头通过 RTSP 或 WebRTC 协议采集视频数据流。视频数据流使用常见编码格式如 H.264(或者 VP8/VP9)压缩,降低带宽需求。
- 视频流发送:
- 摄像头设备开始将视频流推送至 流媒体服务器(如 Kurento、Wowza、FFmpeg 等)或直接通过 WebRTC 与服务端建立点对点连接。
阶段 2:服务端接收与处理视频流
- 服务端接入:
- Java 后端(基于 Spring Boot 或其他微服务框架)作为 媒体服务器 接入接收到的视频流。
- 后端可以选择使用 WebSocket 或 WebRTC 进行实时数据传输,向 Web 前端推送视频流。
- 服务端负责接收流数据并进行进一步处理,如实时转码、录制和转发。
- 流媒体服务器:
- 如果使用 WebRTC,则视频流会通过 WebRTC 协议 传输到前端浏览器。WebRTC 会建立点对点连接,保证低延迟的实时视频传输。
- 如果使用 RTSP 流,服务端会通过流媒体服务器(如 Kurento)将 RTSP 流转为 WebRTC 或 HLS 直播流,推送到 Web 端进行播放。
- 视频存储:
- 服务端在接收到视频流后,可以选择将视频数据存储到本地硬盘或 分布式存储系统(如 HDFS 或 Ceph)。
- 存储格式可以是 MP4(常见格式)或 WebM(WebRTC 直播常用格式),并且可以结合 HLS 或 DASH 协议进行存档和流式传输。
- 流的转码和存档:
- 转码:如果视频流不是所需的格式(例如,摄像头流是 H.264 编码的,而 Web 前端要求 VP8 或 WebM 格式),服务端可使用转码工具(如 FFmpeg)将其转换为所需格式。
- 存档:视频流会被存档到服务器的文件系统或云存储(如 AWS S3)中,以便后续回放。
阶段 3:视频流转发至 Web 端(WebRTC)
- Web 前端接收视频流:
- WebRTC 是浏览器原生支持的协议,因此 Web 前端通过 WebRTC 与服务端建立连接,获取实时视频流。
- 前端通过 JavaScript 与 WebRTC API 进行集成,设置与服务端的视频通话通道。
- 服务端通过 WebSocket 或 HTTP/2 向 Web 前端发送视频流。通过 WebRTC 协议,视频数据被分成多个媒体数据包进行传输,确保低延迟。
- 视频流的播放:
- Web 前端通过 <video> 标签 或 WebRTC API 来显示视频。浏览器会解析接收到的视频数据并在用户设备上展示。
阶段 4:视频流存储
- 视频文件存储:
- 在视频流传输过程中,服务端可以在后台将视频流保存为文件(如 MP4、WebM)。每个视频文件会附带元数据(如时间戳、摄像头ID、视频时长等),存储在分布式存储或云存储系统中。
- 可以为每个摄像头配置一个文件夹,将录制的视频存储为按日期、时间命名的文件。所有视频文件会统一管理,并支持检索。
- 存储扩展与备份:
- 为了确保高可用性,视频存储通常会采用 冗余备份,确保视频数据的持久性。云存储服务(如 S3 或 Aliyun OSS)通常具有自动备份和高可用性。
阶段 5:视频回放(点播)
- 历史视频的检索与播放:
- 用户通过 Web 前端进行历史视频回放时,Web 前端会向服务端发起请求,查询存储中视频的元数据(如摄像头ID、时间区间等)。
- 服务端根据请求的时间段,从存储中检索相关的视频文件,并使用 流媒体协议(如 HLS 或 DASH)进行回放。
- 视频文件回放:
- 服务端会将视频文件转为 HLS 或 DASH 流,确保可以按需播放视频片段。
- Web 前端通过 HLS.js 或 Dash.js 进行视频流的加载和播放。用户可以在 Web 前端进行播放、暂停、快进等操作。
阶段 6:控制和管理(如设备控制、日志等)
- 设备管理与控制:
- 用户可以通过 Web 前端控制摄像头的行为(如旋转、缩放、调整清晰度等)。控制指令通过 WebSocket 或 REST API 发送到后端。
- 后端再通过与摄像头的通信接口(如 ONVIF 或自定义 API)向摄像头发送控制指令。
- 日志与数据分析:
- 服务端会记录所有设备的活动日志,包括视频流的接收、转发、存储等操作。
- 服务端会定期生成分析报告,监控视频存储使用情况、存储空间、带宽占用等指标,帮助运维人员管理平台。
4. 总结:流程概览
- 摄像头设备:实时采集视频流,发送至服务端。
- 服务端:
- 接收视频流,通过流媒体服务器转发至 Web 前端或直接传输 WebRTC。
- 存储视频文件(MP4、WebM)并提供视频存档和回放功能。
- Web 前端:
- 通过 WebRTC 获取实时视频流,支持视频播放、控制和回放。
- 支持与服务端的交互,进行设备控制和视频回放。
- 文件存储模块:使用本地存储、分布式存储或云存储来存储视频文件,并提供高效的检索和回放功能。
这个设计方案确保了监控摄像头视频流的实时传输、存储、回放和设备管理的功能,同时利用了 WebRTC 技术确保低延迟的实时视频传输,并结合云存储和视频流转码技术优化存储和访问体验。
闲谈:
Http-Flv是一种适合网络视频流的传输协议,网页可以用,客户端也可以用。通常都是用在网页上。但是Http-Flv当前比较明显的不足,是不支持H265。 一般安防摄像头都会支持Rtsp和GB28181协议,但这两种协议的视频流都无法在浏览器直接播放,需要开发一个流媒体转发服务器,通过Rtsp或GB28181协议对接摄像头,然后再实时转Http-Flv或Hls协议。浏览器可以通过js插件直接播放Http-flv或Hls协议的视频流。 如果是做安防领域的流媒体服务器,非常推荐zlm,甚至说首推,因为作者在zlm中,提供了非常完整的有关ps流推拉相关的功能。如果是做直播,推荐使用srs或nginx+rtmp。 不要无脑webrtc,要搞清楚webrtc合适的应用场景 ,不要什么地方都想着webrtc。
相关文章:
设计一个监控摄像头物联网IOT(webRTC、音视频、文件存储)
前言: 设计一个完整的 监控摄像头物联网 IoT 平台 涉及 视频直播和点播、WebRTC 和 文件存储模块,可以分为以下几个主要部分:摄像头设备、服务端处理、Web 前端、视频流存储和回放。以下是结合这些技术的一个具体完整流程设计,涵盖…...
学习笔记(prism--视频【WPF-prism核心教程】)--待更新
《一》框架介绍 prism是一个用于WPF…和winUI中构建的松散耦合,可维护和可测试的应用程序框架。帮助WPF开发人员以简化编写,维护和扩展来设计应用程序。 优点:遵循特定的约定,可自动将view/ViewModel建立DataContext的关系&#…...
Kafka无锁设计
前言 在分布式消息队列系统中,Kafka 的无锁设计是其高吞吐量和高并发的核心优势之一。通过避免锁的竞争,Kafka 能够在高并发和大规模的生产环境中保持高效的性能。为了更好地理解 Kafka 的无锁设计,我们首先对比传统的队列模型,然后探讨 Kafka 如何通过无锁机制优化生产者…...
【GO基础学习】gin框架路由详解
文章目录 gin框架路由详解(1)go mod tidy(2)r : gin.Default()(3)r.GET()路由注册 (4)r.Run()路由匹配 总结 gin框架路由详解 先创建一个项目,编写一个简单的demo&#…...
GPIO+TIM(无PWM)实现呼吸灯功能
程序特点: 1、模块化,可快速移植,5分钟便可完成移植。 2、通过GPIO普通定时器,实现呼吸灯功能。 3、PWM周期为5ms,占空比调节时间为20ms,占空比为100等份,即呼吸灯从暗到亮需要20ms*1002s。 …...
贪心算法.
贪心算法是指只从当前角度出发,做出当前情景下最好的选择,在某种意义上来说是局部最优解,并不从全局的角度做决策.如果贪心策略选择不恰当,可能无法得到全局最优解. 贪心算法的基本流程如下: 1.分析问题,确定优化目标,对变量进行初始化 2.制定贪心策略:在制定贪心策略时需要…...
Linux系统和makefile详解
### Linux系统详解 Linux是一个开源且功能强大的操作系统内核,自1991年由林纳斯托瓦兹首次发布以来,它已经成为全球最流行的操作系统之一。Linux的核心特性包括开源、多用户多任务、高稳定性与安全性,以及良好的跨平台能力。 1. **开源**&a…...
GitLab 将停止为中国区用户提供服务,60天迁移期如何应对? | LeetTalk Daily
“LeetTalk Daily”,每日科技前沿,由LeetTools AI精心筛选,为您带来最新鲜、最具洞察力的科技新闻。 GitLab作为一个广受欢迎的开源代码托管平台,近期宣布将停止服务中国大陆、澳门和香港地区的用户提供服务。根据官方通知&#x…...
【杂谈】-AI搜索引擎如何改变传统SEO及其在内容营销中的作用
AI搜索引擎如何改变传统SEO及其在内容营销中的作用 文章目录 AI搜索引擎如何改变传统SEO及其在内容营销中的作用1、什么是AI搜索引擎2、AI搜索引擎对SEO策略的影响3、AI搜索引擎在内容营销转型中的作用4、AI搜索引擎在营销领域的挑战、道德问题和未来5、总结 在当今的数字营销世…...
PTA数据结构编程题7-1最大子列和问题
我参考的B站up的思路 题目 题目链接 给定K个整数组成的序列{ N 1 , N 2 , …, N K },“连续子列”被定义为{ N i , N i1 , …, N j },其中 1≤i≤j≤K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2, 1…...
深入浅出:AWT的基本组件及其应用
目录 前言 1. AWT简介 2. AWT基本组件 2.1 Button:按钮 2.2 Label:标签 编辑 2.3 TextField:文本框 2.4 Checkbox:复选框 2.5 Choice:下拉菜单 2.6 List:列表 综合案例 注意 3. AWT事件处理 …...
MySQL45讲 第三十六讲 为什么临时表可以重名?——阅读总结
文章目录 MySQL45讲 第三十六讲 为什么临时表可以重名?——阅读总结一、引言二、临时表与内存表的区别(一)内存表(二)临时表 三、临时表的特性(一)可见性与生命周期(二)与…...
WebRTC服务质量(11)- Pacer机制(03) IntervalBudget
WebRTC服务质量(01)- Qos概述 WebRTC服务质量(02)- RTP协议 WebRTC服务质量(03)- RTCP协议 WebRTC服务质量(04)- 重传机制(01) RTX NACK概述 WebRTC服务质量(…...
.NET常用的ORM框架及性能优劣分析总结
市面上有很多流行的 ORM(对象关系映射)框架可以用于 .NET 开发。本文主要针对以下几种常见的 ORM 框架,对其优劣进行分析及总结,希望能够帮助大家进行ORM框架的使用有所帮助。 1. Entity Framework (EF) 特点 • 官方支持&…...
Ubuntu网络配置(桥接模式, nat模式, host主机模式)
windows上安装了vmware虚拟机, vmware虚拟机上运行着ubuntu系统。windows与虚拟机可以通过三种方式进行通信。分别是桥接模式;nat模式;host模式 一、桥接模式 所谓桥接模式,也就是虚拟机与宿主机处于同一个网段, 宿主机…...
光通信复习
第一章 1.5 光纤通信系统的基本组成是怎么样的?试画出简图予以说明 光纤:主要负责光信号的传输光发送器:将用户端的电信号转化为光信号,入射到光纤内部光中继器:将光纤中发生衰减和畸变的光信号变成没有衰减和畸变的原…...
数字化转型中的投资决策:IT平台投资与业务应用投资的思考
在数字化转型的大潮中,企业常常面临一个核心问题:如何在繁杂的投资决策中精准地分配资源,特别是在IT平台投资和业务应用投资之间,如何合理划分责任与投入?在一些大型企业中,尤其是华为,针对不同…...
Linux快速入门-Linux的常用命令
Linux的常用命令 1. Linux的终端与工作区1.1 终端概述1.2 切换终端 2. Shell语言解释器2.1 Shell概述 3. 用户登录与身份切换3.1 su 命令3.2 sudo 命令 4. 文件、目录操作命令4.1 pwd 命令4.2 cd 命令4.3 ls 命令4.3.1 ls 指令叠加使用 4.4 mkdir 命令4.5 rmdir 命令4.6 cp 命令…...
【ORB-SLAM3:相机针孔模型和相机K8模型】
在ORB-SLAM3中,相机的建模是 SLAM 系统的核心之一,因为它直接影响到如何处理和利用图像数据进行定位和地图构建。ORB-SLAM3 支持不同的相机模型,其中包括针孔模型和鱼眼模型(K8 模型)。下面分别介绍这两种模型。 相机…...
Python函数(十二):函数的创建和调用、参数传递、返回值
前言:在编程的世界里,函数是一种基本的构建块,它允许我们将代码封装成可重复使用的单元。在Python中,函数的使用尤为重要,因为它不仅有助于代码的模块化,还提高了代码的可读性和可维护性。本章节࿰…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索(基于物理空间 广播范围)2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
