ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:89.48KB ,
资源ID:8783516      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8783516.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Android的多媒体.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Android的多媒体.docx

1、Android的多媒体机构图标 项目名称 关于Android的多媒体报告文件状态: 草稿 正式发布 正在修改文件标识:Company-Project-MediaPlay-MODULE当前版本:0.1作 者:XXX完成日期:2011-5-5XXXXXX信息工程中心 嵌入式与RFID实验室版 本 历 史版本/状态作者参与者起止日期备注0.1XXX2011/5/3草稿0.1XXX2011/5/40.1XXX2011/5/5格式规范化 0.1XXX2011/5/7正文中文改为非倾斜0.1XXX2011/8/9审阅修正0.1XXX2011/8/9根据审阅结果修订 目 录 0. 文档介绍 40.1 文档目

2、的 40.2 文档范围 40.3 读者对象 40.4 参考文献 40.5 术语与缩写解释 41. 系统环境 52. Android的多媒体架构 52.1 多媒体架构所处系统的位置 52.2 多媒体架构 52.3 OpenCore介绍 52.4 OpenCore软件层次分层 62.5 OpenCore上层代码 72.6 MediaPlayer常用方法介绍 73. 文件格式处理和编解码部分简介 93.1 文件格式的处理 93.2 编解码 103.3简单的例子 103.3.1 播放一个文件 103.3.2 播放raw resource 103.3.3 录音 103.3.4 alarmclock调用M

3、edia 114. VedioView 114.1 VedioView与MedioPlay之间的关系 114.2 VedioView常用方法介绍 124.3 VedioView类的简单例子 155. 总结 210. 文档介绍0.1 文档目的本文档主要介绍Android的多媒体,使读者对Android播放器有关的使用有所了解,并通过一些小的实例,使读者加深对其理解和灵活运用。0.2 文档范围本文档主要用于介绍Android的播放器以及与之相关的一些基本内容,主要包括以下几个方面:多媒体架构、文件编解码及文件格式、VedioView类的方法和接口、Surface类,还有一些简单的实例等。0.3 读

4、者对象本文适合于对Android系统开发和对系统自带播放器有关内容有兴趣的读者,文档涉及到Android系统,因此要求读者具有一些Android的基本概念,如,一些常用类和方法的使用等。0.4 参考文献【eoe Android 特刊】第十五期:android 多媒体0.5 术语与缩写解释缩写、术语解 释AndroidJNIJava Native InterfaceOSCLOperating System Compatibility Library ( 操作系统兼容库 )PVMFPacketVideo Multimedia Framework(PV 多媒体框架 )1. 系统环境提示:软件移植人员

5、需明确说明移植软件所依赖的基础软硬件环境。宿主机Android SDK2.2补充说明无2. Android的多媒体架构2.1 多媒体架构所处系统的位置Media Framework处于系统的Libraries层,这层的Library不是用Java实现的,一般是C/C+实现的,通过Java的JNI方式调用。2.2 多媒体架构基于第三方PacketVideo公司的OpenCORE platform来实现,支持所有通用的音频,视频,静态图像,格式包括:MPEG4、H.264、MP3、AAC、AMR、JPG、PNG、GIF等。Open Core多媒体框架有一套通用的可扩展的接口,针对第三方的多媒体便解

6、码器、输入、输出设备等,可实现如下功能: 多媒体文件的播放,下载,包括3GPP,MPEG-4,ACC and MP3 containers; 流媒体文件的下载,实时播放,包括:3GPP,HTTP and RTSP/RRTP; 动态视频和静态图像的编码,解码,例如:MPEG-4,H.263,JPEG; 语音编码格:ARM-NB and ARM-WB; 音乐编码格式:MP3,AAC,AAC+; 视频和图像格式:3GPP,MPEG-4 and JPEG; 视频会议:基于H324-M standard。2.3 OpenCore介绍OpenCore是Android多媒体框架的核心,所有的Android平

