📹 FFmpeg入门详解——视频监控与ONVIF+GB/T 28181原理及应用 · 目录

📹 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简介

01.01

流媒体简介

「不等整片」才是流媒体;缓冲换抗抖动,监…

⭐⭐阅读全文 →
01.02.01

RTSP支持

RTSP 管控制的遥控器,不管数据;UR…

⭐⭐阅读全文 →
01.02.02

RTSP特点

有状态是总开关;信令走文本、媒体走二进制…

⭐⭐阅读全文 →
01.03

RTSP交互流程

五步 OPTIONS→DESCRIBE→…

⭐⭐⭐阅读全文 →
01.04.01

集合控制

末尾斜杠表示「一组」;Content-B…

⭐⭐阅读全文 →
01.04.02

实体

Content-Length 数字节不数…

⭐⭐阅读全文 →
01.04.03

容器文件

一行 m= 就是一路媒体;两路就要两次…

⭐⭐阅读全文 →
01.04.04

RTSP会话

Session 号维系状态,60 秒没动…

⭐⭐阅读全文 →
01.04.05

RTSP参数

Transport 头定端口;RTP 偶…

⭐⭐⭐阅读全文 →
01.04.06

RTSP信息

通用头就七个;Date 必须 RFC 1…

⭐⭐阅读全文 →
01.04.07

RTSP连接

持久连接省往返;60 条请求省掉 420…

⭐⭐阅读全文 →
01.04.08

RTSP扩展

Require 谈了才用;不支持回 55…

⭐⭐⭐阅读全文 →
01.04.09

RTSP操作模式

RTSP 明确不做流水线;串行六轮,只有…

⭐⭐⭐阅读全文 →
01.05

RTSP重要方法

11 个方法,日常只用前五个加 GET_…

⭐⭐⭐阅读全文 →
01.06.01

RTP格式

12 字节头逐位算;时间戳按采样时钟走…

⭐⭐⭐阅读全文 →
01.06.02

RTP的会话过程

时间戳步长 = 时钟 ÷ 帧率;序列号…

⭐⭐⭐阅读全文 →
01.07.01

RTCP的5种分组类型

PT 200~204 认包;length…

⭐⭐⭐阅读全文 →
01.07.02

RTCP包结构

SR 28 字节;NTP 纪元是 190…

⭐⭐⭐阅读全文 →

第二章 VLC及FFplay流媒体播放器

第三章 FFmpeg二次开发采集并预览本地摄像头

03.01

FFmpeg的命令行方式处理摄像头

设备名就是 URL;参数是请求不是保证…

⭐⭐阅读全文 →
03.02

FFmpeg的SDK方式读取本地摄像头

三种报错三种病;到达时刻不可信,只有 p…

⭐⭐⭐阅读全文 →
03.03.01

SDL2简介

视频驱动管窗口、渲染驱动管像素;版本不一…

⭐⭐阅读全文 →
03.03.02

VS 2015搭建SDL2开发环境

四处要动:头文件、库目录、依赖项、DLL…

⭐⭐阅读全文 →
03.03.03

Qt 5.9平台搭建SDL2开发环境

配置三行,冲突在事件循环;SDL_Cre…

⭐⭐阅读全文 →
03.03.04

Linux平台搭建SDL2开发环境

Linux 只要 apt 加 pkg-c…

⭐⭐阅读全文 →
03.03.05

SDL2播放YUV视频文件

YUV420p 每帧 1.5 字节;pi…

⭐⭐阅读全文 →
03.03.06

使用FFmpeg+SDL2读取本地摄像头并渲染

采集渲染必分两线程;队列丢最旧,收尾必送…

⭐⭐⭐阅读全文 →
03.04.01

信号

信号只发不管;没连上就静默丢弃,不报错

⭐⭐阅读全文 →
03.04.02

槽

槽就是可调用对象;槽参数少了可以,多了接…

⭐⭐阅读全文 →
03.04.03

信号与槽的关联

直连是当场调,排队是投信箱;线程退出后信…

⭐⭐⭐阅读全文 →
03.04.04

信号与槽的注意事项

