当前位置: 首页 > news >正文

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

概念

视频采集(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)获取帧数据

视频采集核心流程

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

[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 示例
IMFActivate **ppDevices = NULL;
IMFMediaSource *pSource = NULL;
MFCreateDeviceSource(ppDevices[0], &pSource);
  • 数据格式常见:MFVideoFormat_NV12, MFVideoFormat_YUY2.

Linux 平台

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

工作流程

  1. 打开设备:

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

    ioctl(fd, VIDIOC_QUERYCAP, &cap);
    
  3. 设置格式:

    ioctl(fd, VIDIOC_S_FMT, &fmt);
    
  4. 内存映射缓冲区:

    mmap()
    
  5. 启动采集:

    ioctl(fd, VIDIOC_STREAMON);
    
  6. 循环取帧并处理。

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

macOS / iOS 平台

  • 框架:AVFoundation
  • 使用 AVCaptureSessionAVCaptureDevice 采集视频。
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 / ISPSensor Driver
系统驱动V4L2 / UVC / MF/dev/videoX / IMFMediaSource
应用采集FFmpeg / OpenCVavdevice_register_all() / VideoCapture()
数据处理编码 / 推流H.264 / H.265 / RTMP / WebRTC
http://www.dtcms.com/a/446325.html

相关文章:

  • 实习小结。
  • 怎么做百度提交入口网站企业注册查询官网
  • 归并排序算法的实现和原理
  • 语言散在风中已无远弗届:从语言的角度聊聊中国的未来
  • php做的网站收录百度排行榜
  • C++基于 brpc 的 Channel 管理封装
  • OpenWrt 的 Overlay 文件系统到底是怎么回事?
  • 优选算法-双指针:2.复写零解析
  • Leetcode 3703. Remove K-Balanced Substrings
  • 创意网站设计团队常州金坛网站建设
  • 浅聊一下网页显示过程
  • h 函数的运用场景=== 函数式封装组件 (弹窗调用)
  • 数据结构——排序算法全解析(入门到精通)
  • 建设装饰网站创客贴做网站吗
  • 爆炸特效-Unity-04-shader粒子系统
  • 公司做网站一般用什么域名网店设计师是干什么的
  • 【Redis】RedLock算法讲解
  • 网站专题页功能河北省住宅和城乡建设厅网站
  • stp root secondary 概念及题目
  • 马尔可夫链蒙特卡洛(MCMC):高维迷宫里的 “智能导航仪”—— 从商场找店到 AI 参数模拟
  • 无穿戴动捕大空间交互:如何靠摄像头实现全感官沉浸体验?
  • 求个没封的w站2022高端网站建设的要求
  • 网站经常修改好不好拼多多网店注册
  • 题解:洛谷P14127 [SCCPC 2021] K-skip Permutation
  • FreeBSD14.1 安装中文输入法fcitx
  • C++STL反向迭代器设计
  • 一文学会《C++》进阶系列之C++11
  • 腊肉网站的建设前景网页版微信可以发朋友圈吗
  • 大连凯杰建设有限公司网站wordpress 文章链接失效
  • 百度网站优化升上去国外网站入口