如果你写过 Windows 桌面程序,但一碰到摄像头、麦克风就习惯性地去调现成的封装库,这门课的定位就很清楚了:它要补的是 Windows 原生音视频这条链路上最容易断层的一段——从设备枚举、数据采集,到编码、封装、落盘的完整过程。学之前先想清楚一件事:你缺的到底是「会用某个 API」,还是「知道采集线程和编码线程之间那块缓冲区该怎么管」。后者才是这门课真正要解决的东西。
这门课面向的能力缺口
DirectShow 是一套基于 COM 的多媒体框架,它的学习曲线不在 API 数量,而在几个绕不开的概念:Filter Graph、Pin 连接、Sample 的分配与释放、Reference Clock 的时间戳。很多人在书上或文档里看过这些名词,但真正要动手做采集时,会卡在具体的地方:枚举出来的设备名称怎么和实际硬件对应、采集回调里拿到的数据格式是什么、为什么帧率不稳、时间戳为什么对不上。
H.264 和 AAC 这一侧的问题同样具体。不是「知道有这么个编码标准」就够了,而是要处理输入格式的转换(比如摄像头常见输出与编码器要求的 YUV 格式不一致)、码率与关键帧间隔怎么设、AAC 的采样率与声道数如何匹配采集端、编码后的音视频包怎么按时间戳交织成一个可播放的文件。这些环节任何一处出错,结果就是文件能生成但播不了,或者音画不同步。
学习过程中会碰到的具体问题
- 设备枚举:如何列出系统里所有视频输入和音频输入设备,并区分设备路径与友好名称。
- 采集回路:Source Filter、Sample Grabber 或自定义 Filter 该怎么选,回调线程里能做什么、不能做什么。
- 数据流转:采集到的原始帧如何交给编码器,中间要不要做格式转换,缓冲区如何复用。
- 编码参数:H.264 的 profile、码率控制方式、GOP 设置分别影响什么;AAC 的比特率与声道如何与采集端对齐。
- 封装与存储:编码后的裸流如何加上时间戳、按顺序写文件,为什么直接拼接裸流往往播不了。
- 自定义 Filter:什么时候必须自己写 Filter,Pin 的协商逻辑要注意什么。
配套练习应该怎么用
这门课的价值不在于看完,而在于跟着把几个能跑起来的小程序改一遍。建议的顺序是:先把播放器案例跑通,确认开发环境和 Filter Graph 的调试手段可用;再做设备枚举,这一步不涉及数据,但能帮你建立设备与接口之间的对应关系;接着是麦克风音频采集,音频链路比视频简单,适合先把回调、缓冲、时间戳这套机制摸熟;最后再上音视频同时采集加编码存储的综合案例。
每改一处,都值得停下来验证一件事:如果我把这块去掉或改错,现象是什么。比如把时间戳全写成零,播放器会怎么表现;把编码器的输入格式设错,是报错还是花屏。这种「制造故障再修好」的练习,比顺着教程敲一遍更能留下东西。
看完之后应该能回答的问题
- DirectShow 里一个采集 Graph 从建立到释放,各阶段分别发生了什么,哪些资源必须手动释放。
- 采集回调拿到的数据,从格式到内存布局是什么样的,编码器能不能直接吃。
- 音视频同步的本质是什么,时间戳在采集、编码、封装三个阶段分别由谁负责。
- 自己写一个 Filter 时,输入输出 Pin 的媒体类型协商失败,通常有哪些原因。
- 为什么采集编码存储这条链路里,任何一环的缓冲策略选错,都会表现为丢帧或音画不同步。
如果这些问题你现在答不上来,或者只能答个大概,这门课值得系统过一遍。如果其中大部分你已经清楚,缺的可能只是某一环的实践,那就挑对应的小节定向补,不必从头再来。
Windows之5:DirectShow+H.264+AAC音视频采集及编码存储案例实战
课程详情
课程详情
本课程深入讲解DirectShow的原理及案例,帮助学员掌握DShow枚举音视频设备并采集、H.264+AAC编码的技能。
适合人群
- Windows编程爱好者
学习收获
- 系统学习DirectShow原理及案例
- 掌握DShow枚举音视频设备并采集
- 了解H.264+AAC编码技术
课程亮点
- DirectShow配置开发环境及入门简介
- DShow播放器案例实战
- DShow枚举音视频输入设备信息
- DShow采集麦克风音频案例实战
- DShow的自定义Filter组件开发
- DShow+H.264+AAC音视频采集与编码案例
课程目录
01 DShow基础及Filter原理 01 Dshow+H.264+AAC采集并编码课程简介.mp4 02 Dshow基础及Filter原理简介.mp4 02 DShow配置开发环境及入门简介 01 Dshow开发环境配置之1.mp4 02 Dshow开发环境配置之2.mp4 03 DShow播放器案例实战 01 Dshow实现播放器简介.mp4 02 Dshow播放器代码.mp4 04 DShow枚举音视频输入设备信息 01 FFmpeg列举本地音视频设备.mp4 02 DShow列举音视频设备简介.mp4 03 DShow列举音视频设备函数封装.mp4 04 DShow列举音视频设备代码运行.mp4 05 DShow采集麦克风音频案例实战 01 DShow采集麦克风代码简介.mp4 02 DShow采集麦克风初始化捕获列表.mp4 03 创建界面并枚举音频采集设备.mp4 04 核心初始化函数.mp4 05 完善代码.mp4 06 调试bug.mp4 06 DShow的自定义Filter组件开发 01 DShow自定义组件简介.mp4 02 DShow自定义组件随机小球代码.mp4 03 DShow自定义组件随机小球注册.mp4 04 DShow手工自定义组件简介.mp4 05 DShow手工自定义组件的媒体类型.mp4 06 DShow手工自定义组件的媒体缓冲区.mp4 07 DShow手工自定义组件的注册调试.mp4 07 DShow+H.264+AAC音视频采集与编码案例 01 Dshow+H.264+AAC数据回调原理分析.mp4 02 Dshow+H.264+AAC采集并编码代码实现.mp4 03 Libx264的开发环境搭建.mp4 04 Libx264将yuv文件编码为h264.mp4