四个坑都不报错:对象销毁、重复连接、槽里…

⭐⭐⭐阅读全文 →
03.04.05

元对象工具

moc 生成元信息表;C++ 没反射才需…

⭐⭐阅读全文 →
03.04.06

案例:标准信号槽

三层:队列、分发、槽;setText 要…

⭐⭐阅读全文 →
03.04.07

案例:自定义信号槽

声明即契约;跨线程传自定义类型要先注册

⭐⭐⭐阅读全文 →
03.04.08

Qt显示图像

每行补齐到 4 的倍数;641 宽每行多…

⭐⭐⭐阅读全文 →
03.04.09

Qt缩放图像

最近邻取一点、双线性取四点;numpy…

⭐⭐阅读全文 →
03.04.10

Qt旋转图像

反向映射才没有空洞;90° 空白最多是画…

⭐⭐⭐阅读全文 →

第四章 H.264/H.265视频编码并存储

04.01.01

YUV编码为H.264

裸 YUV 四个参数必须全给;压缩比 3…

⭐⭐阅读全文 →
04.01.02

控制视频的码率及分辨率

分辨率定上限、码率定保住多少;PSNR…

⭐⭐⭐阅读全文 →
04.01.03

控制视频的GOP

GOP 三件事一起变;seek 平均解…

⭐⭐⭐阅读全文 →
04.02.01

FFmpeg中libx264的选项

preset 是一整套预设;体积单调降…

⭐⭐⭐阅读全文 →
04.02.02

x264.exe中的选项名与选项值

kbps 与 bps 差一千倍;改完看结…

⭐⭐⭐阅读全文 →
04.03

libx265的常用编码选项简介

同画质只省 15% 不是一半;画面越复杂…

⭐⭐⭐阅读全文 →
04.04.01

视频解码过程简介

解码四步;送一包不保证出一帧;尾巴压 2…

⭐⭐阅读全文 →
04.04.02

视频解码流程及主要API

十个 API 前六只跑一次;老 API…

⭐⭐⭐阅读全文 →
04.04.03

视频编码过程简介

编码是解码的镜像;收尾比整段还慢,是前瞻…

⭐⭐阅读全文 →
04.04.04

视频编码流程及主要API

私有选项要在 open 前设;奇数宽高编…

⭐⭐⭐阅读全文 →
04.05.01

案例:使用FFmpeg将YUV编码为H.264

帧数 = 文件大小 ÷ 每帧大小;不给…

⭐⭐⭐阅读全文 →
04.05.02

AVFrame及相关API

linesize 不等于宽,按宽读会歪…

⭐⭐⭐阅读全文 →
04.05.03

案例:使用FFmpeg将YUV编码为H.264并封装为MP4

封装只多 1 KB;moov 默认在尾…

⭐⭐⭐阅读全文 →
04.05.04

案例:使用FFmpeg将H.264码流封装为MP4

转封装只搬包快二十多倍;裸流要先补时间戳…

⭐⭐⭐阅读全文 →
04.06.01

GOP与PTS/DTS

包上 dts 递增 pts 乱序;帧上已…

⭐⭐⭐阅读全文 →
04.06.02

FFmpeg中的时间基与时间戳

四层时间基各不同;编码器 tb 要 op…

⭐⭐⭐阅读全文 →
04.06.03

转封装过程中的时间基转换

要换四处:pts dts duratio…

⭐⭐⭐阅读全文 →
04.06.04

转码过程中的时间基转换

改 pts 必须同时改 frame.ti…

⭐⭐⭐阅读全文 →

第五章 FFmpeg二次开发IPC视频监控

第六章 SOAP及gSOAP实战

第七章 ONVIF协议原理解析

07.01.01

ONVIF背景简介

终结私有 SDK;8 个 Profile…

⭐⭐阅读全文 →
07.01.02

ONVIF的技术框架

四层叠加;412 字节里意图只占 27…

⭐⭐阅读全文 →
07.01.03

ONVIF规范

11 组 service 各一个地址;v…

⭐⭐⭐阅读全文 →
07.01.04

ONVIF Profile

S 四条硬要求;H.265 只算 T 不…

