(一)、android ffmpeg播放器之音视频编知识框架梳理-02
音视频发展至今,早已经形成一定的规范,下面是整个视音频编解码的流程框架:
目前现阶段只阐述音视频播放阶段,如上图所示,可以大体分为三个阶段,分别是:
1、音视频解封装
在一些场合下也会成为解复用,视频文件为什么需要封装,因为组成一个视频的元素各种各样,比如视频,音频,字幕等,如下图:
所以必须按照一定封装格式,将各种各样的元素,按照一定规则,封装成一个视频文件,因此从而产生一个流的概念,视频流,音频流,字幕流等等,解封装的目的就是将这些流单独的解析出来,专门对应流做处理,视频流则解码后播放,音频流也一样。
封装格式各种各样,目前需要重点把握的有下面三种:
当然重点是MP4和FLV,也就是我们平常常见的mp4并不是视频格式,而是一种单纯的文件封装格式。
a、MP4
MP4是一套用于音频,视频信息的压缩编码标准,由国际标准化组织(ISO)和国际电工委员会(IEC)下属的”动态图像专家组”(Moving Picture Experts Group,即MPEG)制定,第一版在1998年10月通过,MPEG-4格式的主要用途在于网上流,光盘,语音发送(视频电话),以及电视广播。
mp4格式,常用有损压缩格式-评估强力推起来的全新视频标准【H.265也目前苹果强势推广的】目前网络的主流视频已经拜托了FLV的各种限制,这种更好的压缩比,更好质量的视频格式受到了各大网络平台的支持,当然各个播放器及视频编辑软件也支持的非常好
b、FLV
FLV(Flash Video),Adobe Flash 网络流媒体格式。但是被苹果以不安全为由基本上打压的不见踪影,这方面是很支持苹果的,大家是不是常常莫名其妙弹出各种网页也广告?
flv 格式 机会被淘汰了,其实最早的时候网站的视频基本上是基于flv的,但历史最是会发展变化的。可以说flv已经完成了他的使命可。
但是,在视频直播领域,例如rtmp协议很多都是参考flv格式进行传输的,所以如果想要掌握rtmp协议传输,那么flv就至关重要了。
2、音视频解码
在这里,提出一个疑惑,为什么音视频要编码?这里举视频为例进行阐述,目前屏幕显示是通过三颜色,也就是RGB组合显示,如果加上一个透明度,那么就是RGBA,一共四个通道,一个通道用一个字节表示,那么点亮屏幕上的一个点就是要4个字节,按照宽:1920 高:1080来表示一张图片。
人眼能识别视频帧率是25/s以上,也就是如果一秒钟显示低于25帧,人眼就能明显感觉到视频“卡顿”,因此假如保存十秒的视频需要多少空间: 1920 * 1080 * 4 * 25 * 10 / 1024 /1024 = 1977M ,仅仅只有10秒钟,视频存储就高达1977M,这是我们无法接受的空间,太大了,而且如果放在网上传输,那就更不可能接受,占用宽带太大。
因此就提出要对视频进行编码处理。
目前市面上主流显示颜色模型有两种方案,一种是RGB ,一种是yuv ,RGB前面介绍过,yuv又是什么呢?
-
Y维度:表示明亮度(Luminance或Luma),也就是灰度值。 -
U和V维度:表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。 RGB和YUV可以根据公式转换: 不过这里需要注意在YUV转为RGB的时候,如果使用8bit表示一个通道,那么范围在0-255,如果超出对应的范围,只能取舍到0或者255,比如负数的时候取0,超过255取255,否则因为进位问题导致值的改变,最终影响到显示。
a、视频编码格式
视频发展至今,编码格式主要集中在几中主流格式下,主流格式如下:
- RV
- VC-1
- MPEG2
- H263
- H264
- H265
- VP8
- VP9
关于上面每个视频格式并不展开描述,目前有个知识框架点即可。
b、音频编码格式
主流格式如下:
关于上面每个音视频格式并不展开描述,目前有个知识框架点即可。 好了知识基础框架描述先到此为止,接下来使用ffmpeg对上面框架做补充。 上面的知识重点主要是清楚什么是编码格式,什么是封装格式,他们的区别点在哪里。
休息一下、不迷路~~
上面使用到的资料,可以关注我下面的公众号 『音视频开发修炼之路』 ,回复资料 ,便可以根据标题进行下载,感谢你的关注,如果有什么疑惑的可以在公众号上留言。
|