一、前言
前几天看了薇亚写的一本书《人生是用来改变的》,和同事聊的时候同事问我这本书讲了什么,我回想了一下说主要是讲:我很辛苦,我很上进,我很牛逼,我很善良!话说成功人士放个屁都是香的,但也不可否认成功人士确实有其优秀的品质,言归正传,所以我们今天来讲一下直播,这还是2018年那个秋天的事情,有一天老板说我们有这么漂亮的牧场有这么丰满的奶牛我们要做直播,然后给了两个方案让我调研考虑一下(一听就不靠谱,老板经常脑洞大开,然而这也正是他是老板,我是员工的一个重要原因之一)。
-
大缰无人机:用大缰M600 Pro无人机进行航拍,无负载续航30分钟左右,需要有专人遥控操作,视频效果较好,但没有办法做到直播,只能录播。
-
GoPro Hero:将GoPro Hero绑在牛头,随着牛的走动拍摄牧场,电池续航1个半小时,画页效果应该是很差的。
-
我的方案:最终采用了我的方案,先不讲,见最后一篇文章。
二、视频的编解码
1、为什么要编码压缩
来计算一下不做编码压缩视频的大小,假设一个高清视频720P(1280*720),每秒30帧,每秒的数据就是:1280*720*30/8(字节)/1024(KB)/1024(MB) = 3.29MB,一部电影数据量就是 90分钟*3.29MB/秒 = 16G,这还是基于一个像素用一位来存储(只能是黑白了),如果采用RGB一个像素就要24位了,那电影咋看呢? 其实电影中很多场景比如两个人在聊天前后镜头变化是很小的,这样就可以压缩掉了。视频缩的原理就是去除掉视频中冗余的信息,音视频编解码由两大组织主导,ISO的MPEG标准和ITU的H.26X的标准。
2、ISO的MPEG标准
MPEG标准建立时间:1988年成立MPEG,1993年MPEG-1(VCD)、1995年MPEG-2(DVD)、2001年MPEG-4.
MPEG基本原理是基于IPB帧
- 空间相关性:1帧图像内一个像素与周边相素在亮度和色度上存在一定的关系.
- 时间相关性:一个图像前后帧存在一定关系.
编码压缩就是将空间相关性和时间相关性大量冗余信息去除掉。
- I帧:关键帧,可以理解为这一帧画面完整保存,解码时只需要本帧数据就可以了。
- P帧:是这一帧与之前关键帧的差别,解码时需要之前关键帧叠加本帧定义的差别。
- B帧:双向差别帧,也就是B帧记录的是本帧与前后帧的差别,解码更复杂(需要预读预解码)
I帧压缩比可达10倍,P帧压缩可达20,B帧可达50倍。关键技术用到离散余弦变化量化等(这我也不懂,太深奥,软件行业除了高并发,还有很多行业相关的应用涉及的技术也都很深,对技术要保持敬畏之心,人吹吹牛是可以的,但还是要有自知之明。)
3、ITU的H.26X标准
H264是基于MPEG基础上建立起来的新一代视频压缩编码技术,也是当前最流行的视频编码技术,帧内预测编码充分利用了空间相关性,帧间预测除了支持P帧、B帧还支持SP帧(能支持快速回放),在帧间编码时选多个不同参考帧提供更好纠错性能。
三、视频质量指标
- 分辨率:单位英寸所包含的像素点
- 帧率:也叫FPS,即图像每秒种更新次数,帧率越高画页越流畅,一般动画15,电影24,游戏要大于40才不会卡顿, 注:以前淘宝无线内核团队做的gCanvas渲染引擎最关注的就是指标就是FPS,它在Android4.0版本时做了很多优化,小游戏跑在gCanvas上比直接运行在WebView效果明显要好得多。
- 码率:编码器每秒钟编码出数据的大小,单位是kps。
好的画质是分辨率、码率与帧率的平衡,并不是越大越好。
注:相关概念有点多,看一下都超过1300字,这一篇就写到这里,写多了对身体不好!