Android应用开发揭秘——实验六.doc
《Android应用开发揭秘——实验六.doc》由会员分享,可在线阅读,更多相关《Android应用开发揭秘——实验六.doc(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、如有侵权,请联系网站删除,仅供学习与交流Android应用开发揭秘实验六【精品文档】第 17 页实验六姓名:马征 学号:2011303502 班级:14011107一、 了解Android多媒体开发1、 Open CoreOpen Core是Android多媒体框架的核心所有Android平台的音频、视频的采集以及播放等操作都是通过它来实现。它也被称为PV Packet VideoPacket Video是一家专门提供多媒体解决方案的公司。程序员可以通过Open Core方便快速地开发出想要的多媒体应用程序例如录音、播放、回放、视频会议、流媒体播放等等。可以看出Open Core支持的格式包括
2、MPEG4、H.264、MP3、AAC、AMR、JPG、PNG、GIF等。Open Core多媒体框架有一套通用可扩展的接口针对第三方的多媒体编码器输入、输出设备等等。具体功能如下多媒体文件的播放、下载包括3GPPMPEG-AAC和MP3 containers。 流媒体文件的下载、实时播放包括3GPPHTTP和RTSP/RTP。动态视频和静态图像的编码、解码例如MPEG-4H.263和AVC(H.264)JPEG。 语音编码格式AMR-NB和AMR-WB。 音乐编码格式MP3AACAAC+。 视频和图像格式3GPPMPEG-4和JPEG。 视频会议基于H324-M标准Open Core是一个多
3、媒体的框架从宏观上来看它主要包含了两大方面的内容 PVPlayer提供多媒体播放器的功能完成各种音频Audio、视频Video流的回放Playback功能。 PVAuthor提供媒体流记录的功能完成各种音频、视频流以及静态图像的捕获功能。Open Core的代码在Android代码的External/Opencore目录中其子目录及其具体功能描述如下Android这里面是一个上层的库它实现了一个为Android使用的音视频采集、播放的接口及DRM数字版权管理的接口实现。Baselibs包含数据结构和线程安全等内容的底层库。Codecs_v2音视频的解码器基于OpenMAX的头文件。 Filef
4、ormats文件格式的解析Parser工具。Nodes提供一些PVMF的NODE主要是编解码和文件解析方面的。 Oscl操作系统兼容库。Pvmi输入输出控制的抽象接口。 Protocols主要是与网络相关的RTSP、RTP、HTTP等协议的相关内容。 Pvcommon :pvcommon库文件的Android.mk文件没有源文件。Pvplayerpv :player库文件的Android.mk文件没有源文件。Pvanthor :pvauthor库文件的Android.mk文件没有源文件。 Tools_v2编译工具以及一些可注册的模块。在实际的开发中,我们不会过多研究Open core的实现,A
5、ndroid提供了上层的Media API给开发人员使用:Android中对媒体系统相关的Java代码,主要有下表中的文件:2、 MediaPlayerMediaPlayer类可以用来播放音频、视频和流媒体MediaPlayer包含了Audio和Video的播放功能在Android的界面上Music和Video两个应用程序都是调用MediaPlayer实现的。首先我们来看看MediaPlayer的生命周期当一个MediaPlayer对象被新建或者调用reset()方法之后它处于空闲状态在调用release()方法后才会处于结束状态。 一个新建的MediaPlayer对象在调用getCurren
6、tPosition()、getDuration()、getVideoHeight()、getVideoWidth()、setAudioStreamType(int)、setLooping(boolean)、setVolume(float,float)、pause()、start()、stop()、seekTo(int)、prepare()、prepareAsync()方法时不会触发OnErrorListener.onError()事件。当MediaPlayer对象不再被使用时最好通过release()方法来释放使其处于结束状态以免造成不必要的错误。当MediaPlayer对象处于结束状态时便不
7、能再使用。 MediaPlayer对象被新建时处于空闲状态如果通过create()方法创建之后便处于准备状态 一般情况下一些常用的播放控制操作可能因为音频、视频的格式不被支持或者质量较差以及流超时也有可能由于开发者的疏忽使得MediaPlayer对 象 处 于 无 效 状 态 等 而 导 致 错 误 。这 里 可 以 通 过 注 册setOnErrorListener(android.media.MediaPlayer.OnErrorListener)方法实现OnErrorListener.onError()方法来监控这些错误。如果发生了错误MediaPlayer对象将处于错误状态可以使用re
8、set()方法来恢复错误。 任何MediaPlayer对象都必须先处于准备状态然后才开始播放。要开始播放MediaPlayer对象都必须成功调用start()方法。可以通过isPlayer()方法来检测当前是否正在播放。当MediaPlayer对象在播放时可以进行暂停和停止等操作pause()方法暂停播放stop()方法停止播放。处于暂停状态时可以通过start()方法来恢复播放但是处于停止状态时则必须先调用pause()方法处于准备状态然后再通过start()方法来开始播放。可以通过setLooping(Boolean)方法来设置是否循环播放。3、 MediaRecorderMediaRec
9、order类用来进行媒体采样包括音频和视频。MediaRecorder作为状态机运行。需要设置不同的参数比如源设备和格式。设置后可执行任何时间长度的录制直到用户停止MediaRecorder在底层同样是通过Open Core来实现的,但是要开发应用时需要使用Android为我们提供的Java借口:二、 Android多媒体的具体示例1、 播放音乐首先我们的播放器可能不只是希望播放一种格式的音乐,而且还需要自动识别指定路径中那些事可以播放的音频文件,那些事不支持的格式:class MusicFilter implements FilenameFilterpublic Boolean accept
10、(File dir,String name) /这里还可以设置其他格式的音乐文件 return (name.endsWith(.mp3); 现在我们需要需要指定音乐文件的位置本例我们设置路径为“/sdcard/”因此我们需要向SD卡中添加一些音频文件。步骤如下启动模拟器在Eclipse上选择DDMS窗口选择File Explorer标签。public class Activity01 extends ListActivity /* 几个操作按钮 */private ImageButtonmFrontImageButton= null;private ImageButtonmStopImageB
11、utton= null;private ImageButtonmStartImageButton= null;private ImageButtonmPauseImageButton= null;private ImageButtonmNextImageButton= null;/* MediaPlayer对象 */public MediaPlayermMediaPlayer= null;/* 播放列表 */private List mMusicList = new ArrayList();/* 当前播放歌曲的索引 */private int currentListItme = 0;/* 音乐
12、的路径 */private static final String MUSIC_PATH = new String(/sdcard/);/* Called when the activity is first created. */Overridepublic void onCreate(Bundle savedInstanceState)super.onCreate(savedInstanceState);setContentView(R.layout.main);/* 更新显示播放列表 */musicList();/* 构建MediaPlayer对象 */mMediaPlayer= new
13、 MediaPlayer();mFrontImageButton = (ImageButton) findViewById(R.id.LastImageButton); mStopImageButton = (ImageButton) findViewById(R.id.StopImageButton);mStartImageButton = (ImageButton) findViewById(R.id.StartImageButton); mPauseImageButton = (ImageButton) findViewById(R.id.PauseImageButton);mNextI
14、mageButton = (ImageButton) findViewById(R.id.NextImageButton); /停止按钮mStopImageButton.setOnClickListener(new ImageButton.OnClickListener() Overridepublic void onClick(View v)/* 是否正在播放 */if (mMediaPlayer.isPlaying()/重置MediaPlayer到初始状态mMediaPlayer.reset();/开始按钮mStartImageButton.setOnClickListener(new I
15、mageButton.OnClickListener() Overridepublic void onClick(View v)playMusic(MUSIC_PATH + mMusicList.get(currentListItme);/暂停mPauseImageButton.setOnClickListener(new ImageButton.OnClickListener() public void onClick(View view)if (mMediaPlayer.isPlaying()/* 暂停 */mMediaPlayer.pause();else /* 开始播放 */mMedi
16、aPlayer.start();/下一首mNextImageButton.setOnClickListener(new ImageButton.OnClickListener() Overridepublic void onClick(View arg0)nextMusic();/上一首mFrontImageButton.setOnClickListener(new ImageButton.OnClickListener() Overridepublic void onClick(View arg0)FrontMusic();public boolean onKeyDown(int keyCo
17、de, KeyEvent event)if ( keyCode = KeyEvent.KEYCODE_BACK)mMediaPlayer.stop();mMediaPlayer.release();this.finish();return true;return super.onKeyDown(keyCode, event);Override/* 当我们点击列表时,播放被点击的音乐 */protected void onListItemClick(ListView l, View v, int position, long id)currentListItme = position;playM
18、usic(MUSIC_PATH + mMusicList.get(position);/* 播放列表 */public void musicList()/取得指定位置的文件设置显示到播放列表File home = new File(MUSIC_PATH);if (home.listFiles(new MusicFilter().length 0)for (File file : home.listFiles(new MusicFilter()mMusicList.add(file.getName();ArrayAdapter musicList = new ArrayAdapter(Activ
19、ity01.this,R.layout.musicitme, mMusicList);setListAdapter(musicList);private void playMusic(String path)try/* 重置MediaPlayer */mMediaPlayer.reset();/* 设置要播放的文件的路径 */mMediaPlayer.setDataSource(path);/* 准备播放 */mMediaPlayer.prepare();/* 开始播放 */mMediaPlayer.start();mMediaPlayer.setOnCompletionListener(ne
20、w OnCompletionListener() public void onCompletion(MediaPlayer arg0)/播放完成一首之后进行下一首nextMusic();catch (IOException e)/* 下一首 */private void nextMusic()if (+currentListItme = mMusicList.size()currentListItme = 0;elseplayMusic(MUSIC_PATH + mMusicList.get(currentListItme);/* 上一首 */private void FrontMusic()
21、if (-currentListItme = 0)currentListItme = mMusicList.size();elseplayMusic(MUSIC_PATH + mMusicList.get(currentListItme);/* 过滤文件类型 */class MusicFilter implements FilenameFilterpublic boolean accept(File dir, String name)/这里还可以设置其他格式的音乐文件return (name.endsWith(.mp3);扩展学习现在我们已经知道如何来播放指定SD卡上的音乐了, 我们在应用时(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 应用 开发 揭秘 实验
限制150内