FFmpeg及 RTSP、RTMP

FFmpeg 是一个功能强大的跨平台开源音视频处理工具集 ,集录制、转码、编解码、流媒体传输等功能于一体,被广泛应用于音视频处理、直播、点播等场景。它支持几乎所有主流的音视频格式和协议,是许多媒体软件(如 VLC、YouTube、抖音等)的核心底层依赖。

核心组件与功能

FFmpeg 由多个核心部分组成,涵盖音视频处理的全流程:

1. 命令行工具

  • ffmpeg:核心转码工具,用于格式转换、编解码、裁剪、合并、滤镜处理等。
  • ffplay:轻量级播放器,支持播放各种音视频格式,可用于测试流或文件。
  • ffprobe:媒体信息分析工具,用于查看音视频文件的编码格式、时长、码率、分辨率等元数据。
  • ffserver:流媒体服务器工具(较旧,逐渐被专用服务器替代)。

2. 核心库(供开发者调用)

  • libavcodec:音视频编解码库,支持 H.264、H.265、AAC、MP3 等主流编解码器。
  • libavformat:封装格式处理库,支持 MP4、FLV、MKV 等容器格式,以及 RTMP、RTSP、HLS 等流媒体协议。
  • libavfilter:音视频滤镜库,支持加水印、裁剪、缩放、特效处理等。
  • libswscale:视频缩放和像素格式转换库(如 YUV 转 RGB)。
  • libswresample:音频重采样库,用于调整采样率、声道数等。
  • libavutil:通用工具库,提供数学运算、加密、像素处理等基础功能。

常用命令示例

FFmpeg 命令行参数丰富,以下是一些典型用法:

1. 查看媒体文件信息

复制代码
ffprobe input.mp4  # 查看 MP4 文件的详细元数据

2. 格式转换(转码)

将视频从一种格式转为另一种(如 MKV 转 MP4):

复制代码
ffmpeg -i input.mkv output.mp4

3. 提取音频

从视频中提取音频并保存为 MP3:

复制代码
ffmpeg -i input.mp4 -vn -acodec mp3 -b:a 128k output.mp3
# -vn:禁用视频输出;-acodec mp3:指定音频编码器;-b:a 128k:音频码率

4. 视频裁剪

截取视频的第 10 秒到第 30 秒片段(不重新编码,速度快):

复制代码
ffmpeg -i input.mp4 -ss 00:00:10 -to 00:00:30 -c copy output_cut.mp4
# -ss:起始时间;-to:结束时间;-c copy:直接复制流(无损裁剪)

5. 调整分辨率

将视频分辨率改为 1280x720(720P):

复制代码
ffmpeg -i input.mp4 -s 1280x720 output_720p.mp4

6. 推流到 RTMP 服务器

将本地视频以实时速率推送到 RTMP 直播服务器:

复制代码
ffmpeg -re -i input.mp4 -c copy rtmp://server/live/stream_name
# -re:按实际帧率发送(模拟实时流);-c copy:不转码直接推送

7. 拉取 RTSP 流并保存

从网络摄像头(RTSP 协议)拉流并保存为本地文件:

复制代码
ffmpeg -i rtsp://username:password@camera_ip/stream -c copy output.mp4

8. 添加水印

在视频左上角添加 PNG 水印图片:

复制代码
ffmpeg -i input.mp4 -i watermark.png -filter_complex "overlay=10:10" output_watermark.mp4
# overlay=10:10:水印位置(x=10, y=10)

核心优势

  1. 全能性:支持几乎所有音视频格式、协议和编解码器,无需依赖其他工具。
  2. 高效性:优化的编解码算法,支持硬件加速(如 NVIDIA CUDA、Intel QSV),处理速度快。
  3. 跨平台:可运行于 Windows、Linux、macOS、Android、iOS 等系统。
  4. 可扩展性:提供 C 语言 API,可被 Python、Java 等多种语言调用,方便集成到应用中。
  5. 开源免费:基于 LGPL/GPL 许可证,可自由使用和二次开发。

摄像头 Pipeline

"摄像头 Pipeline"(摄像头数据处理流水线)是指从摄像头传感器捕获光信号,到最终输出可使用的图像 / 视频数据的完整技术流程,核心是将原始数据按步骤处理为标准化格式,广泛用于手机、安防监控、自动驾驶等设备。

