面试官:现在还有不会音视频的Android开发?

Android群英传

共 2097字,需浏览 5分钟

 ·

2021-03-08 16:44

1.1 什么是视频?

首先我们需要理解一个最基本的概念:视频。从感性的角度来看,视频就是一部充满趣味的影片,  
可以是电影,可以是短片,是一连贯的视觉冲击力表现丰富的画面和音频。
但从理性的角度来看,视频是一种有结构的数据, 我们可以把视频剖析成如下结构:

内容元素 ( Content )
图像 ( Image ) 
音频 ( Audio )

1.2 视频是如何播放的

视频要播放它肯定是有视频数据,把视频数据放到解码器,然后解码器把这个视频数据解码出来,  解成图片,然后播放到显示器上,这是一个基本的播放流程。一般来讲,大家现在主流的用H.264码。对于H.264编码来说,我们会有三个不同的帧,所谓帧是什么呢?就是你看到的每一个图像。我们看  到动态的视频,大家知道电影最开始用胶片拍的时候,每秒是25帧,是每秒25个图片在切换。


对于H.264来讲,我们常见的有I帧,P帧,和B帧。

I
  1.  它是一个完整信息帧,你可以理解为它就类似一个jpg图片,它里头所有的数 据,你解出来之 后,它就是一整张图片。

  2. 它压缩比是最小的,因为它要包括整个图片所有的数据在里头。

I帧可以直接解析

P

P帧就是保留变的部分,不变的部分你去上一个或者几个帧里面找就行。P帧只是负责向前引用,  也就是任何一个P帧,它只看它往前的这些帧的数据。

P帧不可以直接解析

B
B帧比较特别,它要引用前面P帧某一部分的图像数据同时B帧后面的数据也会引用,这个是B帧的特  点,它要引用前面的数据,也要引用后面的数据。那么它的优势就是压缩比比P帧还大,大概是I帧的25%,也就是我们B帧用的特别多的话,它会把视频的大小降的比较低,因为它的压缩比更大一些。

B帧不可以直接解析

I帧,B帧,P帧它是怎么组成一个视频流呢?我们管这个东西叫Group Of Picture,简称叫GoP


GOP实际上是两个I帧之间的序列帧

1.3 阿里移动端直播场景其他优化措施
1.3.1 为什么直播会等待
对于直播来讲,它是一个流,它不像点播,大家都从0秒开始,任何一个视频文件,0秒第一个帧肯  定都是关键帧。
那么对于直播来讲,我是一个随机的时间点接到这个视频流进行播放,那么我接入的这个时间点的帧有
可能拿到的第一个帧的数据是I帧,也有可能是B也有可能是P。这是一个随机的。
在这种情况下,我们大概率会出现一个黑屏的状态。因为我拿到的是个P帧,对于P帧来讲,解码器面  那个Buffer是空的,它不知道这个P帧如何进行解码,所以它只能丢弃这个帧。

意味着无法在第一帧拿到I帧,则必须等待,哪怕是拿到了数据,也必须地球

1.3.2 改写播放器逻辑让播放器拿到第一个关键帧后就给予显示。

GOP 的第一帧通常都是关键帧,由于加载的数据较少,可以达到 首帧秒开

如果直播服务器支持 GOP 缓存,意味着播放器在和服务器建立连接后可立即拿到数据,从而省却跨地域和跨运营商的回源传输时间。

服务器只需存储上一个GOP即可,主播端在推最新的视频流时,会实时更新服务器保存的上一个 GOP,以便客户端会拿到上一次完整GOP,而完整GOP第一帧就是I帧

GOP  体现了关键帧的周期,也就是两个关键帧之间的距离,即一个帧组的最大帧数。假设一个视频的恒定帧率是 24fps(即124帧图像),关键帧周期为 2s,那么一个 GOP 就是 48 张图像。一般而言,每一秒视频至少需要使用一个关键帧。

1.3.3 关键帧设置频率一般是多少?有没有根据接入动态设置?过长首屏秒会很难做到。

关键帧间隔越长,也就是 GOP 越长,理论上画面越高清。但是生成 HLS 直播时,最小切割粒度也是一个 GOP,所以针对交互直播,通常不建议 GOP 设置太长。直播一般 2 个关键帧间隔即可。比如帧率 24fps 那么 2 个关键帧的间隔就是 48fps ,这个 GOP 就是2s

为了帮助大家学习H65版直播技术,特别邀请了前华为、OPPO 、阿里资深架构师 David老师,为大家带来哔哩哔哩直播实战,手写直播实现到全方位优化》,

原价298元的《哔哩哔哩直播实战,手写直播实现到全方位优化》训练营,现在限时优惠只需要0.1元即可加入学习(限量100个名额

大家手速要快,赶紧识别下方图中二维码加入学习!


报名学习后还将附赠一套系统的开发进阶资料,帮助大家在技术的道路上更进一步。



赶紧扫码报名获取资料,开启你的学习之旅!
(如遇扫码频繁+VX:woaini123susu

浏览 21
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报