多媒体开发.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《移动应用开发技术》第14章 第14章 多媒体开发 14.1 概述 Android系统对多媒体开发的支持是比较好的,它本身就提供了MediaPlayer、MediaRecorder等多媒体类,利用这些多媒体类可以很方便地进行开发。 下面先简单介绍一下Android系统的多媒体框架OpenCore(PacketVideo): OpenCore另外一个常用的称呼是PacketVideo,它是Android系统的多媒体核心。事实上,PacketVideo是一家公司的名称,而OpenCore是这套多媒体框架HYPERLINK / \t _blank \o 软件 软件层的名称。对比Android系统的其他程序库,OpenCore的代码显得非常庞大,它是一个基于C++的实现,定义了全功能的HYPERLINK /list/b/0501_1.shtml \t _blank \o 操作系统 操作系统移植层,各种基本的功能均被封装成了类的形式,各层次之间的接口多使用继承等方式。 OpenCore是一个多媒体的框架。从宏观上来看,它主要包含了两大方面的内容: PVPlayer:提供媒体播放器的功能,完成各种音频(Audio)、HYPERLINK / \t _blank \o 视频 视频(Video)流的回放(Playback)功能; PVAuthor:提供媒体流记录的功能,完成各种音频(Audio)、视频(Video)流及静态图像的捕获功能。 PVPlayer和PVAuthor以SDK的形式提供给开发者,可以在这个SDK之上构建多种应用程序和服务,比如在移动终端中常常使用的多媒体应用程序像媒体播放器、照相机、录像机、录音机等。 为了更好地组织整体架构,OpenCore软件在宏观上分成几个层次(如图14-1所示): 图14-1 OpenCore框架图 各层次的具体说明如下: OSCL:Operating System Compatibility Library (操作系统兼容库),主要包含了操作系统底层的一些操作,可以更好地在不同操作系统里面进行移植。其中包含了基本数据类型、配置、字符串工具、IO、错误处理、线程等内容,类似一个基础的C++库。 PVMF:PacketVideo Multimedia Framework(PV多媒体框架),在框架内实现一个文件的解析(parser)、 组成(composer)和编解码的NODE,也可以继承其通用的接口,在用户层实现一些NODE。 PVPlayer Engine:PVPlayer引擎。 PVAuthor Engine:PVAuthor引擎。 事实上,OpenCore中包含的内容非常多。从播放的角度来讲,PVPlayer的输入源是文件或HYPERLINK / \t _blank \o 网络 网络媒体流,输出是音频视频的输出设备,包含了媒体流控制、文件解析、音频视频流的解码(Decode)等基本功能。除了从文件中播放媒体文件之外,还包含了与网络相关的RTSP流(Real Time Stream Protocol,实时流协议)。在媒体流记录方面,PVAuthor的输入源是照相机、麦克风等设备,输出是各种文件,包含了流的同步、音频视频流的编码(Encode),以及文件的写入等功能。 在使用OpenCore的SDK时,有可能需要在应用程序层实现一个适配器(Adaptor),然后在适配器之上再实现一些具体的功能。对于PVMF的NODE也可以基于通用的接口在上层实现,并以插件的形式使用。 其实在实际的应用层软件开发中,我们并不用过多地去关心底层是如何实现的,只要对提供的接口函数熟悉就足够了。所以下面几节中,我们将针对MediaPlayer、MediaRecorder、Camera这几个类做重点讲述。 14.2 音频、视频播放 14.2.1 MediaPlayer状态详解 首先我们来看一下图14-2。 图14-2 MediaPlayer的生命周期 这张状态转换图清晰地描述了MediaPlayer的各个状态,也列举了主要方法的调用时序,每种方法只能在一些特定的状态下使用。如果在使用过程中MediaPlayer的状态不正确则会引发IllegalStateException(非法状态异常)异常。下面具体来看看各种状态: idle 状态:当使用new()方法创建一个MediaPlayer对象或调用其reset()方法时,该MediaPlayer对象就会处于idle状态。这两种方法的一个重要差别就是:如果在这个状态下调用了getDuration()等方法(相当于调用时机不正确),通过reset()方法进入idle状态的话会触发OnErrorListener.onError(),并且MediaPlayer会进入Error状态;不

文档评论(0)

xiaozu + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档