核心环节(按数据流向排序)

  1. 传感器捕获(Sensor Capture)

    摄像头传感器(如 CMOS)将光信号转换为原始电信号,输出未经处理的 "RAW 数据"(如 RGGB 格式),包含像素亮度、色彩信息,但无压缩且体积大。

  2. ISP 处理(Image Signal Processing)

    这是 Pipeline 的核心步骤,由专门的 ISP 芯片 / 模块执行,目的是优化图像质量:

    • 基础校正:坏点修复(修正传感器故障像素)、黑电平校正(消除暗电流干扰);
    • 关键优化:白平衡(调整色温,避免偏色)、自动曝光(控制亮度)、对焦(确保清晰度)、降噪(减少杂色)、色彩还原(校准 RGB 比例);
    • 效果增强:锐化(提升细节)、HDR 合成(融合不同曝光画面,扩大动态范围)。
  3. 数据编码 / 压缩(Encoding/Compression)

    经过 ISP 优化的图像数据仍为 "YUV/RGB 原始格式",需通过编码压缩减少体积,便于存储 / 传输:

    • 静态图像:常用 JPEG 编码;
    • 动态视频:常用 H.264(AVC)、H.265(HEVC)、AV1 等标准。
  4. 数据输出 / 传输(Output/Transmission)

    压缩后的图像 / 视频数据,通过接口(如 MIPI、USB、以太网)传输到处理器(CPU/GPU)、存储设备(硬盘 / 闪存),或直接用于显示(屏幕)、AI 分析(如人脸识别)等场景。

3A 算法

"3A 算法" 是摄像头 ISP(图像信号处理) Pipeline 中的核心自动控制算法,通过实时调整参数优化图像质量,解决不同环境下的成像问题,是消费级相机(手机、单反)、安防监控等设备 "即拍即清晰" 的关键技术。

3A 算法的组成(核心三模块)

3A 算法分别对应自动对焦(AF)、自动曝光(AE)、自动白平衡(AWB) ,三者协同工作,无需人工干预即可输出高质量图像。

RTSP和RTMP

一、核心定位与设计目标

  • RTSP :专注于媒体流控制 ,本身不传输实际音视频数据,主要负责发送 "播放、暂停、快进" 等控制指令,需配合 RTP(传输媒体数据)和 RTCP(监控传输质量)协议使用。

    设计目标是提供灵活的实时媒体控制能力,适合需要交互操作的场景。

  • RTMP :集控制与数据传输于一体 ,可直接传输音视频数据(基于 FLV 格式封装),同时支持基础控制指令,无需依赖额外数据传输协议。

    设计目标是实现低延迟的媒体流传输,早期为 Flash Player 设计,后成为直播推流的主流协议。

二、技术特性对比

对比维度 RTSP RTMP
底层协议 通常基于 TCP(默认端口 554),也支持 UDP 基于 TCP(默认端口 1935)
数据传输方式 仅控制,媒体数据由 RTP 传输(UDP 为主) 直接传输媒体数据(FLV 格式分片)
延迟表现 极低(100ms-1 秒),UDP 传输减少等待 较低(1-3 秒),TCP 可靠传输带来轻微延迟
传输可靠性 RTP 基于 UDP,可能丢包(需 RTCP 补偿) 基于 TCP,保证数据不丢失、有序到达
协议开放性 标准化协议(IETF 定义),完全开放 最初为 Adobe 私有协议,后开源但标准较封闭
媒体格式支持 灵活,支持多种编码(H.264、MPEG 等) 主要支持 FLV 封装的音视频(H.264/AAC 为主)

三、典型工作流程

RTSP 流程(需 RTP/RTCP 配合):
  1. 客户端发送OPTIONS查询服务器支持的指令
  2. 发送DESCRIBE获取媒体描述(SDP 格式,含编码、RTP 端口等)
  3. 发送SETUP建立 RTP 传输通道(协商 TCP/UDP)
  4. 发送PLAY指令,服务器通过 RTP 开始传输媒体数据
  5. 可发送PAUSE暂停,TEARDOWN终止会话
