下面是 2023.09 月音视频面试题集锦的一些精选:
1)基础描述
H.264 是由国际标准组织机构(ISO)下属的运动图象专家组(MPEG)和国际电传视讯联盟远程通信标准化组织(ITU-T)开发的系列编码标准之一。
2)码流结构
H.264 原始码流(裸流)是由⼀个接⼀个 NALU 组成,它的功能分为两层:VCL(视频编码层)和 NAL(⽹络抽象层)。
3)两种封装
H.264 的两种封装:AnnexB 模式和 AVCC 模式。
00 00 01
或 00 00 00 01
(3 字节或 4 字节)很多解码器只⽀持 AnnexB 这种模式,因此需要将 AVCC 模式做转换,在 ffmpeg 中⽤ h264_mp4toannexb_filter
可以做转换,实现如下:
const AVBitStreamFilter *bsfilter = av_bsf_get_by_name("h264_mp4toannexb");
AVBSFContext *bsf_ctx = NULL;
// 初始化过滤器上下⽂
av_bsf_alloc(bsfilter, &bsf_ctx);
// 添加解码器属性
avcodec_parameters_copy(bsf_ctx->par_in, ifmt_ctx->streams[videoindex]->cod ecpar);
av_bsf_init(bsf_ctx);
对 H.264 编码框架进行分层的主要目标是为了有高的视频压缩比和良好的网络亲和性。
VCL 层负责视频的信号处理,包含压缩,量化等处理,NAL 层则负责解决编码后数据的网络传输。
这样可以将 VCL 和 NAL 的处理放到不同平台来处理,可以减少因为网络环境不同对 VCL 的比特流进行重构和重编码。
这样将编码和网络传输进行隔离,使功能单一、便于维护。
NALU 结构一般为:[NALU Header][NALU Payload]
,可以根据 [NALU Header]
这 1 个字节来获取帧类型,它的结构如下图:
常用的 NAL 头的取值类型:
0x | 0b | 类型 | 重要程度 |
---|---|---|---|
0x67 | 0 11 00111 | SPS | 非常重要 |
0x68 | 0 11 01000 | PPS | 非常重要 |
0x65 | 0 11 00101 | IDR 帧 | 非常重要 |
0x61 | 0 11 00001 | I帧 | 重要 |
0x41 | 0 10 00001 | P帧 | 重要 |
0x01 | 0 00 00001 | B帧 | 不重要 |
0x06 | 0 00 00110 | SEI | 不重要 |
我们以下图为例来介绍一下 I、P、B 帧的编码过程:
编码器编码一个 I 帧,然后向后跳过几个帧,用这个 I 帧作为基准帧对一个未来 P 帧进行编码,然后跳回到这个 I 帧之后的下一个帧。I 帧和 P 帧之间的帧可以被编码为 B 帧。之后,编码器会再次跳过几个帧,使用第一个 P 帧作为基准帧,编码另外一个 P 帧,然后再次跳回,用 B 帧填充显示序列中的空隙。这个过程不断持续,然后每间隔一定的帧数后插入一个新的 I 帧。
由于帧之间存在依赖关系,所以各帧的解码顺序和编码顺序是一致的,先被编码的帧在解码时就会先被解码。为了实现这一点,编码的时候需要根据每帧的编码顺序会为其记录上一个 DTS(Decoding Time Stamp)用于解码时按此顺序进行解码。
如上面介绍的编码过程,P 帧由前一个 I 帧或 P 帧来预测,而 B 帧由前后的两个 P 帧或一个 I 帧和一个 P 帧来预测,因而当存在 B 帧时,帧的编解码顺序和帧的显示顺序会有所不同,这时候就需要为每帧记录上一个 PTS(Presentation Time Stamp)用于解码后按顺序显示。
1)主要区别
参考:Difference Between H.264 and H.265[1]
2)比较点
更多关于 H.264 的细节参考:《可能是最详尽的 H.264 编码相关概念介绍》
[1]
Difference Between H.264 and H.265: https://www.gumlet.com/learn/h264-vs-h265/
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有