知识归纳:
多媒体框架是由第三方PacketVideo提供的OpenCore实现的,它支持播放和录音许多的音频和视频格式,以及静态图像文件,包括MPEG4、MP3、H.264、AMR、AAC、AMR、JPG、PNG。
多媒体核心OpenCore,它的另外的一个称呼是PacketVideo,是按Android的多媒体核心,基于C++实现的,定义了全功能的操作系统移植层,各种基本功能被封装成类的形式,各层次之间的接口多使用继承等方式,是andriod开发平台的一个技术方案,对应技术研究方面主要分为两层:
(1)PvPlay : 提供多媒体播放功能,完成音频,视频的回放功能。
(2)PvAuthor : 提供媒体流记录功能,完成音频,视频流的捕获功能。
它们俩是以SDK的形式提供给开发者,开发者可以通过此SDK开发出各种有特色的多媒体应用,例如,照相机、播放器、录音机、摄影机等。
OpenCore在Android中的作用主要就是对音频和视频进行解码,并且输出到手持终端设备上,音频的解码和输出比较简单,但视频的解码和输出就比较复杂,所以Android在设计视频解码和输出提供了两套方案,一套是 硬解码方案,它是通过厂家硬件支持,对视频解码输出,这种方案效率高,但有一定的局限性,另一种是通过软解码方式,他是调用系统中的SurfaceFilnger对视频解码输出,这种方式比上一种解码方式教低,目前市场上的很多播放器也提供了两种方案,两种方案中,硬解码方案局限性是对很多视频格式不支持,不能播放,但软解码方式则支持,也可流畅播放。
Android中,OpenCore提供了多媒体操作的众多接口,具体方法如下:
AudioManager : 主要是音量 、音效 、升到及铃声的管理。
AudioRecord: 管理应用程序的录音。
AudioTrack :管理和播放一个单一的java应用程序的音频资源,允许PCM音频的缓冲区用于播放音频硬件
MediaPlayer :用于控制播放音频\视频文件
MediaRecorder :用于记录音频和视频
Ringtone :提供一个快捷的方法播放铃声和通知
RingToneManager : 提供对手机铃声合理化管理方法
SoundPool : 为应用程序管理音频和资源
在以上接口中,MediaPlayer和SoundPool都可以播放声音,但使用场合不同,MediaPlayer占用资源比较多,一般用在播放较大的音频文件,而SoundPool一般用在比较短促的音频上,例如游戏中的打怪的声音,和点击的声音,音频加速,硬件加速等关键词都是由OpenCore协调完成的。
在使用MediaPlayer方法时,里面有很多细节都要注意
(1) MediaPlay在播放媒体时,必须先调用准备方法,mediaplay.prepare();
(2) 在创建MediaPlay时,提供两种方法,MediaPlay mediaPlayer = new MediaPlayer()和MediaPlayer mediaPlay = MediaPlayer.create(this,res);
查看源码可以发现,第二个调用方法中已经有setDataSource和prepare动作了,所以用.create()创建时则不需要调用start方法啦, 使用new则需要人工调用
(3) 创建MediaPlayer后,通过setDataSource(String path)设置网络资源时,路劲不能出现中文和空格,中文需要通过URLEncoder.encode方法对中文进行编码,空格也 需要转码,用%20替换。
(4) MeiaPlayer创建后,要特别注意播放多媒体的几个状态,开始播放,暂停播放,停止播放,当停止状态时,如果需要开始,则必须调用暂停,处于准备状态才行。