最新android应用开发揭秘——实验六教程文件
实验六
姓名:马征学号:2011303502 班级:14011107
一、了解Android多媒体开发
1、Open Core
Open Core是Android多媒体框架的核心所有Android平台的音频、视频的采集以及播放等操作都是通过它来实现。它也被称为PV Packet VideoPacket Video是一家专门提供多媒体解决方案的公司。程序员可以通过Open Core 方便快速地开发出想要的多媒体应用程序例如
录音、播放、回放、视频会议、流媒体播放等等。
可以看出Open Core 支持的格式包括MPEG4、H.264、MP3、AAC、AMR、JPG、PNG、GIF等。Open Core多媒体框架有一套通用可扩展的接口针对第三方的多媒体编码器输入、输出设备等等。具体功能如下
多媒体文件的播放、下载包括3GPPMPEG-AAC和MP3 containers。流媒体文件的下载、实时播放包括3GPPHTTP和RTSP/RTP。
动态视频和静态图像的编码、解码例如MPEG-4H.263和A VC(H.264)JPEG。
语音编码格式AMR-NB和AMR-WB。
音乐编码格式MP3AACAAC+。视频和图像格式3GPPMPEG-4和JPEG。
视频会议基于H324-M标准
Open Core 是一个多媒体的框架从宏观上来看它主要包含了两大方面的内容
PVPlayer 提供多媒体播放器的功能完成各种音频Audio、视频
Video 流的回放Playback功能。PV Author提供媒体流记录的功能完成各种音频、视频流以及静态图像的捕获功能。
Open Core的代码在Android代码的External/Opencore目录中其子目录及其具体功能描述如下
Android这里面是一个上层的库它实现了一个为Android使用的音视频采集、播放的接口及DRM数字版权管理的接口实现。
Baselibs包含数据结构和线程安全等内容的底层库。
Codecs_v2音视频的解码器基于OpenMAX的头文件。
Fileformats文件格式的解析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的实现,Android提供了上层的Media API 给开发人员使用:
Android中对媒体系统相关的Java代码,主要有下表中的文件:
2、MediaPlayer
MediaPlayer类可以用来播放音频、视频和流媒体MediaPlayer包含了Audio和Video的播放功能在Android的界面上Music和Video两个应用程序都是调用MediaPlayer实现的。首先我们来看看MediaPlayer的生命周期
当一个MediaPlayer对象被新建或者调用reset()方法之后它处于空闲状态在调用release()方法后才会处于结束状态。一个新建的MediaPlayer对象在调用getCurrentPosition()、getDuration()、getVideoHeight()、getVideoWidth()、setAudioStreamType(int)、setLooping(boolean)、setV olume(float,float)、pause()、start()、stop()、seekTo(int)、prepare()、prepareAsync()方法时不会触发OnErrorListener.onError()事件。
当MediaPlayer对象不再被使用时最好通过release()方法来释放使其处于结束状态以免造成不必要的错误。当MediaPlayer 对象处于结束状态时便不能再使用。MediaPlayer对象被新建时处于空闲状态如果通过create()方法创建之后便处于准备状态
一般情况下一些常用的播放控制操作可能因为音频、视频的格式不被支持或者质量较差以及流超时也有可能由于开发者的疏忽使得MediaPlayer对象处于无效状态等而导致错误。
这里可以通过注册setOnErrorListener(android.media.MediaPlayer.OnErrorListener)方法实现OnErrorListener.onError()方法来监控这些错误。如果发生了错误MediaPlayer对象将处于错误状态可以使用reset()方法来恢复错误。
任何MediaPlayer 对象都必须先处于准备状态然后才开始播放。
要开始播放MediaPlayer对象都必须成功调用start()方法。可以通过isPlayer()方法来检测当前是否正在播放。
当MediaPlayer 对象在播放时可以进行暂停和停止等操作pause()方法暂停播放stop()
方法停止播放。处于暂停状态时可以通过start()方法来恢复播放但是处于停止状态时则必须先调用pause()方法处于准备状态然后再通过start()方法来开始播放。
可以通过setLooping(Boolean)方法来设置是否循环播放。
3、MediaRecorder
MediaRecorder类用来进行媒体采样包括音频和视频。MediaRecorder作为状态机运行。需要设置不同的参数比如源设备和格式。设置后可执行任何时间长度的录制直到用户停止
MediaRecorder在底层同样是通过Open Core来实现的,但是要开发应用时需要使用Android 为我们提供的Java借口:
二、Android多媒体的具体示例
1、播放音乐
首先我们的播放器可能不只是希望播放一种格式的音乐,而且还需要自动识别指定路径中那些事可以播放的音频文件,那些事不支持的格式:
class MusicFilter implements FilenameFilter
{
public Boolean accept(File dir,String name)
{ //这里还可以设置其他格式的音乐文件
return (name.endsWith(―.mp3));
}
}
现在我们需要需要指定音乐文件的位置本例我们设置路径为“/sdcard/”因此我们需要向SD 卡中添加一些音频文件。步骤如下启动模拟器在Eclipse上选择DDMS 窗口选择File Explorer标签。
public class Activity01 extends ListActivity
{
/* 几个操作按钮 */
private ImageButton m FrontImageButton= null;
private ImageButton m StopImageButton= null;
private ImageButton m StartImageButton= null;
private ImageButton m PauseImageButton= null;
private ImageButton m NextImageButton= null;
/* MediaPlayer对象 */
public MediaPlayer mMediaPlayer= null;
/* 播放列表 */
private List<String> mMusicList = new ArrayList<String>();
/* 当前播放歌曲的索引 */
private int currentListItme = 0;
/* 音乐的路径 */
private static final String MUSIC_PATH = new String("/sdcard/");
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(http://www.77cn.com.cnyout.main);
/* 更新显示播放列表 */
musicList();
/* 构建MediaPlayer对象 */
mMediaPlayer= new MediaPlayer();
mFrontImageButton= (ImageButton) findViewById(http://www.77cn.com.cnstImageButton);
mStopImageButton = (ImageButton) findViewById(R.id.StopImageButton);
mStartImageButton = (ImageButton)
findViewById(R.id.StartImageButton);
mPauseImageButton = (ImageButton)
findViewById(R.id.PauseImageButton);
mNextImageButton = (ImageButton) findViewById(R.id.Ne …… 此处隐藏:2858字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [教学研究]2012西拉科学校团少队工作总结
- [教学研究]建筑工程公司档案管理制度
- [教学研究]小学数学人教版六年级上册圆的周长和面
- [教学研究]ERP电子行业解决方案
- [教学研究]钢支撑租赁合同范本
- [教学研究]预应力自动张拉系统用户手册Rev1.0
- [教学研究]MOOC课程:金瓶梅人物写真(每章节课后
- [教学研究]追加被执行人申请书(适用追加夫妻关系)
- [教学研究]2014年驾考科目一考试最新题库766
- [教学研究]2013-2014学年度九年级物理第15章《电
- [教学研究]新版中日交流标准日本语初级下26课-客
- [教学研究]小导管注浆施工作业指导书
- [教学研究]一般财务人员能力及人岗匹配评估表
- [教学研究]打1.2.页 小学一年级暑假口算100以内加
- [教学研究]学习贯彻《中国共产党党和国家机关基层
- [教学研究]2012年呼和浩特市中考试卷_35412
- [教学研究]最简易的电线电缆购销合同范本
- [教学研究]如何开展安全标准化建设
- [教学研究]工作分析与人岗匹配
- [教学研究]2016-2017学年高中历史第七单元现代中
- 山东省义务教育必修地方课程小学三年级
- 台湾宜兰大学互联网交换技术课程 01_In
- 思想品德:第一课《我知我家》课件(人
- SAR合成孔径雷达图像点目标仿真报告(附
- 利辛县“十三五”规划研究报告
- 2015-2020年中国手机APP行业市场发展趋
- 广告策略、创意表现、媒体方案
- 企业如何申请专利的的几点思考
- 《中国教育简史》网上作业
- 高中历史第二单元西方人文精神的起源及
- 年终晚会必备_精彩的主持稿_精心整理_
- 信息工程专业自荐书
- 2019高考历史人教版一轮练习:第十二单
- JAVA俱乐部管理系统软件需求规格说明书
- 2016-2021年中国小型板料折弯机行业市
- (人教新课标)六上_比的基本性质课件PPT
- 辽宁省公务员考试网申论备考技巧:名言
- 神经阻滞麻醉知情同意书
- 施工企业信息填报、审核和发布的相关事
- 初一(七年级)英语完形填空100篇