7、台的音视频采集,播放的操作都是通过它来实现的。通过OpenCore程序员可以方便快捷的开发出多媒体应用程序,例如:音视频的采集,回放,视频会议,实时的流媒体播放等应用。相对于Android的其他程序库,OpenCore的代码非常庞大,它是一个基于C+实现的,定义了全功能的操作系统移植层,各种基本的功能均被封装成类的形式,各层次之间的接口多使用继承方式。OpenCore是一个多媒体的框架,从宏观上来看,主要包含两方面的内容: PVPlayer:提供媒体播放器的功能,完成各种音频、视频流的以及静态图像捕获功能。 PVAuthor:提供媒体流记录的功能,完成各种音频、视频流的以及静态图像捕获功能。P

8、VPlayer 和 PVAuthor 以 SDK 的形式提供给开发者,可以在这个 SDK 之上构建多种应用程序服务。在移动终端中常常使用的多媒体应用程序,例如媒体播放器、照相机、录像机、录音机等。2.4 OpenCore软件层次分层为了更好的组织整体的架构,OpenCore 在软件层次在宏观上分成几个层次 : 图 2-1 OpenCore软件层次(1)OSCL:包含了一些操作系统底层的操作,为了更好地在不同操作进行系统移植。包含了基本数据类型、配置、字符串工具、IO、错误处理、线程等内容,类似一个基础的 C+ 库。(2)PVMF:在框架内实现一个文件解析(parser)和组成 (compose

9、r)、编解码的 Node,也可以继承其通用的接口,在用户层实现一些 Node 。PVMF下面挂载的基本组件就是Node,就是实现一个具体功能的单元,在OpenCore中使用Node来完成某个指定的功能。PVPlayer 引擎:从播放的角度,PVPlayer的输入的(Source)是文件或者网络媒体流,输出 (Sink)是音频视频的输出设备,其基本功能包含了媒体流控制、文件解析、音频视频流的解码(Decode)等方面的内容。除了播放媒体文件之外,还包含了与网络相关的RTSP流(Real Time Stream Protocol,实时流协议 )。PVAuthor 引擎:在媒体流记录的方面,PVAu

10、thor输入的(Source)是照相机、麦克风等设备、输出的(Sink)是各种文件,包含了流的同步,音频视频流的编码 (Encode) 以及文件的写入等功能。(3)适配层和应用程序:在使用OpenCore的SDK的时候,有可能需要在应用程序层实现一个适配器 (Adaptor) ,然后在适配器之上实现具体的功能,对于PVMF 的Node 也可以基于通用的接口,在上层实现,以插件的形式使用。2.5 OpenCore上层代码在实际开发中不需要关注 OpenCore的实现,Android 提供了上层的 Media AP I给开发人员使用,MediaPlayer和MediaRecorder 。引用其原文

11、如下:“Android Media APIsThe Android platform is capable of playing both audio and video media. It is also capable of playing media contained in the resources for an application, or a standalone file in the filesystem, or even streaming media over a data connection. Playback is achieved through the and

12、roid.media.MediaPlayer class. The Android platform can also record audio. Video recording capabilities are coming in the future. This is achieved through the android.media.MediaRecorder class.”简单的使用例子如下:MediaRecorder recorder = new MediaRecorder();recorder.setAudioSource(MediaRecorder.AudioSource.MI

13、C);recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);recorder.setOutputFile(PATH_NAME);recorder.prepare();recorder.start(); / Recording is now started . recorder.stop();recorder.reset(); / You can reuse the object by going back

14、 tosetAudioSource() steprecorder.release(); / Now the object cannot be reused2.6 MediaPlayer常用方法介绍 方法: create(Context context, Uri uri)解释: 静态方法,通过 Uri 创建一个多媒体播放器。 方法: create(Context context, int resid)解释: 静态方法,通过资源 resid 创建一个多媒体播放器。 方法: create(Context context, Uri uri, SurfaceHolder holder)解释: 静态方法,

15、通过 Uri 和指定 SurfaceHolder 【抽象类】 创建一个多媒体播放器 。 方法: getCurrentPosition()解释: 返回 Int ,得到当前播放位置。 方法: getDuration()解释: 返回 Int ,得到文件的时间。 方法: getVideoHeight()解释: 返回 Int ,得到视频的高度。 方法: getVideoWidth()解释: 返回 Int ,得到视频的宽度。 方法: isLooping()解释: 返回 boolean ,是否循环播放。 方法: isPlaying()解释: 返回 boolean ,是否正在播放。 方法: pause()解释

