1.扫盲
1.1 IPC和NVR的区别
IPC是IP Camera,即网络摄像头。
拉流客户端。就是NVR是Network Video Record,即网络视频录像机,就是支持保存回放监控录像的服务器。更通用一点,就
传统数据流:
IPC(拍摄) → 网络传输 → NVR(存储/管理) → 用户(查看/回放)
随着家用摄像头的兴起,云存储逐渐流行,家用一般不会单独弄一个存储服务器,而是由厂家提供租用式的云服务:
IPC + SD卡 + 云服务
随着AI的兴起,AI也逐渐加入到摄像头的基本功能中:
IPC + SD卡 + 云服务+AI
1.2 IPC基础
- 国内主流IPC厂家:海康,大华,宇视等。
- IPC对外的数据流有主流和子流之分。主流画质高,用于保存。子流画质低,用于预览。
1.3 音视频系统应用架构
有两种:
- C/S架构:传统架构,需要安装特定的客户端软件。
- B/S架构:更轻便和流行的架构,在网页中完成一切视频处理,技术更新。
围绕应用架构展开设计的,应用为王。就是所有音视频技术都
2. 协议
2.1 ONVIF协议
ONVIF协议就是网络摄像头控制协议。
2.1.1 架构
架构图:
先学习一下什么是Web Service:
- Web Service:根据我的理解,Web Service和它的名字一样,是一套网络服务标准规范,通过这个协议,网络上的节点可以发现服务,调用服务,就是这么简单。SOAP是调用协议(SOAP=XML+HTTP/STMP+RPC),WSDL是接口头文件。和互联网的微服务架构基本上是一个东西。每个技术都各司其职,都只负责消除一个层级的挑战。
- Onvif协议:理解什么是Web Services
可能有的人会问了,为什么用Web Service,为什么不用RESTful API,直接用Get/Post+Json也好啊,为什么搞这么复杂?我也有这个疑问,看看AI怎么说:
总的来说,就是Web Service更专业,优点大于缺点。特定场景下,不是RESTful API不行,而是Web Service更好。
2.1.2 协议规范:一手资料
学习协议最好要有一手资料,二手资料水平层次不齐,就像是犹抱琵琶半遮面一样,学得云里雾里。
下面是官方的图:
html文件。就是实际上就这么多接口而已。接口定义文件,官方也给写好了,直接拿来生成代码,就可以用了,很简单吧?有人说不对啊,怎么wsdl在浏览器里看起来是一个页面?其实这是浏览器渲染的效果,右键查看网页源代码,就可以看到,其实网页是一个wsdl文件,而不
2.1.3 实操
大致架构已经清楚,但没有动手实操过,等于是半懂不懂。下面是实操的教程:
- Onvif协议:运用gSOAP创建SOAP调用实例
- Onvif协议:实现Probe命令来进行设备发现(discover)
强调两点:
- gsoap生成代码过程分两步:用wsdlh,先根据wsdl生成头文件;再用soapcpp2,将头文件生成cpp记录。
- 总体编程逻辑:ws服务发现->获取服务地址->获取能力->获取子服务地址->调用->结束
2.2. GB28181
2.2.1 最新版本
GB/T 28181-2016已被废止,新的标准GB/T 28181-2022于2023年7月1日正式实施。新国标全文下载地址:
- 标准号:GB/T 28181-2022
既是标准又是教程,建议全文阅读。
2.3 RTSP/RTCP/RTP协议簇
2.4 SIP协议
2.5 协议串讲
3. 流媒体格式
4.开发框架和工具
4.1 WebRTC
4.2 FFmpeg
4.3 流媒体服务器
4.3.1 ZLMediaKit
基于C++的开源流媒体服务器,国产。
4.3.2 SRS
基于C++的开源流媒体服务器,国产。
4.3.3 EasyDarwin
基于Go的RTSP 流媒体服务器,能力稍弱,适合学习和测试,国产。
4.3.4 Monibuca
基于Go的开源流媒体服务器,国产。
4.3.5 RED5
基于Java的老牌流媒体服务器,技巧比较老,性能一般,非国产。
相关文章:
完整教程:【视频系统】技术汇编
完整教程:【视频系统】技术汇编pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; fon…...
MSTP 单域
...
阿里云百炼平台使用避坑记录 - 详解
阿里云百炼平台使用避坑记录 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; …...
springboot的run
springboot在哪里写自己的代码。@SpringBootApplication public class FooApplication {public static void main(String[] args) {SpringApplication.run(FooApplication.class, args);} }上面是springboot的入口代码,主文件除了这个类没别的了。 网上有很多分析,springboot…...
ubuntu服务器docker日期安装mysql
# 1. 拉取 MySQL 8 官方镜像 docker pull mysql:8.0# 2. 创建数据和配置目录(实现数据持久化) mkdir -p /opt/mysql/{data,conf,logs} chmod -R 777 /opt/mysql # 赋予权限,避免容器内权限问题# 3. 创建自定义配置文件(可选,优化 MySQL 性能) cat > /opt/mysql/conf/m…...
springboot的启动流程
一文彻底弄懂Spring Boot的启动过程 一,Spring Boot启动过程 1. 启动入口 Spring Boot 应用的启动入口通常是一个包含 @SpringBootApplication 注解的主类,并调用 SpringApplication.run() 方法。@SpringBootApplication 是一个复合注解,包含了 @Configuration、@EnableAut…...
萤火虫旅行网和萤火虫文旅的关系是什么
简单来说:萤火虫文旅是产品品牌;萤火虫旅行网是运营裂变平台;二者同属于四川红色猎人信息技术有限公司;共同构成"产品+平台"的双驱动模式【深度解读】萤火虫旅行网VS萤火虫文旅:一张年票背后的商业生态与数字野心 当你在搜索"萤火虫文旅年票"时是否也…...
「微积分 A1」基础知识(连载中)
集合、实数、函数集合 集合分类:有限集合 无穷集合可数无穷集合符号:\(\aleph_0\) 定义:所有能与自然数集 \(\mathbb{N}\) 建立一一对应关系的集合称为可数无穷集。不可数无穷集合符号:\(\aleph_x\) (基数更大的无穷)勒贝格测度: 勒贝格测度的目标是给实数轴上的子集(尤…...
第2周-预习作业
Java 相关问题解答 1. 方法相关问题 1.1 changeStr与changeArr的功能各是什么?changeStr功能:该方法接收一个String参数x,并尝试将x赋值为"xyz"。但由于String是不可变类,且Java采用值传递,所以该方法不会改变原始字符串的值。它只会修改方法内部局部变量x的引用…...
P12546 [UOI 2025] Convex Array
\(b_{i-1}+b_{i+1}\ge b_i\) 等价 \(b_{i+1}-b_i\ge b_i-b_{i-1}\) 即 \(b\) 数组差分数组单调不降。 若出现次数为 2,则必定是最小值在排列中左右各有 1 个。(不能相同元素放一起否则差分为 0)。 若存在元素出现次数大于 2 且不为最小值,则必定无解(多余的元素无论放在哪…...
一个新词:测试可靠性
提高测试可靠性是为了让我们的测试值得信任。 以前都在讲软件的健壮性、可靠性,好像都在对开发质量提出要求。今天,为了证明自己的工作是值得信任的,提高测试的可靠性势在必行。 提高测试的可靠性,传统做法有哪些呢?测试用例评审、交叉测试、测试复盘总结、线上问题跟踪学…...
CF827F Dirty Arkadys Kitchen
先把 \((u,v,l,r)\) 变成 \((u,v,l,r-1)\)。 不能停留,所以每个时刻有两种选择在某一条边上用 2 个时刻走一个来回浪费时间等某一条需要的边开启。走到下一个点。第 1 种选择启发若时刻 \(t\) 能到 \(u\),那么若存在边 \((u,v,l,r)\),那么所有时刻 \(T\in[l,r],T\equiv t\pm…...
P2839 [国家集训队] middle
经典的二分答案 \(mid\),\(\ge mid\) 的数权值为 1,\(<mid\) 权值为 -1,答案合法当且仅当存在区间 \([l,r]\) 使得权值和 \(\ge 0\),做前缀和 \(s\),即等价于 \(s_r-s_{l-1}\ge 0\to s_r\ge s_{l-1}\)。 对于询问 \((a,b,c,d)\) 只需要 \(\max_{i=c}^ds_i\ge \min_{i=a…...
wuti
...
友链
...
向量化存储与知识图谱的比较
以下内容来自AI对话生成简单来说,它们的核心区别是:向量化存储追求“语义上的相似”,而知识图谱追求“逻辑上的关联”。 我们可以用一个经典的例子来区分:问题:“苹果公司的创始人史蒂夫乔布斯最喜欢吃什么水果?” 向量化存储:可能会找到一段描述“史蒂夫乔布斯饮食习惯…...
力扣17题 电话号码的字母组合
归类:回溯算法 回溯三部曲: 1.确定回溯函数参数 首先需要一个字符串s来收集叶子节点的结果,然后用一个字符串数组result来保存起来,这两个变量依然定义为全局。 参数指定是有题目中给的string digits,然后还有一个参数就是int型的index。 index是用来记录遍历第几个数字了…...
萤火虫文旅年票、为什么能做到低至4.2元一张景区门票、还能高达50%的毛利润?
【商业揭秘萤火虫文旅年票】低至4.2元/张景区门票,毛利润竟超50%!萤火虫文旅年票的盈利模式为何让行业震惊?【商业揭秘萤火虫文旅年票】低至4.2元/张景区门票,毛利润竟超50%!萤火虫文旅年票的盈利模式为何让行业震惊? 当看到"4.2元一张景区门票"这个价格时你的…...
ubuntu服务器docker容器安装nacos
docker pull nacos/nacos-server:latest TOKEN=$(echo -n "nacos-token-$(date +%s)" | base64) # 随机令牌 IDENTITY_KEY="nacos-identity-key" # 自定义身份键 IDENTITY_VALUE="nacos-identity-value" # 自定…...
PWN手的成长之路-02-r3m4ke
启动环境,并下载附件。远程连接之后,输入了一些命令,发现无反应。开始分析附件。 先用checksec查看一下文件的安全属性。 文件是64位的且只开启了NX防御(这个保护开启就是意味着栈中数据没有执行权限,如此一来, 当攻击者在堆栈上部署自己的 shellcode 并利用缓冲区溢出等手…...
SAP 采购订单税率及含税金额取数
税码 联查A003及KONP "采购税码的税率SELECT a~mwskz, "税码k~kbetr "税率INTO TABLE @DATA(t_sl)FROM a003 AS a INNER JOIN konp AS kON a~knumh = k~knumhWHERE a~mwskz IN ( J0 , J1 , J2 , J3 , J4 , J5 , J6 )AND a~aland = CN.SORT t_sl BY mwskz.....…...
深入解析:Linux x86 stability和coredump
深入解析:Linux x86 stability和coredumppre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !impor…...
9.15更新linux命令
...
Jenkins 容器和 Kubernetes Agent
Jenkins 容器和 Kubernetes Agent安装 Jenkins [root@control-plane jenkins]# cat compose.yaml services:jenkins:# Jenkins 2.516.2image: jenkins/jenkins:ltsports:- "8080:8080"# https://github.com/jenkinsci/docker/blob/master/README.md#connecting-agen…...
LGP7916 [CSP-S 2021] 交通规划 学习笔记
LGP7916 [CSP-S 2021] 交通规划 学习笔记 Luogu Link 前言仔细读了十遍题面,硬是一个字都没和交通规划扯上关系,很有可能是出题人编了一个故事,发现编不下去了。——\(\texttt{OMG-WC}\)。题意简述 有一个 \(n\times m\) 个点的网格图。对于这个网格图的最外侧,有些网格线会…...
详细介绍:【Kubernetes】常见面试题汇总(十四)
详细介绍:【Kubernetes】常见面试题汇总(十四)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace…...
萤火虫文旅年票、为何能成为撬动万亿文旅市场的利器
萤火虫文旅年票隶属于四川红色猎人信息技术有限公司、成立于2020年7月24日、致力于为B端企业用户和C端个人用户提供超高性价比的景区门票.用互联网OTA技术整合了全国7000多家景点、用自助餐模式搭建了四款产品:省级版景区门票、大区版景区门票、全国版景区门票、以及企业定制版…...
Qt处理USB摄像头开发说明与QtMultimedia与V4L2融合应用
Qt处理USB摄像头开发说明与QtMultimedia与V4L2融合应用牵牛老人 已于 2025-07-25 09:24:54 修改 阅读量645 收藏 10 点赞数 11 文章链接:https://blog.csdn.net/qianniulaoren/article/details/149138758一:USB摄像头开发基础与框架 1.1 QtMultimedia的优势与局限 跨平台兼…...
详细介绍:C++(静态函数)
详细介绍:C++(静态函数)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-siz…...
2025.9.15日软件工程学习日志
HBase科技成果管理系统设计与实现 今日设计一个基于HBase的科技成果信息填报系统。 系统分析与设计思路 前端需要实现科技成果信息填报表单,包含多种输入类型和验证 后端使用HBase作为数据库存储数据 需要实现数据的增删改查功能 成果编号需要按规则自动生成 HBase表设计: 表…...
RocketMQ快速实战及核心概念
RocketMQ学习笔记 一、MQ简介 MQ定义MQ:Message Queue,消息队列Message:消息,不同进程之间传递的数据Queue:队列,具有FIFO(先进先出)特性,用于缓存数据广义上,只要能实现消息跨进程传输及队列数据缓存,都可称为消息队列MQ的作用异步例子:快递员发快递,先放到菜鸟驿站…...
【南方科技大学主办】第五届电气工程与机电一体化手艺国际学术会议(ICEEMT 2025)
【南方科技大学主办】第五届电气工程与机电一体化手艺国际学术会议(ICEEMT 2025)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &qu…...
为什么不建议在 Docker 中跑 MySQL?
前言 今天我们来聊聊一个很有趣的话题:为什么我不建议在Docker中运行MySQL数据库? 有些小伙伴在工作中可能为了部署方便,习惯将所有组件都容器化,但数据库真的适合放在容器里吗? 今天就专门跟大家一起聊聊这个话题,希望对你会有所帮助。 一、容器化与数据库:天生的矛盾?…...
reLeetCode 热题 100-1 指针283. 移动零 - MKT
reLeetCode 热题 100-1 指针283. 移动零 class Solution { public:void moveZeroes(vector<int>& nums) {// int cout_=0;// for(int i =0; i<nums.size();i++){// if(nums[i]==0){// cout_++;// }// }// std::cout<< " 0s all …...
解决c# DocX生成的word文档wps打开排版外边距错乱微软office正常问题
public void insertBreak(DocX document, String filename) { DocX tempDocx = DocX.Create(filename); setPageMargin(tempDocx); document.InsertDocument(tempDocx);document.InsertSectionPageBreak(true); }改为public vo…...
The 2025 ICPC Asia East Continent Online Contest (II)
The 2025 ICPC Asia East Continent Online Contest (II)比赛链接 Review 这场非常有参与感哈哈,因为我签到题 C 贪心写了两小时,中间下机若干次让队友过题,写完已经完全不知道队友进度是啥了,后续就当小黄鸭被带飞了哈哈。 Solution C. Jiaxun! 那我确实需要 jiaxun 额额贪…...
工厂方法模式(Factory Method) - 指南
工厂方法模式(Factory Method) - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !importa…...
拾忆录
████,也即言多██,就是少点██,不容易发生██——来自于多种████的通理 择一███,遇一人██——收集自███,████ 知行合一心学理论——王阳明...
从零搭建RAG应用:跳过LangChain,掌握文本分块、向量检索、指代消解等核心技术实现
RAG(检索增强生成)本质上就是给AI模型外挂一个知识库。平常用ChatGPT只能基于训练数据回答问题,但RAG可以让它查阅你的专有文档——不管是内部报告、技术文档还是业务资料,都能成为AI的参考资源。 很多人第一反应是用LangChain或LlamaIndex这些现成框架,确实能快速搭起来。…...
python高阶技巧
闭包:在函数嵌套前提下,内部函数使用了外部函数的变量,并且外部函数返回了内部函数,我们把这个使用外部函数变量的内部函数叫做闭包 简单闭包: def outer(logo): def inner(msg): print(f"<{logo}>{msg}>{logo}") return inner fn1=outer("黑马程…...
机器视觉之图像处理篇 - 指南
机器视觉之图像处理篇 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-s…...
尝试hikari和jdbctemplate
试着基于jdbctemplate包装一个MysqlHelper类。连接池采用springboot默认的hikari。jdbctemplate提供基本的防注入,它的写法比jdbc好看,jdbc还需要putint,putstr。提供的另一个功能是结果集的转换。写完,测试代码的面貌如下:var sqlhp = new SqlHelper();sqlhp.configAddress…...
配置Nginx根据IP地址进行流量限制以及返回JSON格式数据
要在Nginx中根据IP地址进行流量限制并返回JSON格式数据,你需要结合Nginx的 ngx_http_limit_req_module模块和一些配置技巧。这个模块允许你基于定义的键值,比如IP地址,限制请求的速率。不过在进入细节前,别忘了备份你的Nginx配置文件 划重点:配置透视战斗护甲 (limit_req_…...
回归
最近因为████导致██发生████,长期的██也不是办法,我决定以███████发文。 我的很多比如███,███都发生了██,所以██的██████视█。 重新██...
CSS纯文本渐变动效
创建一个令人印象深刻的CSS文本渐变动效就像是在文字上施展魔法。想象你的文字就像是一幅幻灯片,色彩在背后流转,让每个字母都像是被彩虹绘制过一样。 为了让这种魔法发生,你需要进入CSS的巫术领地。我们将把渐变动效的制作分解为简单步骤,这样即使你不是CSS的大师,也能轻…...
泛微流程共享
第一步: 第二步:打开合同审批数据,点击右键,选择共享。 第三步:共享权限的查看,可见Giada没有查看权限。 第四步:添加权限,依次进入下面的选项。...
MySQL报错:未知系统变量tx_isolation及隔离级别查询
MySQL在其各个版本中进行了诸多变更和优化,包括系统变量、参数命名、功能等方面的调整。在这个情况中,遇到“未知系统变量tx_isolation”这个错误是因为在MySQL 8.0及以后的版本中,系统变量 tx_isolation已经被重命名为 transaction_isolation。 如果你像老朋友一样寻找 tx_…...
Redssion
1.使用 // 设置锁定资源名称 RLock disLock = redissonClient.getLock("DISLOCK"); //尝试获取分布式锁 boolean isLock= disLock.tryLock(500, 15000, TimeUnit.MILLISECONDS); if (isLock) {try {//TODO if get lock success, do something;Thread.sleep(15000);} …...
if __name__ == __main__:
if __name__ == "__main__": 是 Python 中的一个标准代码块,用于检查一个脚本是否是直接运行的。 工作原理 当一个 Python 脚本被解释器执行时,它会自动定义一些特殊变量。其中一个就是 __name__。如果脚本是直接运行的,Python 会将 __name__ 变量的值设置为 &quo…...
提升系统可靠性:Air8000多串口硬件设计的黄金法则
串口通信的可靠性直接影响工业系统的连续性。Air8000以多串口工业级连接力赋能设备互联,而硬件设计则是其可靠性的根基。总结黄金法则,从信号隔离、阻抗匹配到热设计,全方位保障串口通信的稳定性与安全性。 本文主要从硬件设计的角度,分享串口设计中的一些关键注意点,软件…...