1、安防行业概述:视频监控发展史、IP Camera vs 模拟摄像头、主流协议简介
大家好,我是你们这门课的老朋友。今天咱们正式开篇,聊聊安防这个行业。
说实话,我入行那会儿,监控还是个挺“神秘”的领域。不像现在,摄像头满大街都是。那时候,能接触到的设备,基本就是模拟摄像头加DVR(硬盘录像机)。嗯,咱们就从这里开始讲起。
1.1 视频监控发展史:从“看得见”到“看得懂”
视频监控的发展,我习惯把它分成三个阶段。你想想看,是不是这么回事:
- 模拟时代(第一代): 核心设备是模拟摄像机 + 同轴电缆 + DVR。我记得2008年那会儿,给一个小区做改造,满机柜的BNC接头,布线累得够呛。画质嘛,也就CIF(352x288)级别,能看清个人影就不错了。说白了,就是“看得见”。
- 数字时代(第二代): 核心设备变成了IP Camera + 网络交换机 + NVR(网络硬盘录像机)。画质直接跳到720P、1080P。我在项目中遇到过,甲方要求看车牌,模拟的完全不行,换了IP Camera后,清晰度立马就上来了。这个阶段,我们实现了“看得清”。
- 智能时代(第三代): 也就是现在。核心是AI摄像机 + 边缘计算 + 云平台。不仅能看清,还能“看得懂”。比如人脸识别、车牌识别、行为分析。我曾经给一个工厂做过项目,用AI算法检测工人是否佩戴安全帽,效果比人工盯着屏幕好太多了。
核心观点: 监控的本质没变,但技术栈从硬件驱动,彻底转向了软件和算法驱动。这也是为什么我们要学视频流处理。
1.2 IP Camera vs 模拟摄像头:到底差在哪?
很多刚入行的朋友会问:我到底该选IP Camera还是模拟摄像头?
我个人习惯,先看需求,再看预算。咱们直接上表格对比,一目了然:
| 对比项 | 模拟摄像头 | IP Camera |
|---|---|---|
| 传输介质 | 同轴电缆(视频线) | 网线(Cat5e/Cat6) |
| 分辨率上限 | D1(704x576),极限960H | 从720P到4K、8K |
| 传输距离 | 一般300米以内(需放大器) | 100米(网线),可走光纤 |
| 信号类型 | 模拟信号(CVBS) | 数字信号(IP数据包) |
| 布线成本 | 较低(线缆便宜) | 较高(需交换机) |
| 扩展性 | 差(点对点,增加点位需重新布线) | 好(通过交换机级联,灵活) |
| 智能分析 | 基本不支持 | 原生支持(可运行AI算法) |
避坑指南: 我曾经在一个老旧改造项目中,甲方坚持用模拟摄像头,说便宜。结果布线时发现,同轴电缆又粗又硬,穿管极其困难。最后人工费比设备费还高。所以,别只看设备单价,要算总成本。
说白了,模拟摄像头就像功能手机,皮实耐用但功能单一。IP Camera就像智能手机,功能强大,但需要网络环境支撑。现在新项目,我基本只推荐IP Camera。
1.3 主流协议简介:RTSP / ONVIF / GB28181
做安防视频流处理,协议是绕不开的坎。我刚开始接触时,也被这些协议搞晕过。咱们一个一个捋清楚。
1.3.1 RTSP(实时流传输协议)
RTSP,全称Real Time Streaming Protocol。它是个应用层协议,主要负责控制流媒体会话。比如:播放、暂停、快进、后退。
注意,它不负责传输视频数据本身。视频数据通常由RTP(实时传输协议)承载。RTSP就像个遥控器,RTP才是传输视频的“快递员”。
我在项目中,经常用RTSP URL来拉取摄像头视频流。格式一般是:
rtsp://username:password@192.168.1.100:554/stream1
嗯,这里要注意,不同厂家的RTSP路径格式不一样,需要查文档。
1.3.2 ONVIF(开放网络视频接口论坛)
ONVIF是一个全球性的开放标准。它的目标是解决不同品牌摄像头之间的互操作性问题。
你想想看,如果每个厂家都搞一套私有协议,那集成商就惨了。ONVIF定义了设备发现、设备配置、视频流获取等标准接口。
我个人习惯,在项目选型时,优先选择支持ONVIF Profile S/G/T的摄像头。Profile S是基础,Profile G支持存储,Profile T支持高级编码(如H.265)。
用Python调用ONVIF的示例(简化版):
from onvif import ONVIFCamera
# 连接摄像头
camera = ONVIFCamera('192.168.1.100', 80, 'admin', 'password123')
# 获取设备信息
device_info = camera.devicemgmt.GetDeviceInformation()
print(f"制造商: {device_info.Manufacturer}")
print(f"型号: {device_info.Model}")
# 获取媒体流地址
media_service = camera.create_media_service()
profiles = media_service.GetProfiles()
stream_uri = media_service.GetStreamUri({
'StreamSetup': {'Stream': 'RTP-Unicast', 'Transport': {'Protocol': 'RTSP'}},
'ProfileToken': profiles[0].token
})
print(f"RTSP地址: {stream_uri.Uri}")
警告: ONVIF虽然标准,但不同厂家实现有差异。我曾经遇到过,某品牌摄像头ONVIF接口返回的Profile列表为空,折腾了半天才发现需要先调用SetSystemDateAndTime才能正常获取。所以,测试很重要。
1.3.3 GB/T 28181(国家标准)
GB28181是国内安防行业的强制标准。主要用于视频监控系统之间的联网和信息共享。说白了,就是让不同厂家的平台能互相通信。
它基于SIP(会话初始协议)进行信令控制,用RTP/RTCP传输媒体流。如果你做的是国内项目,尤其是政府、公安、交通类的,GB28181是必须支持的。
我记得有一次,做一个城市级的视频联网平台,对接了十几个不同厂家的NVR。每个厂家对GB28181的SIP消息体格式理解都不一样,导致注册、心跳、目录查询各种问题。最后,我们不得不写了一个协议适配层,逐个厂家去调试。
GB28181的注册流程大致如下:
- 下级平台(如NVR)向上级平台(如中心服务器)发送SIP Register请求。
- 上级平台回复401 Unauthorized,携带认证挑战。
- 下级平台重新发送带认证信息的Register请求。
- 上级平台回复200 OK,注册成功。
嗯,这里面的SIP消息体是XML格式的,解析起来比较繁琐。后面章节我们会专门讲如何用Python实现GB28181的注册和心跳。
总结一下: RTSP是拉流的“遥控器”,ONVIF是设备管理的“通用语言”,GB28181是平台互联的“国家标准”。做安防视频流处理,这三个协议你都得懂一点。
好了,第一章的内容就到这里。咱们把安防行业的脉络理清了,后面再深入技术细节,就不会觉得迷茫了。下一章,我们直接上手,用Python拉取第一路RTSP视频流。