这门课解决什么核心问题

很多 C/C++ 开发者在安防监控领域遇到瓶颈,并非代码能力不足,而是对 GB28181 国标协议及底层流媒体原理缺乏深度掌握。实际开发中,单纯调用现成库往往无法解决复杂的联调故障。本课程直击这一痛点,要求学员从零设计并开发高性能的音视频安防流媒体服务器。你需要完全理解 GB28181 标准下的设备注册、保活机制、资源管理以及实时与回放流的获取推送逻辑。更硬核的是,课程强制要求手动处理 RTP/PS 协议头,深入理解每一个字节和每一位的含义,并能进行手动的打包与解封装。同时,你需要基于 H264 编码规则,逆向解析 SPS 和 PPS 序列参数集以计算分辨率,甚至手动实现解码流程。这解决了从“业务开发”到“底层通信开发”的能力跨越问题。

适合谁学?建议先看哪几块

本课专为具备 C/C++ 基础的同学设计,目标群体包括应届毕业生、培训学员,以及希望从其他软件开发领域转行进入音视频行业的工程师。学习门槛相对明确:你必须熟练掌握 C/C++ 指针操作、内存管理及面向对象编程思想,且对 Linux 环境下的基础开发有基本认知。如果网络编程基础薄弱,强烈建议先补齐 TCP/IP 协议栈和 Socket 编程知识,否则后续的多路 IO 复用部分将难以跟上。建议的学习路径为:首先攻克 Linux 操作系统中的网络 Socket 编程及多路 IO 复用技术,建立高性能服务器的架构思维;其次深入学习 PJSIP 库,实现 GB28181 所需的 SIP 信令协议栈;最后进入流媒体核心,集中突破 H264 码流解析与 RTP/PS 协议的手动封装实战。

学完能做什么?资料如何配合练习

学完本课程后,你将能够独立构建符合国标规范的流媒体服务,具备处理大规模监控设备接入、实时视频流转发及回放记录查询的完整能力。你不再依赖黑盒库,而是能精准定位流媒体传输中的丢包、花屏或信令异常问题。配套的实战练习资料是巩固知识的关键,严禁只看不练。你需要在 Linux 环境下,利用资料提供的框架,手动编写代码实现 SPS/PPS 解析、RTP 片段组包等核心功能。建议采用“理论-编码-调试”的闭环模式:先理解协议原理,再动手实现代码,最后通过抓包工具验证协议头的正确性。只有在反复调试中修正每一个字节的错误,才能真正掌握这套流媒体网络通讯开发技术。

课程介绍

适合人群: 有c/c++基础的应届生和培训生,或者目前从事其他开发想转行到音视频行业的同学。 你将会学到: 从零设计并开发可靠的高性能的音视频安防流媒体服务器,为学员提供安防流媒体领域的专业知识和实践经验。 按照GB28181标准来完成监控设备之间的注册、保活、设备资源、 回放记录以及实时/回放流获取和推送使用pjsip实现gb28181的SIP信令协议栈应用到rtp/ps协议头的每一个字节每一位代表的含义及如何封装和解封装进行rtp片段的接收和组包,手动进行ps和rtp打包和解包需要深度解析H264中的PSP和PPS序列参数集计算分辨, 按照h264的编码规则进行逆向的手动解码一套完整的实战流媒体网络通讯开发掌握linux操作系统中网络socket+多路IO复用技术

课程目录