⭐⭐⭐阅读全文 →
07.01.05

ONVIF应用

Profile 不等于能力清单;被拒三种…

⭐⭐阅读全文 →
07.01.06

ONVIF测试工具

探活四连 1649 发 3760 收约…

⭐⭐阅读全文 →
07.01.07

ONVIF开发IPC的流程

七步流程;30 个操作对应 30 个响应…

⭐⭐⭐阅读全文 →
07.02.01

概念定义

五词一条引用链;token 是设备分配的…

⭐⭐阅读全文 →
07.02.02

缩写

前缀都以 T 开头;tt 是公共类型;换…

⭐⭐阅读全文 →
07.02.03

Web服务

地址与能力分头问;2.60 是规范版本…

⭐⭐阅读全文 →
07.02.04

设备发现

UDP 3702 组播;582 字节里只…

⭐⭐阅读全文 →
07.02.05

设备类型

NVT 发流 NVS 存流;类看 ser…

⭐⭐阅读全文 →
07.02.06

设备管理

三个时间只有 UTC 可靠;差 8 小时…

⭐⭐⭐阅读全文 →
07.02.07

设备输入/输出

继电器是开关量不是调光;双稳态控灯;逻辑…

⭐⭐阅读全文 →
07.02.08

图像配置

先读范围再改值;曝光单位是微秒;静默夹边…

⭐⭐⭐阅读全文 →
07.02.09

媒体配置

一个 Profile 套四块;25 节点…

⭐⭐⭐阅读全文 →
07.02.10

实时流

GetStreamUri 是终点站;得到…

⭐⭐阅读全文 →
07.02.11

事件处理

PullPoint 拉不推因为不要公网地…

⭐⭐⭐阅读全文 →
07.02.12

PTZ控制

坐标归一化 -1 到 1;y 负是下;C…

⭐⭐⭐阅读全文 →
07.02.13

视频分析

Rule 管检测什么,Module 管怎…

⭐⭐⭐阅读全文 →
07.02.14

分析设备

区别在位置不在功能;PoE 功耗限制前端…

⭐⭐阅读全文 →
07.02.15

显示

Display/Window/Video…

⭐⭐阅读全文 →
07.02.16

接收器

media 给地址 receiver 收…

⭐⭐阅读全文 →
07.02.17

存储

MaximumRetentionTime…

⭐⭐⭐阅读全文 →

第八章 ONVIF框架代码案例应用

08.01.01

下载WSDL文件

404 页冒充 200;判据只有前 5…

⭐⭐阅读全文 →
08.01.02

新建工作空间

路径三种形状:三段目录 8 个、两段直挂…

⭐阅读全文 →
08.01.03

修改typemap.dat

改 typemap 是改 key 不是改…

⭐⭐⭐阅读全文 →
08.01.04

生成onvif.h文件

wsdl2h 四个参数;解析出 417…

⭐⭐⭐阅读全文 →
08.01.05

鉴权(认证)

鉴权埋在生成期不埋在调用期;nonce…

⭐⭐⭐阅读全文 →
08.01.06

正式生成框架代码

soapcpp2 八个产物;GetSer…

⭐⭐⭐阅读全文 →
08.01.07

关联自己的命名空间

nsmap 十项;漏一项就是 unbou…

⭐⭐阅读全文 →
08.01.08

提取需要的文件

生成物一半、运行时一半;wsseapi.…

⭐⭐阅读全文 →
08.02.01

WS-Discovery原理

五种消息两套机制;630 字节里 Typ…

⭐⭐阅读全文 →
08.02.02

单播、多播(组播)和广播

组播自发自收只证明路径通;广播没有回执…

⭐⭐阅读全文 →
08.02.03

设备搜索

四步闭环 14.31 毫秒;大头是 TC…

⭐⭐⭐阅读全文 →
08.03

获取设备基本信息

三次调用请求 424/414/406 字…

⭐⭐阅读全文 →
08.04

鉴权(认证)

无令牌 424、明文 1091、摘要 1…

⭐⭐⭐阅读全文 →
08.05

读取音视频流

GetStreamUri 之后就不归 O…

