视频编码是将数字视频信号压缩为适合存储和通过网络传输且质量损失最小的格式的过程。如果没有编码,一分钟4K分辨率的未压缩视频大约占用30GB空间,使得通过互联网传输成为不可能。根据Sandvine全球互联网现象报告(2025),视频占所有互联网流量的65%,而编码是实现这一点的关键技术。
要点
视频编码是使用压缩算法将未压缩的视频信号转换为数字格式的过程。视频编解码器中实现的算法在空间域(单个帧内)和时间域(连续帧之间)移除冗余信息。
未压缩的视频是一系列帧,每个帧以RGB或YUV格式存储为像素数组。如果没有压缩,30 FPS下的一秒钟1080p视频需要大约1.5 GB内存。H.264编解码器将此流压缩到3–5 Mbps,比原始体积小2500倍。
视频编解码器使用两种压缩类型:帧内压缩和帧间压缩。帧内压缩独立应用于每个帧,使用类似JPEG的算法:离散余弦变换(DCT)、量化和熵编码。
帧间压缩分析连续帧之间的差异,仅编码变化。如果背景是静态的,编解码器仅发送一次完整帧(I帧),然后仅发送差异(P和B帧),这显著减少了低动态场景的数据量。
视频编解码器的选择决定了质量和文件大小的比例、设备的兼容性以及许可费用。在移动应用市场中,四种主要编解码器占主导地位:H.264(AVC)、H.265(HEVC)、VP9和AV1。
| 编解码器 | 标准 | 年份 | 与H.264相比压缩率 | 许可 |
|---|---|---|---|---|
| H.264/AVC | MPEG-4 Part 10 | 2003 | 1x(基准) | 收费(MPEG LA) |
| H.265/HEVC | MPEG-H Part 2 | 2013 | 效率提高40–50% | 收费(两个专利池) |
| VP9 | 2013 | 效率提高30–40% | 免费 | |
| AV1 | AOM | 2018 | 效率提高50–60% | 免费(免版税) |
H.264(AVC — 高级视频编码)仍然是最兼容的视频编解码器:自2005年以来,所有移动设备、浏览器和智能电视都支持它。即使是廉价设备也具有H.264解码的硬件加速,这使其成为通用流的理想选择。
H.264的主要缺点是与现代编解码器相比压缩效率相对较低。在相同比特率下,H.265和AV1提供明显更高的质量,这对HDR和4K内容尤其重要。
H.265(HEVC — 高效视频编码)在相同视觉质量下提供比H.264好40–50%的压缩。这是通过更灵活地将帧划分为块(CTU高达64×64像素,而非16×16)和改进的运动预测算法实现的。
HEVC在所有Apple设备(从iPhone 6开始)、Android(从5.0版本开始,具有硬件解码)和大多数智能电视上得到支持。HEVC的许可费高于H.264,由两个专利池管理,这使得合法使用复杂化。
AV1 — 由开放媒体联盟(AOM)开发的视频编解码器,该联盟由Google、Netflix、Amazon、Intel和Mozilla领导。AV1提供比H.264好50–60%的压缩,且完全免版税,这使其对流媒体服务具有吸引力。
AV1的主要缺点是编码的计算复杂度高。在相同硬件上,AV1编码可能比H.264慢5–10倍,尽管硬件解码已在2024–2025年的设备(Snapdragon 8 Gen 3、Apple A17 Pro)中出现。
音频编解码器在移动应用中与视频编解码器同样重要。视频流媒体需要具有最低延迟、高质量和与MP4和WebM容器兼容的音频。三种主要音频编解码器覆盖了99%的移动流媒体应用。
AAC(高级音频编码) — MP3的继任者,由MPEG于1997年开发,并成为iTunes、YouTube和Android的标准音频编解码器。AAC在比特率低30%的情况下提供与MP3相同的质量,并支持高达7.1的多声道音频。
对于移动应用,建议对立体声使用128–192 kbps比特率的AAC-LC,对低比特率32–64 kbps使用AAC-HE。所有现代设备都支持AAC硬件解码,从而最大限度地降低功耗。
Opus — 来自IETF(RFC 6716)的开放音频编解码器,在6到510 kbps的比特率下提供所有音频编解码器中最好的质量。Opus结合了SILK(语音算法)和CELT(音乐算法),并根据内容自动切换模式。
Opus用于WebRTC视频通话、Spotify和Discord应用,并从iOS 11和Android 5.0开始支持HLS。Opus的低延迟(5–26毫秒,而AAC为40–100毫秒)使其成为直播和视频会议的首选。
编码参数决定最终文件大小、视频质量以及设备兼容性。移动应用开发人员必须为每种内容类型选择最佳设置:电影、体育直播、用户生成内容。
比特率 — 用于编码一秒钟视频的位数。区分为CBR(恒定比特率)用于直播、VBR(可变比特率)具有目标质量用于归档存储,以及ABR(平均比特率)用于流媒体。
| 分辨率 | H.264(推荐) | H.265/HEVC | AV1 |
|---|---|---|---|
| 360p | 400–800 kbps | 250–500 kbps | 200–400 kbps |
| 720p | 1.5–4 Mbps | 1–2.5 Mbps | 0.8–2 Mbps |
| 1080p | 3–8 Mbps | 2–5 Mbps | 1.5–4 Mbps |
| 4K(2160p) | 15–40 Mbps | 10–25 Mbps | 8–20 Mbps |
CRF(恒定速率因子) — x264和x265中的编码参数,设置目标质量而不是固定比特率。CRF范围从0(无损)到51(最差质量),其中18–28是工作范围。对于移动应用,建议x264使用CRF 23,x265使用CRF 25。
CRF 18–20为演示内容和离线观看提供高质量。CRF 24–28适用于流媒体和用户生成内容,其中文件大小比绝对质量更重要。
H.264标准定义了配置文件(Baseline、Main、High)和级别(Level 1–5.2),限制了最大视频参数。Baseline Profile与所有设备兼容,但不支持B帧。High Profile提供最高质量,用于1080p内容。
4K流媒体需要Level 5.1及更高级别,自2018年以来大多数移动设备支持该级别。编解码器级别决定了最大分辨率、比特率和缓冲区大小,确保在所有认证设备上正确解码。
流媒体编码与归档编码不同,需要创建多个质量变体(ABR阶梯)并针对网络传输进行优化。内容提供商使用实时转码或VOD的预先编码。
移动应用的典型ABR集包括4–6个变体:从适合弱网的144p(200 kbps)到适合Wi-Fi的1080p(8 Mbps)。推荐分辨率:144p、240p、360p、480p、720p、1080p。对于4K内容,添加1440p和2160p。
val mediaCodec = MediaCodec.createEncoderByType(
MediaFormat.MIMETYPE_VIDEO_AVC
)
val format = MediaFormat.createVideoFormat(
MediaFormat.MIMETYPE_VIDEO_AVC,
1280, 720
).apply {
setInteger(MediaFormat.KEY_BIT_RATE, 3_000_000)
setInteger(MediaFormat.KEY_FRAME_RATE, 30)
setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 2)
setInteger(MediaFormat.KEY_PROFILE,
MediaCodecInfo.CodecProfileLevel.AVCProfileHigh)
setInteger(MediaFormat.KEY_LEVEL,
MediaCodecInfo.CodecProfileLevel.AVCLevel31)
}
mediaCodec.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE)
对于直播,低延迟尤其重要。编码设置应最小化编解码器的输入/输出延迟:建议GOP大小为1–2秒(每30–60帧),B帧关闭或最小化,对于H.264使用Baseline Profile。
低延迟的现代协议 — LL-HLS和CMAF-Low Latency — 需要具有1–2秒片段和部分加载(Partial Segments)功能的分片编码。编解码器必须支持每个片段中的moof-box以实现分片MP4。
常见问题
视频编码 — 使用编解码器压缩数字视频信号以减少数据量的过程。在移动应用中,编码允许传输和存储视频,将大小减少数百倍而在设备屏幕上没有明显的质量损失。
H.264提供与旧设备的最高兼容性,而H.265在相同质量下效率提高40–50%。对于1080p及更低的内容,H.264就足够了,对于4K,如果设备支持,建议使用H.265或AV1。
比特率 — 每秒视频的数据量。对于1080p,H.264的最佳比特率为3–8 Mbps,H.265为2–5 Mbps。选择取决于内容:动态场景(体育)需要更高的比特率,静态场景(访谈)需要较低的比特率。
VP9 — Google的AV1前身,提供与H.265相当的压缩。AV1比VP9压缩效率高20–30%,但编码需要5–10倍更多的资源。VP9更适合YouTube,AV1适合Netflix和现代流媒体服务。
对于直播,请使用H.264 Baseline Profile,GOP 1–2秒,无B帧,1080p比特率2–4 Mbps。为LL-HLS启用分片MP4(CMAF),并使用MediaCodec或VideoToolbox进行硬件编码。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。