QQ_1748056390946.png   2025-5-24 11:18 上传 课程介绍: 适合人群: 有c/c++基础的应届生和培训生,或者目前从事其他开发想转行到音视频行业的同学。 你将会学到: 从零设计并开发可靠的高性能的音视频安防流媒体服务器,为学员提供安防流媒体领域的专业知识和实践经验。 按照GB28181标准来完成监控设备之间的注册、保活、设备资源、 回放记录以及实时/回放流获取和推送使用pjsip实现gb28181的SIP信令协议栈应用到rtp/ps协议头的每一个字节每一位代表的含义及如何封装和解封装进行rtp片段的接收和组包,手动进行ps和rtp打包和解包需要深度解析H264中的PSP和PPS序列参数集计算分辨, 按照h264的编码规则进行逆向的手动解码一套完整的实战流媒体网络通讯开发掌握linux操作系统中网络socket+多路IO复用技术 课程目录:
第1章项目开篇介绍和环境搭建(1小时15分钟5节) 1-1开篇[21:42] 1-2项目演示[05:25] 1-3环境配置(上)-项目工程的构建[10:13] 1-4环境搭建(中)-第三方库安装[16:58] 1-5环境搭建(下)-第三方库安装[21:09]
第2章服务器初始组件开发(1小时21分钟4节) 2-1服务器配置文件设计与读取[29:03] 2-2单例模型实现全局类并使用gdb调试问题[13:59] 2-3封装线程[17:36] 2-4实现线程任务池[20:59]
第3章SIP信令服务器(10小时52分钟41节) 3-1pjsip库讲解[13:03] 3-2初始化sip信令协议栈并设置信令服务端口[29:13] 3-3实现自定义模块注册及完成SIP事件轮询机制[24:51] 3-4创建下级信令服务器[04:50] 3-5下级注册1-鉴权注册与非鉴权注册流程讲解[14:31] 3-6下级注册2-对照抓包示例,组织注册字段等内容[29:23] 3-7下级注册3-讲解pjsip源码,实现下级非鉴注册功能[26:58] 3-8下级注册4-调试pjsip源码排查下级非鉴权注册程序异常[13:01] 3-9下级注册5-sip消息包字段组织功能封装[19:37] 3-10下级注册6-实现定时器功能完成下级定时发起注册机制[23:43] 3-11解决pjlib线程安全问题[04:37] 3-12互斥锁的运用和实现智能锁[09:33] 3-13上级注册1-实现上级接收下级的注册请求事件[22:12] 3-14上级注册2-使用多态搭建任务事件处理框架[28:48] 3-15上级注册3-上级实现对非鉴权注册请求的具体业务处理和[39:30] 3-16上级注册4-实现上下级注销交互[10:16] 3-17上级注册5-应用层实现注册有效期定时检查机制[14:54] 3-18上级注册6-上下级鉴权注册的实现步骤[13:07] 3-19使用随机数生成器实现生成指定位数的随机串[07:26] 3-20上级注册7-上级组织鉴权方式及认证参数等字段值[11:14] 3-21上级注册8-解决鉴权参数nonce和opaque值重[03:19] 3-22下级注册7-下级完成鉴权配置及鉴权信息的设定[17:49] 3-23下级注册8-调试pjsip源码解决下级鉴权响应异常问[04:07] 3-24上级注册9-上级完成MD5鉴权认证,并验证 3-25详细讲解保活信令在上下级之间的用途,制定下级保活的策[16:00] 3-26下级组织保活信令中的xml数据,并根据响应码实现不同[15:38] 3-27上级解析xml元素,根据根节点元素区分业务[13:08] 3-28封装xml解析功能[04:45] 3-29上级按照策略实现下级保活请求的处理,并与下级服务联调[17:10] 3-30设计并封装实现xml元素组织功能的类[20:38] 3-31使用封装的xml类替换实现组织保活信令的xml数据[06:07] 3-32详解国标目录信令交互过程,和二十位国标id组成以及目[14:42] 3-33上级服务实现catalog信令包的组织和请求[20:53] 3-34下级对设备目录请求的处理思路,并解决推送包网络分片的[18:27] 3-35下级解析xml数据获取sn号以及响应[10:31] 3-36实现封装json数据序列化和反序列化的功能[08:00] 3-37设计算法实现按照指定的数量来组织推送的目录节点数量[13:26] 3-38按照国标字段组织设备目录树item节点[17:28] 3-39下级完成catalog信令包的整合和推送动作[07:36] 3-40下级整合SIP事件分发机制,并成功向上级推送cata[12:08] 3-41上级接收下级推送的catalog包并解析item节点[24:56]
第4章 流媒体服务器 (12小时14分钟 59节) 4-1深度解析网络层的分片以及传输层端口不可达产生的原因[07:38] 4-2深度解析rtp和ps头[12:44] 4-3h264协议运用讲解(NAL,VCL,I,B,P,G[09:28] 4-4深度解析h264编码数据并计算出分辨率[09:11] 4-5媒体交互流程讲解以及sdp协商协议中各字段讲解[15:44] 4-6初始化媒体回调事件以及媒体模块的注册[13:43] 4-7完成上级INVITE请求的条件[15:47] 4-8组织上级INVITE请求的请求行和请求头部分[12:43] 4-9组织上级INVITE请求的sdp数据[20:55] 4-10上级完成INVITE预览开流请求动作[08:17] 4-11处理开流程序异常问题,根据抓包内容修改sdp内容[03:28] 4-12整合下级的INVITE和BYE事件接收分发处理[12:44] 4-13下级完成对上级开流请求携带的sdp解析[10:55] 4-14下级组织响应需要负载的sdp数据[13:39] 4-15下级成功响应,并抓包确认上下级开流交互流程[07:37] 4-16上级完成对下级响应携带的sdp数据解析[11:10] 4-17讲解rtp和rtcp的配合机制[04:48] 4-18完成rtp会话源的添加删除和BYE事件处理功能[09:14] 4-19上级完成rtp会话的创建启动与会话句柄透传[13:06] 4-20下级完成ps封装器的初始化,并梳理h264流层层打包[10:46] 4-21下级完成rtp会话的创建并将上级rtp会话添加到会话[12:39] 4-22下级模拟从媒体模块接收自定义协议的h264数据[12:48] 4-23下级完成音视频数据的ps流封装功能[17:48] 4-24解决ps流封装异常问题,和内部取流业务时间消耗的估算[03:20] 4-25下级完成ps音视频流的rtp封装和推送[13:58] 4-26上级从会话源表中找到第一个具有可用数据的源,并获取r[08:09] 4-27完成rtp丢包检测和组织完整帧的先驱条件[10:46] 4-28上级实现完整帧的组包和复现丢包场景并播放ps流出现卡[13:52] 4-29分析rtp丢包原因并最终解决问题[08:08] 4-30讲解ps包解复用流程[10:51] 4-31将ps解封装后的分片数据按照音视频类型再组织为完整的[13:14] 4-32排查ps解封装失败问题,并从下级rtp打包模块着手解[08:21] 4-33制定自定义协议头,从h264码流中优先解出sps类型[13:31] 4-34讲解h264的三种数据类型u(1),ue(v),se[14:37] 4-35上级实现从IDR帧的编码数据中获取帧率和分辨率的值[20:16] 4-36上级解决实现重复开流的场景处理[19:45] 4-37上级实现检测下级推流异常的机制,下级进行场景复现和测[14:42] 4-38上级完成关流BYE信令功能[09:56] 4-39下级处理上级的BYE请求[19:00] 4-40上下级联调测试正常和异常的BYE关流处理机制[07:00] 4-41解决异常情况:抓包显示上级一直在发送INVITE请求[09:07] 4-42完善上下级rtp端口的动态分配和回收[19:15] 4-43上级开启定时线程开流关流,测试上下级rtp端口的分配[11:22] 4-44下级完成rtcp-rr包检测机制,并联调测试rtcp[13:51] 4-45上级服务实现前端和中心存储回放记录获取[12:48] 4-46下级完成对于recordinfo请求的响应和回放记录[17:17] 4-47上级解析下级推送的回放记录负载的item内容[12:26] 4-48上下级实现和验证回放流的请求和推送[12:15] 4-49解决下级推送的回放流出现pts为负值并且不连续的异常[05:13] 4-50讲解多路IO复用select,poll和epoll[10:02] 4-51将select和epoll的共性进行抽象,并封装se[16:07] 4-52完成epoll功能的封装实现[09:01] 4-53实现多路IO复用高层次抽象API的封装[21:53] 4-54结合封装的多路IO机制实现高并发性能的tcp服务器[21:10] 4-55结合封装的多路IO机制实现高并发性能的tcp客户端[11:03] 4-56上级指定rtp的传输层为tcp,并启动tcp客户端[12:42] 4-57下级rtp的传输层协议由开流sdp协商指定,并启动t[13:03] 4-58上下级联调测试并修改多路IO复用机制[17:24] 4-59解决select就绪事件异常问题,并交叉联调测试收发[11:58]
第5章 客户端展示数据和拉流播放(完结) (4小时21分钟 12节) 5-1windows下开发环境配置[14:40] 5-2client界面布局[10:23] 5-3windows下完成客户端的tcpClient功能[14:09] 5-4上级服务完成tcpserver功能[18:07] 5-5tcpserver完成tcp连接事件及关闭事件回调[12:15] 5-6服务端使用线程任务池机制完成客户端的获取注册平台信息[22:34] 5-7客户端成功展示上级服务返回的已成功注册的下级平台信息[18:39] 5-8上级服务端成功返回客户端请求的目录资源[31:43] 5-9客户端界面展示接收的目录资源[22:33] 5-10上级服务完成客户端的预览请求并向下级服务触发开流命令[18:43] 5-11客户端将接收的码流保存到本地h264文件中并成功播放[14:55] 5-12客户端完成接收码流线程和解码渲染线程并最终成功取流播[01:03:08]