⭐⭐阅读全文 →
08.06

图像抓拍

JPEG 质量 85 约 14 KB,头…

⭐⭐阅读全文 →
08.07

修改分辨率

设 3000×2000 回读 1920×…

⭐⭐⭐阅读全文 →
08.08.01

安装依赖项

八样工具要查;缺 openssl-dev…

⭐⭐阅读全文 →
08.08.02

下载gSOAP-2.8.116的源码

2.8.116 源码包;bin 目录是编…

⭐阅读全文 →
08.08.03

编译gSOAP-2.8.116

configure 三参数;config…

⭐⭐⭐阅读全文 →
08.08.04

修改typemap.dat

同一份 typemap.dat 转 CR…

⭐⭐阅读全文 →
08.08.05

生成onvif.h头文件

路径里有 emoji 或空格时 shel…

⭐⭐阅读全文 →
08.08.06

鉴权(认证)

digest 有跨平台对照值;验证要用…

⭐⭐⭐阅读全文 →
08.08.07

根据头文件产生框架代码

五个参数只有 -2 不能省;C 与 C+…

⭐⭐⭐阅读全文 →
08.08.08

复制其他文件

七行文件清单;漏 wsseapi.c 编…

⭐⭐阅读全文 →
08.08.09

关联自己的命名空间

表编进程序不落文件;漏结尾空项会读野内存…

⭐⭐⭐阅读全文 →
08.08.10

代码封装

八行样板压成四行;该包协议细节,不该包重…

⭐⭐⭐阅读全文 →
08.08.11

设备查找的案例代码

四步 14.54 毫秒,最后一步占 12…

⭐⭐⭐阅读全文 →

第九章 SIP及eXosip开源库应用

09.01.01

SIP的功能

SIP 只管开会谈,不管送数据;媒体交给…

⭐⭐阅读全文 →
09.01.02

SIP的实现机制

