(一)、android ffmpeg播放器之音视频编知识框架梳理-02

音视频发展至今,早已经形成一定的规范,下面是整个视音频编解码的流程框架:

android 音频硬解码 android音视频编解码_音视频

目前现阶段只阐述音视频播放阶段,如上图所示,可以大体分为三个阶段,分别是:

  • 解封装
  • 音视频解码
  • 音视频播放

1、音视频解封装

在一些场合下也会成为解复用,视频文件为什么需要封装,因为组成一个视频的元素各种各样,比如视频,音频,字幕等,如下图:

android 音频硬解码 android音视频编解码_封装_02

所以必须按照一定封装格式,将各种各样的元素,按照一定规则,封装成一个视频文件,因此从而产生一个流的概念,视频流,音频流,字幕流等等,解封装的目的就是将这些流单独的解析出来,专门对应流做处理,视频流则解码后播放,音频流也一样。

封装格式各种各样,目前需要重点把握的有下面三种:

  • MP4
  • FLV
  • MKV

当然重点是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可以根据公式转换:
  • android 音频硬解码 android音视频编解码_android_03

  • 不过这里需要注意在YUV转为RGB的时候,如果使用8bit表示一个通道,那么范围在0-255,如果超出对应的范围,只能取舍到0或者255,比如负数的时候取0,超过255取255,否则因为进位问题导致值的改变,最终影响到显示。

a、视频编码格式

视频发展至今,编码格式主要集中在几中主流格式下,主流格式如下:

  • RV
  • VC-1
  • MPEG2
  • H263
  • H264
  • H265
  • VP8
  • VP9

关于上面每个视频格式并不展开描述,目前有个知识框架点即可。

b、音频编码格式

主流格式如下:

  • MP3
  • RA
  • AMR
  • AAC
  • Vorbis
  • AC3
  • APE

关于上面每个音视频格式并不展开描述,目前有个知识框架点即可。
好了知识基础框架描述先到此为止,接下来使用ffmpeg对上面框架做补充。
上面的知识重点主要是清楚什么是编码格式,什么是封装格式,他们的区别点在哪里。

休息一下、不迷路~~