第14章多媒体开发.doc

  1. 1、本文档共38页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第14章多媒体开发

第14章 多媒体开发 14.1 概述 Android系统对多媒体开发的支持是比较好的,它本身就提供了MediaPlayer、MediaRecorder等多媒体类,利用这些多媒体类可以很方便地进行开发。 下面先简单介绍一下Android系统的多媒体框架OpenCorePacketVideo): OpenCore另外一个常用的称呼是PacketVideo,它是Android的多媒体核心。事实上,PacketVideo是一家公司的名称,而OpenCore是这套多媒体框架软件层的名称。对比Android的其程序库,OpenCore的代码非常庞大,它是一个基于C++的实现,定义了全功能的操作系统移植层各种基本的功能均被封装成类的形式各层次之间的接口多使用继承等方式。 OpenCore是一个多媒体的框架从宏观上来看,它主要包含了两大方面的内容: PVPlayer:提供媒体播放器的功能,完成各种音频Audio)、视频Video)流的回放Playback)功能 PVAuthor:提供媒体流记录的功能,完成各种音频Audio)、视频Video)流及静态图像捕获功能 PVPlayer和PVAuthor以SDK的形式提供给开发者,可以在这个SDK之上构建多种应用程序和服务在移动终端中常常使用的多媒体应用程序媒体播放器、照相机、录像机、录音机等。 为了更好组织整体架构,OpenCore软件在宏观上分成几个层次: OpenCore框架图 各层次的具体说明如下: OSCL:Operating System Compatibility Library 操作系统兼容库,包含了操作系统底层的一些操作,更好地在不同操作系统移植。包含了基本数据类型、配置、字符串工具、IO、错误处理、线程等内容,类似一个基础的C++库。 PVMF:PacketVideo Multimedia FrameworkPV多媒体框架,在框架内实现一个文件解析parser)、 组成composer)和编解码的NODE,也可以继承其通用的接口,在用户层实现一些NODE。 PVPlayer Engine:PVPlayer引擎。 PVAuthor Engine:PVAuthor引擎。 事实上,OpenCore中包含的内容非常多从播放的角度,PVPlayer输入是文件或网络媒体流,输出是音频视频的输出设备包含了媒体流控制、文件解析、音频视频流的解码Decode)等基本功能。除了从文件中播放媒体文件之外,还包含了与网络相关的RTSP流Real Time Stream Protocol,实时流协议。在媒体流记录方面,PVAuthor的输入是照相机、麦克风等设备,输出是各种文件,包含了流的同步、音频视频流的编码Encode),以及文件的写入等功能。 在使用OpenCore的SDK时,有可能需要在应用程序层实现一个适配器Adaptor),然后在适配器之上实现具体的功能对于PVMF的NODE也可以基于通用的接口在上层实现,以插件的形式使用。 其实在实际的应用层软件开发中,我们并不用过多地去关心底层是如何实现的,只要对提供的接口函数熟悉就足够了。所以下面几节,我们将针对MediaPlayer、MediaRecorder、Camera这几个类做重点讲述。 14.2.1 MediaPlayer状态详解 首先我们来看一下图14-2。 图1-2 MediaPlayer的生命周期 MediaPlayer的各个状态,也列举了主要方法的调用时序,每种方法只能在一些特定的状态下使用。如果在使用过程中MediaPlayer的状态不正确则会引发IllegalStateException(非法状态异常)异常。下面具体来看看各种状态: idle 状态:当使用new()方法创建一个MediaPlayer对象或调用其reset()方法时,该MediaPlayer对象就会处于idle状态。这两种方法的一个重要差别就是:如果在这个状态下调用了getDuration()等方法(相当于调用时机不正确),通过reset()方法进入idle状态的话会触发OnErrorListener.onError(),并且MediaPlayer会进入Error状态;不过,如果是新创建的MediaPlayer对象,则并不会触发onError(),也不会进入Error状态。 End 状态:通过release()方法可以进入End状态,只要MediaPlayer对象不再被使用,就应当尽快将其通过release()方法释放掉,以释放相关的软硬件组件资源,这其中有些资源是只有一份的(相当于临界资源)。如果MediaPlayer对象进入了End状态,则不会再进入任何其他状态了。 Initialized 状态:这个状态比较简单,MediaPlayer调用setDataSour

文档评论(0)

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

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

1亿VIP精品文档

相关文档