2013.03.19——— android 音视频编解码个人见解

2013.03.19——— android 音视频编解码个人见解

参考:[url]http://www.erpgear.com/2012/0801/2456.html [/url]

1、android提供的音视频编码只有 AMR-NB(nb是窄频)和H.263
2、android虽然支持gif的解码,只能用mediaplay来播放,但是效果不好
3、android不支持flv的解码
4、AudioTrack只能播放pcm编码的数据,MediaPlayer可以播放MP3,AAC,WAV,OGG,MIDI等
   事实上,两种本质上是没啥区别的,MediaPlayer在播放音频时,在framework层还是会创建AudioTrack,
   把解码后的PCM数据传递给AudioTrack,最后由AudioFlinger进行混音,传递音频给硬件播放出来。
   利用AudioTrack播放只是跳过 Mediaplayer的解码部分而已。Mediaplayer的解码核心部分是基于OpenCORE 来实现的,
   支持通用的音视频和图像格式,codec使用的是OpenMAX接口来进行扩展。因此使用audiotrack播放mp3文件的话,要自己加入 一个音频解码器,如libmad。
   否则只能播放PCM数据,如大多数WAV格式的音频文件。
5、输出文件格式就相当于一个容器,具体采用什么编码需要指定编码格式。编码一样可能输出格式不一样,输出格式一样其编码方式可能不一样。
6、硬编码:通过调用Android系统自带的Camera录制视频,实际上是调用了底层的高清编码硬件模块,也即显卡,不使用CPU,速度快
   软编码:使用CPU进行编码,如常见C/C++代码,一般编译生成的二进制都是的,速度相对较慢。例如使用Android NDK编译H264生成so库,编写jni接口,再使用java调用so库。
7、视频数据有两种yuv和rgb,yuv是rgb大小的一般,所以一般用于数据传输,个人认为 视频文件格式经过解码后 都是以rgb来播放的,所谓的视频播放 就是一帧一帧图像
   例如,一个avi文件,经过文件格式解析,得到h264编码流,然后经过h264解码,得到yuv数据,然后转换为rgb,进行播放
8、以一个MP3播放器为例,从功能的角度就是将一个mp3格式的文件作为播放器的输入,将声音从播放设备输出。从实现的角度,MP3播放器经过了一下的阶段:MP3格式的文件解析、MP3编码流的解码、PCM输出的播放。

猜你喜欢

转载自trylovecatch.iteye.com/blog/1831880