📹 FFmpeg入门详解——视频监控与ONVIF+GB/T 28181原理及应用
照着《FFmpeg入门详解——视频监控与ONVIF+GB/T 28181原理及应用》(梅会东 编著,清华大学出版社,2024 年 5 月第 1 版,456 页)做的自学笔记 —— 「FFmpeg 入门详解」系列**第 6 册**。前五册讲的是「比特」本身:音视频原理讲比特怎么来,流媒体直播讲比特怎么发出去,命令行特效讲命令行怎么调,SDK二次开发讲 API 怎么写,播放器原理换到接收端讲播放器怎么把比特还原成画面。这一本把镜头转过去,对准**摄像头这一端**:不是「我怎么做一个播放器」,而是「我怎么把几十上百台不同厂家的摄像机管起来」——ONVIF 标准协议 + GB/T 28181 国标双线并进。全书规划 11 章 191 篇,已完成第 1~11 章 191 篇:第 1 章 18 篇流媒体与 RTSP/RTP/RTCP(RTSP 与 HTTP 长得像但一个能拖进度、RTP 头只有 12 字节、RTCP 的 length 写 6 代表 28 字节);第 2 章 7 篇 VLC 及 FFplay 流媒体播放器;第 3 章 18 篇 FFmpeg 二次开发采集并预览本地摄像头;第 4 章 18 篇 H.264/H.265 视频编码并存储(转封装与转码的时间基转换);第 5 章 6 篇 FFmpeg 二次开发 IPC 视频监控;第 6 章 11 篇 SOAP 及 gSOAP 实战(wsdl2h+soapcpp2 生成了什么);第 7 章 24 篇 ONVIF 协议原理解析(WS-Discovery 网上喊话、Profile S 与 T 的差别);第 8 章 27 篇 ONVIF 框架代码案例应用;第 9 章 18 篇 SIP 及 eXosip 开源库应用(REGISTER/INVITE 信令、eXosip 怎么把 SIP 栈包成好用的函数);第 10 章 31 篇 GB/T 28181 协议原理(国标注册、目录查询、点播与流承载);第 11 章 13 篇 GB/T 28181 国标平台案例应用。本课是 监控课:需要真机 IPC/NVR 的用【📋 实操路径】单列,能算的都真算。大白话、不跳步骤、必带生活比喻、常见误区、可折叠自测题。
前置课程:音视频原理及应用、流媒体直播、命令行与音视频特效、SDK二次开发与直播美颜、音视频流媒体播放器。
内容来自我的 Obsidian 自学笔记 · 全书 11 章 191 篇已全部写完 · 全书完结 🎉
第一章 流媒体与RTSP/RTP/RTCP简介
流媒体简介
「不等整片」才是流媒体;缓冲换抗抖动,监…
RTSP支持
RTSP 管控制的遥控器,不管数据;UR…
RTSP特点
有状态是总开关;信令走文本、媒体走二进制…
RTSP交互流程
五步 OPTIONS→DESCRIBE→…
集合控制
末尾斜杠表示「一组」;Content-B…
实体
Content-Length 数字节不数…
容器文件
一行 m= 就是一路媒体;两路就要两次…
RTSP会话
Session 号维系状态,60 秒没动…
RTSP参数
Transport 头定端口;RTP 偶…
RTSP信息
通用头就七个;Date 必须 RFC 1…
RTSP连接
持久连接省往返;60 条请求省掉 420…
RTSP扩展
Require 谈了才用;不支持回 55…
RTSP操作模式
RTSP 明确不做流水线;串行六轮,只有…
RTSP重要方法
11 个方法,日常只用前五个加 GET_…
RTP格式
12 字节头逐位算;时间戳按采样时钟走…
RTP的会话过程
时间戳步长 = 时钟 ÷ 帧率;序列号…
RTCP的5种分组类型
PT 200~204 认包;length…
RTCP包结构
SR 28 字节;NTP 纪元是 190…
第二章 VLC及FFplay流媒体播放器
VLC播放器
四段流水线 access/demux/d…
VLC的功能列表
414 个格式名目、557 个解码器;能…
VLC播放网络串流
五步握手五条报文;少一个 Content…
VLC作为流媒体服务器
时间戳增量 = 时钟 ÷ 帧率;只发媒体…
使用Wireshark抓包分析RTSP交互流程
pcap 三数 24/16/54;抓包只…
视频播放器简介
三级:拆、解、按时出;播放器 96% 的…
FFmpeg播放架构与原理
五个对象三段打开;60 包只出 58 帧…
第三章 FFmpeg二次开发采集并预览本地摄像头
FFmpeg的命令行方式处理摄像头
设备名就是 URL;参数是请求不是保证…
FFmpeg的SDK方式读取本地摄像头
三种报错三种病;到达时刻不可信,只有 p…
SDL2简介
视频驱动管窗口、渲染驱动管像素;版本不一…
VS 2015搭建SDL2开发环境
四处要动:头文件、库目录、依赖项、DLL…
Qt 5.9平台搭建SDL2开发环境
配置三行,冲突在事件循环;SDL_Cre…
Linux平台搭建SDL2开发环境
Linux 只要 apt 加 pkg-c…
SDL2播放YUV视频文件
YUV420p 每帧 1.5 字节;pi…
使用FFmpeg+SDL2读取本地摄像头并渲染
采集渲染必分两线程;队列丢最旧,收尾必送…
信号
信号只发不管;没连上就静默丢弃,不报错
槽
槽就是可调用对象;槽参数少了可以,多了接…
信号与槽的关联
直连是当场调,排队是投信箱;线程退出后信…
信号与槽的注意事项
四个坑都不报错:对象销毁、重复连接、槽里…
元对象工具
moc 生成元信息表;C++ 没反射才需…
案例:标准信号槽
三层:队列、分发、槽;setText 要…
案例:自定义信号槽
声明即契约;跨线程传自定义类型要先注册
Qt显示图像
每行补齐到 4 的倍数;641 宽每行多…
Qt缩放图像
最近邻取一点、双线性取四点;numpy…
Qt旋转图像
反向映射才没有空洞;90° 空白最多是画…
第四章 H.264/H.265视频编码并存储
YUV编码为H.264
裸 YUV 四个参数必须全给;压缩比 3…
控制视频的码率及分辨率
分辨率定上限、码率定保住多少;PSNR…
控制视频的GOP
GOP 三件事一起变;seek 平均解…
FFmpeg中libx264的选项
preset 是一整套预设;体积单调降…
x264.exe中的选项名与选项值
kbps 与 bps 差一千倍;改完看结…
libx265的常用编码选项简介
同画质只省 15% 不是一半;画面越复杂…
视频解码过程简介
解码四步;送一包不保证出一帧;尾巴压 2…
视频解码流程及主要API
十个 API 前六只跑一次;老 API…
视频编码过程简介
编码是解码的镜像;收尾比整段还慢,是前瞻…
视频编码流程及主要API
私有选项要在 open 前设;奇数宽高编…
案例:使用FFmpeg将YUV编码为H.264
帧数 = 文件大小 ÷ 每帧大小;不给…
AVFrame及相关API
linesize 不等于宽,按宽读会歪…
案例:使用FFmpeg将YUV编码为H.264并封装为MP4
封装只多 1 KB;moov 默认在尾…
案例:使用FFmpeg将H.264码流封装为MP4
转封装只搬包快二十多倍;裸流要先补时间戳…
GOP与PTS/DTS
包上 dts 递增 pts 乱序;帧上已…
FFmpeg中的时间基与时间戳
四层时间基各不同;编码器 tb 要 op…
转封装过程中的时间基转换
要换四处:pts dts duratio…
转码过程中的时间基转换
改 pts 必须同时改 frame.ti…
第五章 FFmpeg二次开发IPC视频监控
视频监控系统的功能及特点
监控要的是能追溯不是好看;4 Mbps…
视频监控系统的工作原理及结构
四段结构;采集 33 毫秒是硬下限;缓冲…
视频监控系统的总体结构设计
容量涨三倍盘数只涨 2.25 倍;四系数…
视频监控系统的存储结构设计
TB 与 TiB 差 9.1%;RAID…
FFmpeg读取网络摄像头
三类报错要分清;timeout 单位是微…
FFmpeg实现H.264/H.265编码的C++类封装
构造不建资源、析构必释放、重复 clos…
第六章 SOAP及gSOAP实战
RPC简介
RPC 卖的是跨机器不是快;本地 0.1…
HTTP简介
四段结构;空行是硬分隔符;没有 Cont…
XML简介
前缀只是别名;解析要带 Clark 记法…
WSDL简介
五段倒着读;message 是操作数的两…
SOAP简介
一次调用就是一个元素;200 也可能失败…
Web Service简介
老三件套死了 UDDI;SOAP 响应…
soapcpp2的用法
message 变结构体、operati…
wsdl2h的用法
xs:string 翻 char* 要池…
CentOS编译并测试gSOAP
六项依赖;缺 openssl-devel…
Ubuntu编译gSOAP
Ubuntu 装包省事;但 /usr 与…
VS利用gSOAP开发Web Service客户端
桩只做三件事;VS 要加 stdsoap…
第七章 ONVIF协议原理解析
ONVIF背景简介
终结私有 SDK;8 个 Profile…
ONVIF的技术框架
四层叠加;412 字节里意图只占 27…
ONVIF规范
11 组 service 各一个地址;v…
ONVIF Profile
S 四条硬要求;H.265 只算 T 不…
ONVIF应用
Profile 不等于能力清单;被拒三种…
ONVIF测试工具
探活四连 1649 发 3760 收约…
ONVIF开发IPC的流程
七步流程;30 个操作对应 30 个响应…
概念定义
五词一条引用链;token 是设备分配的…
缩写
前缀都以 T 开头;tt 是公共类型;换…
Web服务
地址与能力分头问;2.60 是规范版本…
设备发现
UDP 3702 组播;582 字节里只…
设备类型
NVT 发流 NVS 存流;类看 ser…
设备管理
三个时间只有 UTC 可靠;差 8 小时…
设备输入/输出
继电器是开关量不是调光;双稳态控灯;逻辑…
图像配置
先读范围再改值;曝光单位是微秒;静默夹边…
媒体配置
一个 Profile 套四块;25 节点…
实时流
GetStreamUri 是终点站;得到…
事件处理
PullPoint 拉不推因为不要公网地…
PTZ控制
坐标归一化 -1 到 1;y 负是下;C…
视频分析
Rule 管检测什么,Module 管怎…
分析设备
区别在位置不在功能;PoE 功耗限制前端…
显示
Display/Window/Video…
接收器
media 给地址 receiver 收…
存储
MaximumRetentionTime…
第八章 ONVIF框架代码案例应用
下载WSDL文件
404 页冒充 200;判据只有前 5…
新建工作空间
路径三种形状:三段目录 8 个、两段直挂…
修改typemap.dat
改 typemap 是改 key 不是改…
生成onvif.h文件
wsdl2h 四个参数;解析出 417…
鉴权(认证)
鉴权埋在生成期不埋在调用期;nonce…
正式生成框架代码
soapcpp2 八个产物;GetSer…
关联自己的命名空间
nsmap 十项;漏一项就是 unbou…
提取需要的文件
生成物一半、运行时一半;wsseapi.…
WS-Discovery原理
五种消息两套机制;630 字节里 Typ…
单播、多播(组播)和广播
组播自发自收只证明路径通;广播没有回执…
设备搜索
四步闭环 14.31 毫秒;大头是 TC…
获取设备基本信息
三次调用请求 424/414/406 字…
鉴权(认证)
无令牌 424、明文 1091、摘要 1…
读取音视频流
GetStreamUri 之后就不归 O…
图像抓拍
JPEG 质量 85 约 14 KB,头…
修改分辨率
设 3000×2000 回读 1920×…
安装依赖项
八样工具要查;缺 openssl-dev…
下载gSOAP-2.8.116的源码
2.8.116 源码包;bin 目录是编…
编译gSOAP-2.8.116
configure 三参数;config…
修改typemap.dat
同一份 typemap.dat 转 CR…
生成onvif.h头文件
路径里有 emoji 或空格时 shel…
鉴权(认证)
digest 有跨平台对照值;验证要用…
根据头文件产生框架代码
五个参数只有 -2 不能省;C 与 C+…
复制其他文件
七行文件清单;漏 wsseapi.c 编…
关联自己的命名空间
表编进程序不落文件;漏结尾空项会读野内存…
代码封装
八行样板压成四行;该包协议细节,不该包重…
设备查找的案例代码
四步 14.54 毫秒,最后一步占 12…
第九章 SIP及eXosip开源库应用
SIP的功能
SIP 只管开会谈,不管送数据;媒体交给…
SIP的实现机制
请求—应答模型加六种方法;状态靠对话(D…
SIP的特征及元素
四类元素:用户代理、代理、重定向、注册服…
SIP会话构成
一次对话三样标识:Call-ID、Fro…
SIP通信流程及消息
消息分请求行与状态行;头字段一行一个,正…
H.323协议和SIP的比较
H.323 是电信血统、二进制;SIP…
SIP与SDP
SDP 被 SIP 捎带;s= 说明会话…
SIP工作流程
注册、邀请、应答、确认、挂断五步;ACK…
SIP超时机制
超时靠定时器 A~K;T1 从 500…
oSIP及eXosip简介
oSIP 是协议栈,eXosip 是帮它…
Windows系统下编译oSIP2和eXosip2
Windows 下靠 CMake 加 V…
Ubuntu下编译oSIP2和eXosip2
Ubuntu 下 configure 三…
案例:UAS和UAC入门
UAS 等、UAC 主动;最小可跑只要注…
oSIP的重要数据结构
消息、事件、事务、对话四层结构;层级搞错…
oSIP的初始化工作
初始化只要一次;回调要在线程里跑,主线程…
oSIP收发消息机制
收是回调、发是入队;eXosip 自己管…
oSIP管理事务及会话
事务管一次收发,对话管整场;超时事件必须…
eXosip协议栈简介
eXosip 把注册、邀请、订阅包成一句…
第十章 GB/T 28181协议原理
协议简介
国标解决的是「跨厂商互联」;ONVIF…
术语和定义
术语先统一:监控域、联网系统、SIP 监…
缩略语
缩略语当成索引表用;SIP、SDP、RT…
SIP监控域互联结构
三级结构:设备、平台、上级平台;域内靠…
SIP监控域与非SIP监控域互联结构
非 SIP 域要过网关;网关转信令、转封…
联网系统通信协议结构
四层叠起来:SIP 管信令、SDP 管描…
传输要求
媒体首选 UDP;TCP 只适合低码率或…
统一编码规则
20 位五段:中心、行业、类型、网络标识…
媒体压缩编解码
视频主用 H.264/H.265,音频主…
媒体存储封装格式
PS 把音视频与私有数据打成一包;头开销…
SDP定义
一行一个字段的纯文本;两份 SDP 方向…
网络传输协议的转换
网关三件事:信令翻译、媒体重封装、地址端…
控制协议的转换
速度是浮点对字节,误差半格;方向靠指令码…
媒体传输协议的转换
四种承载实占码率只差三个百分点;TCP…
媒体数据格式的转换
PS 拆包要按长度跳不是搜起始码;头占比…
与其他系统的数据交换
三套标识各管一段;级联会重新编号,映射表…
信令字符集
UTF-8 一个汉字三字节;Conten…
控制要求
200 毫秒分四段;机械占三分之一,优化…
传输、交换、控制安全性要求
摘要认证让密码不上线,但不加密内容;真正…
注册和注销
两个来回:先空 REGISTER 拿随机…
实时视音频点播
三趟信令:INVITE、200 OK、A…
设备控制
四条指令一百五十字节上下,参数只占十几个…
报警事件通知和分发
带宽不是问题,处理才是;一次报警的成本可…
设备信息查询
分页不省流量省超时;一万路按每页五十条要…
状态信息报送
丢三个周期判离线;负担在写库不在带宽,只…
历史视音频文件检索
返回的是时间段不是文件列表;按事件切必须…
历史视音频回放
只差 s= 一个字面量;倍速要花带宽,4…
历史视音频文件下载
下载出文件、回放出流;一小时 4 Mbp…
网络校时
校的是几个月不是几秒;100 ppm 一…
订阅和通知
订阅过期是静默的;推加定时全量才自愈,只…
语音广播和语音对讲
唯一上行媒体;64 kbps 但包小,头…
第十一章 GB/T 28181国标平台案例应用
国标平台的组成
五块:信令、媒体、存储、前端、数据库;能…
国标平台的组网及特点
四种组网看「故障时断多久」;级联每层多三…
LiveGBS的服务架构
CMS 管信令、SMS 管媒体;流地址现…
LiveCMS的配置文件
ini 无类型校验,错了静默;编号与域必…
LiveSMS的配置文件
一半的键是端口;真正定预算的是并发路数与…
LiveSMS的运行
五 TCP 加一 UDP 段;黑屏先查…
配置设备接入
五行配置错一行上不去;编号错了不报错,通…
平台管理
权限两个维度:能看哪些设备、能做什么;前…
运行软件
单进程省事但扩不了;天花板在网卡,千兆约…
设备接入
编号五种错三种靠格式拦;重号要查库;导入…
平台管理
可授权范围等于节点数;树太深没人用,例外…
平台应用案例
四笔账:汇聚折三成、存储除两个系数、回放…
GB/T 28181抓包流程分析
十一条报文两段;看抓包只做三件事:比 C…