RTMP 流程:
  1. 客户端与服务器建立 TCP 连接(端口 1935)
  2. 完成 RTMP 三次握手(验证协议版本)
  3. 客户端发送connect指令建立会话
  4. 推流场景:发送publish指令开始上传媒体流(FLV 分片)
    拉流场景:发送play指令,服务器推送媒体流
  5. 断开连接时发送close指令

四、应用场景差异

  • RTSP

    适合低延迟、需实时控制的场景,如:

    • 安防监控(网络摄像头 IPC 的实时预览、云台控制)
    • 视频会议(实时画面切换、摄像头控制)
    • 工业监控(设备实时画面传输)
  • RTMP

    适合互联网直播、推流等场景,如:

    • 主播推流(通过 OBS 等工具向服务器推流)
    • 低延迟直播(游戏直播、互动直播)
    • 视频点播(边传边播已存储的视频文件)

五、优缺点总结

协议 优点 缺点
RTSP 延迟极低、控制灵活、协议开放标准 需配合 RTP/RTCP 使用,实现复杂度高;端口易被防火墙封禁
RTMP 实现简单(单协议)、传输可靠、生态成熟 延迟略高于 RTSP;1935 端口易被封禁;浏览器原生不支持(需插件)

六、实际应用中的结合

在很多流媒体系统中,两者会配合使用:

  • 前端摄像头通过RTSP输出实时流(低延迟)
  • 后端通过 FFmpeg 将 RTSP 流转码为RTMP推送到直播服务器
  • 服务器再将 RTMP 流转为 HLS/DASH 等协议供用户在浏览器观看

例如:摄像头(RTSP) → FFmpeg转码 → 直播服务器(RTMP) → 分发为HLS → 观众端

H.264 和 AAC

H.264 和 AAC 是音视频领域常用的 两种独立编码标准,常搭配使用(如 MP4、RTMP 格式),前者处理视频,后者处理音频,以下是简洁介绍:

一、H.264(视频编码)

  • 全称:ITU-T H.264 / ISO/IEC MPEG-4 AVC(Advanced Video Coding),俗称 "AVC"。
  • 核心作用 :对原始视频数据(如摄像头采集的 RGB 数据)进行 高效压缩,在保证画质的同时大幅减小文件体积 / 传输带宽(压缩比可达 100:1 以上)。
  • 关键特点
    • 通用性极强:支持标清、高清(1080P)、4K 等多种分辨率,广泛用于直播(RTMP)、点播(MP4)、监控、手机拍摄等场景。
    • 平衡画质与效率:通过 "帧间预测"(参考前后帧减少冗余)、"帧内预测"(单帧内像素关联压缩)等技术,在相同码率下画质优于早期标准(如 MPEG-2)。
  • 常见应用:本地视频文件(MP4、MKV)、直播推流(RTMP 常用 H.264 视频)、视频会议。

二、AAC(音频编码)

  • 全称:Advanced Audio Coding(高级音频编码),是 MPEG-4 标准下的音频编码方案。
  • 核心作用:对原始音频数据(如麦克风采集的 PCM 数据)进行压缩,替代早期的 MP3,在相同码率下音质更优。
  • 关键特点
    • 音质好、压缩效率高:128-192 kbps 码率即可实现接近 CD 音质,支持单声道、立体声、多声道(如 5.1 环绕声)。
    • 低延迟:适合实时场景(如直播、语音通话),也支持无损压缩(AAC-LC 为有损,AAC-ALAC 为无损)。
  • 常见应用:视频伴音(MP4、FLV)、音乐文件(.aac 格式)、手机录音、直播音频。

三、H.264 + AAC 的典型搭配

两者常结合使用,因为视频需要画面 + 声音,且均为高效压缩标准,能最大化降低存储 / 传输成本:

  • 容器格式:通过 MP4、FLV、MKV 等 "容器" 将 H.264 视频流和 AAC 音频流封装在一起,确保同步播放。

  • 典型场景 :用 FFmpeg 推 RTMP 直播时,常指定 -c:v libx264(H.264 视频编码)和 -c:a aac(AAC 音频编码),如:

    复制代码
    ffmpeg -i input.mp4 -c:v libx264 -c:a aac -f flv rtmp://server/live/stream