请求—应答模型加六种方法;状态靠对话(D…

⭐⭐⭐阅读全文 →
09.01.03

SIP的特征及元素

四类元素:用户代理、代理、重定向、注册服…

⭐⭐阅读全文 →
09.01.04

SIP会话构成

一次对话三样标识:Call-ID、Fro…

⭐⭐⭐阅读全文 →
09.01.05

SIP通信流程及消息

消息分请求行与状态行;头字段一行一个,正…

⭐⭐阅读全文 →
09.01.06

H.323协议和SIP的比较

H.323 是电信血统、二进制;SIP…

⭐⭐阅读全文 →
09.01.07

SIP与SDP

SDP 被 SIP 捎带;s= 说明会话…

⭐⭐阅读全文 →
09.01.08

SIP工作流程

注册、邀请、应答、确认、挂断五步;ACK…

⭐⭐⭐阅读全文 →
09.01.09

SIP超时机制

超时靠定时器 A~K;T1 从 500…

⭐⭐⭐阅读全文 →
09.02.01

oSIP及eXosip简介

oSIP 是协议栈,eXosip 是帮它…

⭐⭐阅读全文 →
09.02.02

Windows系统下编译oSIP2和eXosip2

Windows 下靠 CMake 加 V…

⭐⭐阅读全文 →
09.02.03

Ubuntu下编译oSIP2和eXosip2

Ubuntu 下 configure 三…

⭐⭐阅读全文 →
09.02.04

案例:UAS和UAC入门

UAS 等、UAC 主动;最小可跑只要注…

⭐⭐⭐阅读全文 →
09.02.05

oSIP的重要数据结构

消息、事件、事务、对话四层结构;层级搞错…

⭐⭐⭐阅读全文 →
09.02.06

oSIP的初始化工作

初始化只要一次;回调要在线程里跑,主线程…

⭐⭐阅读全文 →
09.02.07

oSIP收发消息机制

收是回调、发是入队;eXosip 自己管…

⭐⭐⭐阅读全文 →
09.02.08

oSIP管理事务及会话

事务管一次收发,对话管整场;超时事件必须…

⭐⭐⭐阅读全文 →
09.02.09

eXosip协议栈简介

eXosip 把注册、邀请、订阅包成一句…

⭐⭐阅读全文 →

第十章 GB/T 28181协议原理

10.01

协议简介

国标解决的是「跨厂商互联」;ONVIF…

⭐⭐阅读全文 →
10.02.01

术语和定义

术语先统一:监控域、联网系统、SIP 监…

⭐阅读全文 →
10.02.02

缩略语

缩略语当成索引表用;SIP、SDP、RT…

⭐阅读全文 →
10.03.01

SIP监控域互联结构

三级结构:设备、平台、上级平台;域内靠…

⭐⭐⭐阅读全文 →
10.03.02

SIP监控域与非SIP监控域互联结构

非 SIP 域要过网关;网关转信令、转封…

⭐⭐阅读全文 →
10.03.03

联网系统通信协议结构

四层叠起来:SIP 管信令、SDP 管描…

⭐⭐阅读全文 →
10.04

传输要求

媒体首选 UDP;TCP 只适合低码率或…

⭐⭐阅读全文 →
10.05.01

统一编码规则

20 位五段:中心、行业、类型、网络标识…

⭐⭐⭐阅读全文 →
10.05.02

媒体压缩编解码

视频主用 H.264/H.265,音频主…

⭐⭐阅读全文 →
10.05.03

媒体存储封装格式

PS 把音视频与私有数据打成一包;头开销…

⭐⭐⭐阅读全文 →
10.05.04

SDP定义

一行一个字段的纯文本;两份 SDP 方向…

⭐⭐⭐阅读全文 →
10.05.05

网络传输协议的转换

网关三件事:信令翻译、媒体重封装、地址端…

⭐⭐阅读全文 →
10.05.06

控制协议的转换

速度是浮点对字节,误差半格;方向靠指令码…

⭐⭐阅读全文 →
10.05.07

媒体传输协议的转换

四种承载实占码率只差三个百分点;TCP…

⭐⭐⭐阅读全文 →
10.05.08

媒体数据格式的转换

PS 拆包要按长度跳不是搜起始码;头占比…

⭐⭐⭐阅读全文 →
10.05.09

与其他系统的数据交换

三套标识各管一段;级联会重新编号,映射表…

⭐⭐阅读全文 →
10.05.10

信令字符集

UTF-8 一个汉字三字节;Conten…

⭐阅读全文 →
10.06

控制要求

200 毫秒分四段;机械占三分之一,优化…

⭐⭐阅读全文 →
10.07

传输、交换、控制安全性要求

摘要认证让密码不上线,但不加密内容;真正…

⭐⭐⭐阅读全文 →
10.08.01

注册和注销

两个来回:先空 REGISTER 拿随机…

⭐⭐⭐阅读全文 →
10.08.02

实时视音频点播

三趟信令:INVITE、200 OK、A…

⭐⭐⭐阅读全文 →
10.08.03

设备控制

四条指令一百五十字节上下,参数只占十几个…

⭐⭐阅读全文 →
10.08.04

报警事件通知和分发

带宽不是问题,处理才是;一次报警的成本可…

⭐⭐阅读全文 →
10.08.05

设备信息查询

分页不省流量省超时;一万路按每页五十条要…

⭐⭐阅读全文 →
10.08.06

状态信息报送

丢三个周期判离线;负担在写库不在带宽,只…

⭐阅读全文 →
10.08.07

历史视音频文件检索

返回的是时间段不是文件列表;按事件切必须…

⭐⭐阅读全文 →
10.08.08

历史视音频回放

只差 s= 一个字面量;倍速要花带宽,4…

⭐⭐⭐阅读全文 →
10.08.09

历史视音频文件下载

下载出文件、回放出流;一小时 4 Mbp…

⭐⭐阅读全文 →
10.08.10

网络校时

校的是几个月不是几秒;100 ppm 一…

⭐⭐阅读全文 →
10.08.11

订阅和通知

订阅过期是静默的;推加定时全量才自愈,只…

⭐⭐阅读全文 →
10.08.12

语音广播和语音对讲

唯一上行媒体;64 kbps 但包小,头…

⭐⭐⭐阅读全文 →

第十一章 GB/T 28181国标平台案例应用