对于简单的接入摄像头等硬件或者推送视频流、录制文件,那么直接下载m7s官网编译好的二进制文件即可。
如果要做二次开发,那么就需要了一些基础的音视频基础,及m7s代码了,我们先了解一些音视频基础。
视频基础
视频帧
对于视频来说,我们可以把其想象为一幅一幅图片组成的,当把这些图片连续快速播放时,由于人眼的视觉暂留,只要播放的速度大于1秒24幅图片,那么我们看起来就是连续的。其中这个每秒播放多少张图片就称为帧率 ,一副图片就称为帧。假如就这么把图片放在一起,我们来算一下现在流行的15秒短视频大概有多大。
我们现在的手机摄像头都是千万像素,拍摄出来的照片基本都超过1M,这里就按1M计算,帧率按照24,则15秒的短视频有 24*1*15 = 360M
。
是不是吓一跳,实际上视频并不简单的把图片组合起来,而是按照一定的规范压缩过。要不然我们刷几个短视频,流量蹭蹭蹭的往下掉,谁也扛不住啊!
帧间压缩
我们比较一下相邻的两幅图片,会发现第二幅图片相对第一幅来说变动很小。如果只记录这个变化的地方,那么存储不就降下来了吗。
于是这些技术专家们提出了三种帧:
I 帧(Intra-coded picture)表示关键帧,你可以理解为这一帧画面的完整保留;解码时只需要本帧数据就可以完成(因为包含完整画面)
P帧 (Predictive-coded Picture)前向预测编码图像帧,P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。
B帧 (Bidirectionally predicted picture)双向预测编码图像帧,B帧是双向差别帧,也就是B帧记录的是本帧与前后帧的差别,换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,但是解码时CPU会比较累。
帧内压缩
看到这里,你可能会想到,除了对帧间压缩,我们是否还可以对帧内进行压缩呢?答案是肯定的。
我们常见的图片是利用红、绿、蓝三原色来表示每一个像素点,即RGB模式。但实际上摄像头,流媒体里用的更多的是YUV。
什么是YUV?
Y表示明亮度