16、: 无返回值 ,暂停。 方法: prepare()解释: 无返回值,准备同步。 方法: prepareAsync()解释: 无返回值,准备异步。 方法: release()解释: 无返回值,释放 MediaPlayer 对象。 方法: reset()解释: 无返回值,重置 MediaPlayer 对象。 方法: seekTo(int msec)解释: 无返回值,指定播放的位置(以毫秒为单位的时间 ) 。 方法: setAudioStreamType(int streamtype)解释: 无返回值,指定流媒体的类型 方法: setDataSource(String path)解释: 无返回值,设

17、置多媒体数据来源【根据 路径】 方法: setDataSource(FileDescriptor fd, long offset, long len解释: 无返回值,设置多媒体数据来源【根据 FileDescriptor 】 。 方法: setDataSource(FileDescriptor fd)解释: 无返回值,设置多媒体数据来源【根据 FileDescriptor 】 。 方法: setDataSource(Context context, Uri uri)解释: 无返回值,设置多媒体数据来源【根据 Uri 】 。 方法: setDisplay(SurfaceHolder sh)解释:

18、 无返回值,设置用 SurfaceHolder 来显示多媒体。 方法: setLooping(boolean looping)解释: 无返回值,设置是否循环播放。 事件: setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListenerlistener)解释: 监听事件,网络流媒体的缓冲监听。 事件: setOnCompletionListener(MediaPlayer.OnCompletionListener listener)解释: 监听事件,网络流媒体播放结束。 事件: setOnErrorListener(Media

19、Player.OnErrorListener listener)解释: 监听事件,设置错误信息监听。 事件: setOnVideoSizeChangedListener(MediaPlayer.OnVideoSizeChangedListenerlistener)解释: 监听事件,视频尺寸监听。 方法: setScreenOnWhilePlaying(boolean screenOn)解释: 无返回值,设置是否使用 SurfaceHolder 显示。 方法: setVolume(float leftVolume, float rightVolume)解释: 无返回值,设置音量。 方法: sta

20、rt()解释: 无返回值,开始播放。 方法: stop()解释: 无返回值,停止播放。3. 文件格式处理和编解码部分简介在多媒体方面,文件格式的处理和编解码 (Codec)是基础。多媒体应用主要包括媒体的播放(PlayBack)和媒体的记录(Recording)。在媒体的播放过程中,通常情况是对媒体文件的播放,必要步骤是文件的解析和媒体流的解码。例如对于一个MP4的文件,其中可能包括AMR和AAC的音频流,H263、MPEG4以及AVC(H264)的视频流,这些流被封装在3GP的包当中,媒体播放器要做的就是从文件中将这些流解析出来,然后对媒体流进行解码,解码后的数据才可以播放。在媒体的记录过程

21、(Recording)中,涉及到视频、音频、图像的捕获功能。对于将视频加音频录制成文件功能,其过程与播放刚好相反,首先从硬件设备得到视频和音频的媒体流,然后对其进行编码,编码好的流还需要被分层次写入到文件之中,最终得到组成好的文件。OpenCore 有关文件格式处理和编解码两部分的内容,分别在目录 fileformats 和codecs_v2当中。这两部分都属于基础性的功能,不涉及具体的逻辑,因此它们可被别的模块调用,例如:构建各种Node组件 。3.1 文件格式的处理由于同时涉及播放文件和记录文件两种功能,因此 OpenCore 中的文件格式处理有两种类型 ,一种是 parser( 解析器)

22、,另一种是 composer( 组成器 ) 。如果想进一步了解的话,请查阅相关的资料。3.2 编解码编解码部分主要针对 Audio 和 Video 。在 audio 和 video 目录中,对应了针对各种流的子目录,其中可能包含dec 和 enc 两个目录,分别对应解码和编码。如果想进一步了解的话,请查阅相关的资料。3.3简单的例子3.3.1 播放一个文件MediaPlayer mp = new MediaPlayer();mp.setDataSource( “ /sdcard/test.mp3 ” );mp.prepare();mp.start();3.3.2 播放raw resourceM

