Android音视频

解码与编码

  • 解码(解压)与解封装:将一个音视频文件解封装,这个过程分别生成视频和音频,然后将视频解码成图像原始模型RGB,亮度模型YUV。音频解码成PCM。
  • 编码(压缩)与封装:将一段图像+一段声音编码(压缩)成编码后的音视频,然后封装成flv,mp4,avi等格式的文件。

Android操作图像:

  • Java SDK: SurfaceView,TextureView
  • NDK : OpenGL ES

Android 播放 PCM 有:

  • Java SDK: AudioTrack - (AudioRecord录音pcm)
  • NDK : OpenSL ES

为什么需要压缩

  • 未经压缩的数字视频的数据量巨大
  • 存储困难
  • 传输困难

为什么可以压缩

去除冗余信息

  • 空间冗余:图像相邻像素之间有较强的相关性
  • 时间冗余:视频序列的相邻图像之间内容相似
  • 编码冗余:不同像素值出现的概率不同
  • 视觉冗余:人的视觉系统对某些细节不敏感
  • 知识冗余:规律性的结构可由先验知识和背景知识得到

数据压缩分类

  • 无损压缩(Winzip)
    ​ 压缩前解压缩后图像完全一致
    ​ 压缩比低
  • 有损压缩(H.264)
    ​ 压缩前解压缩后图像不一致
    ​ 压缩比高
    ​ 利用人的视觉系统的特性(人眼能见的动画频率和图像细节有限制)

视频编码格式

名称推出机构推出时间目前使用领域
HEVC(H.265)MPEG/ITU-T2013研发中
H.264MPEG/ITU-T2003各个领域
MPEG4MPEG2001不温不火
MPEG2MPEG1994数字电视
VP9Google2013研发中
VP8Google2008不普及
VC-1Microsoft Inc.2006微软平台
........................

音频编码格式

名称推出机构推出时间目前使用领域
AACMPEG1997各个领域(新)
AC-3Dolby Inc.1992电影
MP3MPEG1993各个领域(旧)
WMAMicrosoft Inc.1999微软平台
........................

封装格式

名称推出机构流媒体支持的视频编码支持的音频编码目前使用领域
AVIMicrosoft Inc.不支持几乎所有格式几乎所有格式BT下载影视
MP4MPEG支持MPEG-2, MPEG-4, H.264, H.263等AAC, MPEG-1 Layers I, II, III, AC-3等互联网视频网站
TSMPEG支持MPEG-1, MPEG-2, MPEG-4, H.264MPEG-1 Layers I, II, III, AAC,IPTV,数字电视
FLVAdobe Inc.支持Sorenson, VP6, H.264MP3, ADPCM, Linear PCM, AAC等互联网视频网站
MKVCoreCodec Inc.支持几乎所有格式几乎所有格式互联网视频网站
RMVBReal Networks Inc.支持RealVideo 8, 9, 10AAC, Cook Codec, RealAudio LosslessBT下载影视
......

流媒体协议

名称推出机构传输层协议客户端目前使用领域
RTSP+RTPIETFTCP+UDPVLC, WMPIPTV
RTMPAdobe Inc.TCPFlash互联网直播
RTMFPAdobe Inc.UDPFlash互联网直播
MMSMicrosoft Inc.TCP/UDPWMP互联网直播+点播
HTTP-FLVWWW+IETFTCPFlash互联网直播
HLS(http live stream)APPLETCP/UDPFlash互联网直播+点播

YUV简介

YUV定义:分为三个分量,

​ “Y”表示明亮度也就是灰度值,而“U”和“V” 表示的则是色度和饱和度,作用是描述影像色彩及饱和度,用于指定像素的颜色。
YUV格式有两大类:(平面格式)planar和(打包格式)packed。

1.planar:先存储Y,然后U,然后V

2.packed:yuv交叉存储

还有我们常说的YUV420sp与YUV420p。

YUV420sp: 一种two-plane模式,即Y和UV分为两个平面,U、V交错排列。

YUV420p: 先把U存放完后,再存放V。UV是连续的。

YUV420的数据大小为: 亮度(行×列) + V(行×列/4) + U(行×列/4)即:W*H*3/2,

普遍的编码器都以接受planar的I420数据(YUV420P)


10259072-84f4e85223299da3.png
I420.png

而android摄像头一般默认为NV21(YUV420SP)


10259072-7d31a3c856111e8c.png
nv21.png

H.264 I,P,B帧和PTS,DTS

I frame :帧内编码帧 ,I 帧通常是每个 GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随机访问的参考点,可以当成图象。I帧可以看成是一个图像经过压缩后的产物。

P frame: 前向预测编码帧,通过充分将低于图像序列中前面已编码帧的时间冗余信息来压缩传输数据量的编码图像,也叫预测帧;

B frame: 双向预测内插编码帧 ,既考虑与源图像序列前面已编码帧,也顾及源图像序列后面已编码帧之间的时间冗余信息来压缩传输数据量的编码图像,也叫双向预测帧;

I frame:自身可以通过视频解压算法解压成一张单独的完整的图片。

P frame:需要参考其前面的一个I frame 或者B frame来生成一张完整的图片。

B frame:则要参考其前一个I或者P帧及其后面的一个P帧来生成一张完整的图片。

PTS:Presentation Time Stamp。于度PTS主要用量解码后的视频帧什么时候被显示出来

DTS:Decode Time Stamp。DTS主要是标识读入内存中的帧数据在什么时候开始送入解码器中进行解码。

在没有B帧存在的情况下DTS的顺序和PTS的顺序应该是一样的。

DTS主要用于视频的解码,在解码阶段使用。PTS主要用于视频的同步和输出.在显示的时候使用。

10259072-56a635330abc8ef9.jpg
dts与pts.jpg

如上图:I frame 的解码不依赖于任何的其它的帧.而p frame的解码则依赖于其前面的I frame或者P frame.B frame的解码则依赖于其前的最近的一个I frame或者P frame 及其后的最近的一个P frame.

码率帧率

​ 视频码率就是数据传输时单位时间传送的数据位数,一般我们用的单位是kbps即千位每秒。通俗一点的理解就是取样率,单位时间内取样率越大,精度就越高,处理出来的文件就越接近原始文件。码率和质量成正比,但是文件体积也和码率成正比,即码率越高越清晰,视频文件越大。码率率超过一定数值,对图像的质量没有多大影响,因为原始图像只有那么清晰,再高码率也不会变的比原图更清晰。

​ 每秒的帧数表示图形处理器处理场时每秒钟能够更新的次数,一般使用fps(Frames per Second)表示。因此帧率越高,画面越流畅。比如Android理论上是16ms一张图像,即60fps。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值