Android音视频学习之视频编码
[TOC]
概述
• MPEG系列:(由ISO[国际标准化组织]下属的MPEG[运动图像专家组]开发)视频编码方面主要是MPEG1(VCD用的就是它)、MPEG2(DVD使用)、MPEG4(DVDRIP使用的都是它的变种,如DivX、XviD等)、MPEG4 AVC(正热门)。其还有音频编码方面,主要是MPEG Audio Layer 1/2、MPEG Audio Layer 3(大名鼎鼎的MP3)、MPEG-2 AAC 、MPEG-4 AAC等。注意,DVD音频没有采用MPEG的。
• H.26X系列:(由ITU[国际电传视讯联盟]主导,侧重网络传输,注意,只有视频编码)包括H.261、H.262、H.263、H.263+、H.263++、H.264(就是与MPEG4AVC合作的结晶)。
常见的音频编码格式有AAC、MP3、AC3,下面分别进行介绍。
多媒体播放组件(Android、iOS)
Android多媒体播放组件包含MediaPlayer、MediaCodec、OMX、StageFright、AudioTrack等,下面分别进行介绍。
• MediaPlayer:播放控制。
• MediaCodec:音视频编解码。
• OMX:多媒体部分采用的编解码标准。
• StageFright:它是一个框架,替代之前的OpenCore,主要做了一个OMX层,仅仅对OpenCore的omx-component部分做了引用。StageFright是在MediaPlayerService这一层加入的,和OpenCore是并列的。StageFright在Android中是以共享库的形式存在的(libstagefright.so),其中的module——NuPlayer/AwesomePlayer可用来播放音视频。NuPlayer/AwesomePlayer提供了许多API,可以让上层的应用程序(Java/JNI)调用。
• AudiTrack:音频播放。
iOS多媒体播放组件包含VideoToolBox、AudioToolBox、AVPlayer等,下面分别进行介绍。
VideoToolBox:它是一个底层框架,提供对硬件编码器和解码器的直接访问。它为视频压缩和解压缩提供服务,并用于CoreVideo像素缓冲区中存储的栅格之间的转换。这些服务是以会话对象的形式(压缩、解压缩和像素传输),作为核心基础(CF)类型提供的。不需要直接访问硬件编码器和解码器的应用程序都不需要直接使用VideoToolBox。
• AudioToolBox:这个框架可以将比较短的声音注册到System Sound服务上。注册到System Sound服务上的声音被称为System Sounds。它必须满足下面几个条件。▪ 播放时间不能超过30s。▪ 数据必须是PCM或者IMA4流格式的。
▪ 必须被打包成下面3种格式之一:Core Audio Format(.caf)、Waveform Audio(.wav)或者Audio Interchange File(.aiff)。• AVPlayer:AVPlayer既可以用来播放音频也可以用来播放视频,在使用AVPlayer的时候,我们需要导入AVFoundation.framework框架,再引入头文件#import<AVFoundation/AVFoundation.h>。
帧率
帧率(Frame Rate)是用于测量显示帧数的量度。所谓的测量单位为每秒显示帧数(frames per second,简称fps)或“赫兹”(Hz)。每秒显示帧数(fps)或者帧率表示图形处理器处理场时每秒能够更新的次数。高帧率可以得到更流畅、更逼真的动画。一般来说,30fps就是可以接受的,但是将性能提升至60fps则可以明显提升交互感和逼真感,但是超过75fps就不容易察觉有明显的流畅度提升了。如果帧率超过屏幕刷新率,则只会浪费图像处理能力,因为监视器不能以这么快的速度更新,这样超过刷新率的帧率就浪费掉了。
分辨率
视频分辨率是指视频成像产品所形成的图像大小或尺寸。
刷新率
刷新率是指屏幕每秒画面被刷新的次数,刷新率分为垂直刷新率和水平刷新率,一般提到的刷新率通常指垂直刷新率。垂直刷新率表示屏幕上图像每秒重绘多少次,也就是每秒屏幕刷新的次数,以Hz(赫兹)为单位。刷新率越高,图像就越稳定,图像显示就越自然清晰,对眼睛的影响也越小。刷新率越低,图像闪烁和抖动得就越厉害,眼睛疲劳得就越快。一般来说,如能达到80Hz以上的刷新率,就可以完全消除图像闪烁和抖动感,眼睛也不太容易疲劳。