音视频学习(六十八):视频采集原理

概念

视频采集(Video Capture) 是指从摄像头、采集卡、屏幕或其他视频信号源中获取原始视频数据帧(Raw Frame)的过程。

其目标是将 物理世界的连续光信号 → 转换为 数字化帧序列(YUV/RGB),供编码器、传输或显示模块使用。

简单理解:

摄像头 → 光电转换 → 数字化 → 驱动层缓存 → 应用层(采集模块)读取帧数据

系统结构(五层模型)

层级 名称 作用
1️⃣ 光学层 镜头聚焦、光圈控制、曝光
2️⃣ 传感器层(Sensor) 将光信号转换为电信号(CMOS / CCD)
3️⃣ ISP 层(Image Signal Processor) 图像信号处理(白平衡、降噪、去马赛克、Gamma)
4️⃣ 驱动层 通过接口(USB/UVC、MIPI、PCIe)与系统交互
5️⃣ 应用层 调用 API(如 DirectShow、V4L2、MediaFoundation)获取帧数据

视频采集核心流程

以下是标准视频采集流程图(从硬件到软件):

scss 复制代码
[Camera Sensor] 
   ↓ 光信号采集
[ISP 芯片] 
   ↓ 图像处理 (去噪, AE/AF/AWB)
[驱动层] 
   ↓ 内核缓冲队列
[系统接口 API (V4L2 / DirectShow / Media Foundation)]
   ↓
[应用层采集模块] 
   ↓
[YUV / RGB 帧 → 编码器(H.264/H.265) → 推流/存储/显示]

关键数据类型

采集到的视频帧通常是未压缩的原始图像数据

格式 特点 用途
RGB24 / RGB32 每像素3或4字节,颜色完整 图像处理、UI
YUV420 / NV12 / I420 压缩比高,亮度分离 视频编码常用输入格式
MJPEG / H.264 摄像头直接输出压缩数据 节省带宽

不同平台的采集接口

Windows 平台

  • DirectShow:老牌多媒体框架,广泛支持摄像头。
  • Media Foundation:微软推荐的新框架(Win7+)。
  • Windows SDK 示例
cpp 复制代码
IMFActivate **ppDevices = NULL;
IMFMediaSource *pSource = NULL;
MFCreateDeviceSource(ppDevices[0], &pSource);
  • 数据格式常见:MFVideoFormat_NV12, MFVideoFormat_YUY2.

Linux 平台

  • V4L2 (Video4Linux2) :标准视频采集接口。
    • /dev/video0 表示一个摄像头设备;
    • 应用程序通过 ioctl() 与内核交互。

工作流程

  1. 打开设备:

    cpp 复制代码
    int fd = open("/dev/video0", O_RDWR);
  2. 查询能力:

    cpp 复制代码
    ioctl(fd, VIDIOC_QUERYCAP, &cap);
  3. 设置格式:

    cpp 复制代码
    ioctl(fd, VIDIOC_S_FMT, &fmt);
  4. 内存映射缓冲区:

    cpp 复制代码
    mmap()
  5. 启动采集:

    cpp 复制代码
    ioctl(fd, VIDIOC_STREAMON);
  6. 循环取帧并处理。

输出数据一般为 YUYV, NV12, MJPEG 等格式。

macOS / iOS 平台

  • 框架:AVFoundation
  • 使用 AVCaptureSessionAVCaptureDevice 采集视频。
swift 复制代码
let session = AVCaptureSession()
let device = AVCaptureDevice.default(for: .video)
let input = try AVCaptureDeviceInput(device: device)
session.addInput(input)
session.startRunning()

音视频同步采集

实际项目中常见的需求是同时采集音频和视频(如摄像头 + 麦克风),要保证 AV 同步:

  • 视频采集时间戳:PTS_video = 系统时钟 + 帧间隔
  • 音频采集时间戳:PTS_audio = 系统时钟 + 样本数 / 采样率
  • 同步策略:
    • 时间戳对齐;
    • 缓冲区延时补偿;
    • 采样率漂移调整(resample)。

性能与优化要点

优化方向 方法
内存拷贝 使用零拷贝(mmap / DMA)
帧率控制 控制帧间隔、丢帧策略
颜色转换 硬件加速(GPU / ISP / NVENC)
延时控制 减少缓冲帧数、线程实时优先级

总结

阶段 关键模块 代表接口
信号采集 CMOS / ISP Sensor Driver
系统驱动 V4L2 / UVC / MF /dev/videoX / IMFMediaSource
应用采集 FFmpeg / OpenCV avdevice_register_all() / VideoCapture()
数据处理 编码 / 推流 H.264 / H.265 / RTMP / WebRTC
相关推荐
ACP广源盛1392462567314 分钟前
GSV1201D(2201D)#ACP@DisplayPort 1.2 转 HDMI 1.4 转换器(带嵌入式 MCU)
单片机·嵌入式硬件·电脑·音视频
浅笑离愁12341 小时前
RV1126音视频项目
音视频
于是我说14 小时前
稳定常用能直接在电脑上下载微博视频的方法
音视频
ACP广源盛1392462567314 小时前
GSV2006@ACP#2 进 4 出 HDMI2.0 中继器(带音频提取 / 嵌入功能)全解析
单片机·嵌入式硬件·音视频
大模型实验室Lab4AI20 小时前
VideoLLaMA 3新一代前沿多模态基础模型赋能图像与视频深度理解| LLM | 计算机视觉
人工智能·计算机视觉·音视频
EasyDSS1 天前
视频推拉流平台EasyDSS无人机视频推拉流技术助力实现工地远程监控巡检直播
音视频·无人机
眠りたいです1 天前
基于脚手架微服务的视频点播系统-服务端开发部分接口定义,数据库表设计,视频索引设计,缓存与消息队列设计部分
数据库·c++·缓存·微服务·云原生·架构·音视频
EasyCVR1 天前
视频融合平台EasyCVR助力守护渔业牧区安全与增效
安全·音视频
大模型实验室Lab4AI1 天前
CVPR 2024 | 赋能大语言模型以精准理解视频时序瞬间 | LLM | 时序预测
人工智能·语言模型·音视频
YUJIANYUE1 天前
查立得PHP+mysql个人微博系统V1.0支持图文视频音频文件
mysql·php·音视频