今天继续给大家分享最近星球上的星友音视频面试题目,希望对大家有用!
下面是具体面试问的问题:
直播秒开是开发音视频项目中一个很重要的功能,因为如果用户在播放网络视频流黑屏的时间过长则会严重影响用户体验。一般我们有两种方式解决:
SPS和PPS都是H264最开始的两个识别帧,若解码器没有识别出SPS和PPS则会无法正常解码出视频。但是这两个识别帧,也有很多不同。
FLV的特点是封装后的音视频文件大小相对比较小、封装规范相对比较简单,所以FLV格式非常适用于网络传输。尤其在RTMP网络流媒体传输中,FLV占据着统治地位。一般FLV格式如下图:
FLV封装格式一般由FLV Header和FLV Body组成。这里面FLV Body是由一对(Previous Tag Size字段 + Tag)组成。Previous Tag Size字段排在Tag之前,占用4个字节。Tag通常分为三种类型:
所谓的视频流粘包,就是指一段视频码流无法识别出一帧完整的视频帧。我的回答是通过FFMPEG的抽帧api av_read_frame把每一个码流中的每一帧H264/H265码流获取到,并且通过内部的标识符00 00 00 01进行分割,最终分割成sps+pps+i作为一帧完整的视频帧。这样就可以解决TCP、UDP粘包的情况。