今天继续给大家分享音视频面试过程会被常问到的一些问题!
面试的具体题目
1、说一下播放器的设计过程
这里的话主要分以下几步完成:
开启一个线程进行解封装操作 , 这包括:读取音频、视频的压缩数据,并进行区分。若视频数据则插入视频队列,音频数据则插入音频队列。
再开启两个解码线程分别对音频、视频的压缩数据进行解码处理,比方说:视频解码线程主要从视频队列拿数据并进行解码。音频解码线程主要从音频压缩队列拿数据并进行音频解码,并进行音频时钟的计算。音频时钟的计算就是音频PTS的计算,而视频pts则跟音频pts进行校准,进行音视频的同步。
2、如何解决卡顿,花屏问题:
- 花屏:花屏的本质是数据包不完整,要保证视频不出现花屏就要保证整个视频不能出现丢包情况。下面有几种方式能够防止花屏:
- 2.1、高分辨率的情况下,若出现花屏则说明FFMPEG发送的数据超过了默认值,需要扩大接收端的缓冲区,防止丢包。在FFMPEG源码之中,找到udp.c并修改UDP_MAX_PKT_SIZE默认值。一般这个默认值扩大10倍,则播放器就基本上不会出现花屏。
- 2.2、可能是YUV数据出错,在采集的时候要保证YUV准确无误
- 卡顿问题:
- 2.3、 码率问题:编码器输出码率超过实际网络带宽,此时网络可能突然变的很差,预估带宽很小,但其实解码出来的画面很复杂。而此时就会容易出现发送码率大于实际码率的情况。
- 解决方法:最好使用CBR把码率严格控制起来,从而保证输出码率更好地贴合带宽。VBR的话输出码率会随着画面复杂程度,所以容易造成网络带宽的浪费
- 2.4、机器性能不够:若机器本身性能不够,画面分辨率很高,若使用CPU处理则会导致耗时很严重。在这种情况下,则考虑用GPU进行前处理,并使用硬件进行编解码的工作加快处理速度。
3、对H264的结构有什么了解:
H264的封装一般分为VCL层和NAL层。
VCL(Video Coding Layer)视频编码层:包括了压缩引擎和块、片语法的定义,并设计目标独立于网络高效编码,它的作用是有效表示视频数据的内容。
NAL(NetWork Abstraction Layer)网络提取层:它主要负责的是将VCL产生的比特字符串适配到各种各样的网络和多源环境中,覆盖了片级别的语法;通常一个NALU单元是由[NALU HEADER] + [NALU Payload]组成。NAL本质上是对VCL进行封装包裹。
StartCode(0x000001或0x00000001)作为起始码。
NALU就是H264的实际数据部分。NALU = NALU Header + EBSP组成;
EBSP = 防竞争码 + RBSP;
RBSP = SODB + RBSP尾部
我们来看看NALU HEADER和NALU Payload的结构:
- 3.1、NALU HEADER解析:
NALU Header一般分为两种流格式,一种是Annex-B格式,另外一种是RTP包流格式。
Annex-B格式是默认输出格式。数据单元的分割是通过[StartCode] (0x000001或0x00000001)作为起始码。
F:禁止位,占1bit forbidden_zero_bit:F禁止位,占用NALU Header的第一个位,值默认0,值为1表示错误。
R:指示位,占2bit Nal_refreence_bit(2bits):NRI重要性指示位,占用NALU Header第二位、三位,用来表示NAL单元,取值越大,NAL越重要。
T:负荷数据类型,占5BIT nal_unit_type(5bits):Type类型,占用NALU Header第四到第八位,用来表示NAL单元类型,下面是具体的表格:
- 3.2、NALU Payload:
NALU的主体涉及到几个重要的名词,分别为EBSP、RBSP和SODB。其中EBSP基本上是NALU主体,这三者的关系式EBSP包含RBSP,RBSP包含SODB:
- SODB:String of Data Bits原始数据比特流,就是原始的编码/压缩得到的数据
- RBSP:Raw Byte Sequence Payload,也称之为字节序列载荷,SODB +RBSP Trailing Bits引入RBSP Trailing Bits做8位字节补齐
- EBSP:Encapsulated Byte Sequence Payload 扩展字节序列载荷
下面这张图是SODB、RBSP、EBSP的结结构图:
下面这张图是SODB、RBSP、EBSP的结结构图
作者:txp玩Linux,关于音视频的实践学习,目前我开了一个rv1126的音视频开发实践星球课程内容,有解答群和视频教程,感兴趣的可以关注。
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。