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)
核心优势
- 全能性:支持几乎所有音视频格式、协议和编解码器,无需依赖其他工具。
- 高效性:优化的编解码算法,支持硬件加速(如 NVIDIA CUDA、Intel QSV),处理速度快。
- 跨平台:可运行于 Windows、Linux、macOS、Android、iOS 等系统。
- 可扩展性:提供 C 语言 API,可被 Python、Java 等多种语言调用,方便集成到应用中。
- 开源免费:基于 LGPL/GPL 许可证,可自由使用和二次开发。
摄像头 Pipeline
“摄像头 Pipeline”(摄像头数据处理流水线)是指从摄像头传感器捕获光信号,到最终输出可使用的图像 / 视频数据的完整技术流程,核心是将原始数据按步骤处理为标准化格式,广泛用于手机、安防监控、自动驾驶等设备。
核心环节(按数据流向排序)
传感器捕获(Sensor Capture)
摄像头传感器(如 CMOS)将光信号转换为原始电信号,输出未经处理的 “RAW 数据”(如 RGGB 格式),包含像素亮度、色彩信息,但无压缩且体积大。ISP 处理(Image Signal Processing)
这是 Pipeline 的核心步骤,由专门的 ISP 芯片 / 模块执行,目的是优化图像质量:
- 基础校正:坏点修复(修正传感器故障像素)、黑电平校正(消除暗电流干扰);
- 关键优化:白平衡(调整色温,避免偏色)、自动曝光(控制亮度)、对焦(确保清晰度)、降噪(减少杂色)、色彩还原(校准 RGB 比例);
- 效果增强:锐化(提升细节)、HDR 合成(融合不同曝光画面,扩大动态范围)。
数据编码 / 压缩(Encoding/Compression)
经过 ISP 优化的图像数据仍为 “YUV/RGB 原始格式”,需通过编码压缩减少体积,便于存储 / 传输:
- 静态图像:常用 JPEG 编码;
- 动态视频:常用 H.264(AVC)、H.265(HEVC)、AV1 等标准。
数据输出 / 传输(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 配合):
- 客户端发送
OPTIONS
查询服务器支持的指令- 发送
DESCRIBE
获取媒体描述(SDP 格式,含编码、RTP 端口等)- 发送
SETUP
建立 RTP 传输通道(协商 TCP/UDP)- 发送
PLAY
指令,服务器通过 RTP 开始传输媒体数据- 可发送
PAUSE
暂停,TEARDOWN
终止会话RTMP 流程:
- 客户端与服务器建立 TCP 连接(端口 1935)
- 完成 RTMP 三次握手(验证协议版本)
- 客户端发送
connect
指令建立会话- 推流场景:发送
publish
指令开始上传媒体流(FLV 分片)
拉流场景:发送play
指令,服务器推送媒体流- 断开连接时发送
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