23、ediaPlayer mp = MediaPlayer. Create(context, R.raw.sound_file_1);mp.start();3.3.3 录音MediaRecorder recorder = new MediaRecorder();recorder.setAudioSource(MediaRecorder.AudioSource.MIC);recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);recorder.setAudioEncoder(MediaRecorder.AudioEncoder.A

24、MR_NB);recorder.setOutputFile( “ /sdcard/test.amr ” );recorder.prepare();recorder.start();.3.3.4 alarmclock调用Media.mMediaPlayer = new MediaPlayer();mMediaPlayer.setVolume(IN_CALL_VOLUME, IN_CALL_VOLUME);/ 检查是否是在通话中,若是,就换用较小的声音提示。if (tm.getCallState() != TelephonyManager.CALL_STATE_IDLE) Log.v( Using

25、 the in-call alarm );mMediaPlayer.setVolume(IN_CALL_VOLUME, IN_CALL_VOLUME);setDataSourceFromResource(context.getResources(),mMediaPlayer, R.raw.in_call_alarm);else mMediaPlayer.setDataSource(context, Uri.parse(mAlert); mMediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);mMediaPlayer.setLoopi

26、ng( true );mMediaPlayer.prepare();.4. VedioView在Android中,播放视频可以用VideoView,也可以用SurfaceView。VideoView可以很容易地播放视频,虽然其播放位置和播放大小并不受我们控制,但已足够满足我们平常的调用;而Surface一般是用在游戏开发中的,我们仅在下一节中做简要的介绍。现在我们将详尽的介绍VedioView。 4.1 VedioView与MedioPlay之间的关系首先我们要搞清楚VedioView和MedioPlay之间的关系?在调用android api播放视频时,分别使用VideoView和Media

27、Player播放视频,这两个类到底是什么关系呢? 那么最简单的办法就是看看VideoView的源代码,是否调用MediaPlayer。可以通过如下命令获取android sdk源代码:git clone git:/ android-apisudo apt-get install git这要求首先安装git,一种版本控制工具:VideoView的源代码在:android-api/core/java/android/widget从中可以发现,是VideoView调用MediaPlayer实现视频播放的,并提供了一些辅助功能。接下来我们将介绍一些与VedioView有关的知识。4.2 VedioVi

28、ew常用方法介绍VedioView类用于播放一个视频文件。这个VideoView类可以从不同的来源(例如资源文件或内容提供器)读取图像,从它使用的任何一个布局资源管理器中取出视频文件并维护计算它的尺寸,并提供一些显示选项,例如缩放比例或者着色。(1)VedioView类的公共构造函数如下: public VideoView(Context context) 创建一个默认属性的VideoView实例。 public VideoView(Context context, AttributeSet attrs) 创建一个带有attrs属性的VideoView实例。 public VideoView(

29、Context context, AttributeSet attrs, int defStyle) 创建一个带有attrs属性,并且指定其默认样式的VideoView实例。(2)VedioView类的公共方法如下: public boolean canPause () 判断是否能够暂停播放视频。 public boolean canSeekBackward () 判断是否能够倒退。 public boolean canSeekForward () 判断是否能够快进。 public int getBufferPercentage () 获得缓冲区的百分比。 public int getCurr

30、entPosition () 获得当前的位置。 public int getDuration () 获得所播放视频的总时间。 public boolean isPlaying () 判断是否正在播放视频。 public boolean onKeyDown (int keyCode, KeyEvent event) 默认实现KeyEvent.Callback.onKeyMultiple():如果视图已启用并且可点击,当KEYCODE_DPAD_CENTER或者KEYCODE_ENTER被释放时,执行按下(Down)视图的操作。其参数解释如下: keyCode KeyEvent中用于表示按键被按下的识别码; event 按键操作中定义的KeyEvent对象。返回值:假如你已经处理了当前事件,返回true。假如你想继续让下一个事件接收者(receiver)处理,则返回false。 public boolean onTouchEvent (MotionEvent ev) 实现这个方法来处理触摸屏幕引发的事件。 参数: event 动作事件。 返回值:如果事件

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1