📄 jmf开发指南9
字号:
JMF开发指南-9 扩展JMF2008-05-28 00:369.0 扩展JMFbigbigant 翻译自http://java.sun.com/javase/technologies/desktop/media/jmf/1.0/guide/JavaMediaFrame.fm9.htmlJMF架构允许高级开发者创建并集成新的controller和数据源。例如,我们可以实现一个支持一种特殊媒体格式的Player.这一节主要介绍JMF Player的架构,并讲述怎样才能把新的Player和DataSource集成到 JMF中来。9.1 理解Player的架构正如前面(“Creating a Player” on page 14)中所讲述的,一个开发者调用Manager.createPlayer从一个特定的媒体源获取一个新的Player。当createPlayer被调用时,一个正确的Player会被创建并返回给调用者。Manager为特定媒体源来构造 Player.创建Player时,一个DataSource首先从URL或MediaLocator被构造出来。(一个DataSource是一个特定协议的数据源)。Player经常用DataSource来管理媒体内容的传输。Manager在创建Player时:根据指定协议获取已连接的DataSource根据DataSource定义的数据类型获取Player把dataSource附给Player9.1.1 定位一个数据源createDataSource方法根据一个指定的MediaLocator定位并集成一个正确的DataSource。这个过程首先创建一个 DataSource类名的列表,遍历这个列表直到找到可用的数据源。要创建这个搜索列表,createDataSouce做了以下几件事情:1.从PackageManager获取了一个协议包前缀的向量。2. 在包前缀向量中遍历<package-prefix>, 添加以下格式的类名<package-prefix>.media.protocol.<protocol>.DataSourceManager遍历列表中的每一个class直到找到一个可以实例化并能附加MediaLocator的类。9.1.2 定位PlayercreatePlayer方法使用相同的机制来为特定的DataSource定位和实例化一个恰当的Player。Player是 MediaHandler的一类。MediaHandler可以理解为能够从DataSource读取数据的对象。MediaHandler以他们所支持的内容的类型分类。Manager使用内容的类型名称来从DataSource查找MediaHandler对象。 JMF支持两种MediaHandler—Player和MediaProxy.MediaProxy从一个DataSource获取、处理内容然后再创建另一个DataSource。典型地,一个MediaProxy读取文本配置文件,这个配置文件包含连接一个服务器并获取媒体数据所需要的所有信息。当createPlayer被调用时,Manager首先创建使用内容的类名创建一个搜索列表。类名来自DataSource和 PackageManager返回的已安装的包的列表。然后遍历列表中的每一个类,直到找到能够被实例化并能attach DataSource的MediaHandler。如果MediaHandler是Player,这个进程结束,Manager返回新Player.如果MediaHandler是一个 MediaProxy,Manager会从MediaProxy获取一个新的DataSource,创建一个新的DataSource支持的内容列表,重复搜索过程。如果找不到合适的Player,会用"unknown”取代内容类型名称。"unknown”内容类型通常以平台依赖的方式被支持大量普通类型的普通播放器支持。构建MediaHandler类名列表时,createPlayer:1.从PackageMnager获取内容包前缀向量。2.在包前缀向量中遍历<package-prefix>,添加以下格式的类名<package-prefix>.media.content.<content-type>.Handler9.2 集成一个新的Player实现我们可以创建与JMF无缝集成的自定义的Player实现。集成一个Player到JMF,我们需要:实现Player.setSource来检测DataSource,确认Player是否支持这样类型的源。当客户程序调用createPlayer时,setSource会被Manager在搜索适合的Player时调用。安装包含信的Player class的包。添加包前缀到PackageManager控制的内容包前缀列表.Manager会向PackageManager请求包前缀列表用来搜索Player.例:为内容类型mpeg.sys集成一个新Player,我们会创建并安装一个信的包叫做:<package-prefix>.media.content.mpeg.sys这个包包含新的Player类。他的前缀是我们的代码的表示,例如 com.yourbiz.Vector packagePrefix = PackageManager.getContentPrefixList();string myPackagePrefix = new String("COM.yourbiz");// Add new package prefix to end of the package prefix list.packagePrefix.addElement(myPackagePrefix);PackageManager.setContentPrefixList();// Save the changes to the package prefix list.PackageManager.commitContentPrefixList();9.3 实现一个新的DataSource一个DataSource是一个媒体协议处理器的抽象。我们可以通过实现Positionable接口并扩展PullDataSource或 PushDataSource来添加对额外协议的支持。如果DataSource支持seek操作,则响应的SourceStream则需要实现 Seekable接口。一个DataSource管理SourceStream的集合。一个PullDataSource只支持pull data-stream,它管理的是PullSourceStream的 集合。一个PushDataSource之支持push data-stream,它管理的是PushSourceStream的集合 。当我们实现一个新的DataSource,我们也需要实现source stream的响应,PullSourceStream或PushSourceStream。See "Appendix B: Sample Data Source Implementation" on page 43 for an example illustrating how a new PullDataSource, FTPDataSource, could be implemented.9.4 集成一个新Data Source的实现集成自定义的DataSource机制与Player类似,我们需要:安装包含DataSource类的包添加包前缀到PackageManager.Manager会在搜索数据源时向PackageManager请求协议包前缀列表。类别:Jmf | 添加到搜藏 | 浏览(604) | 评论 (5)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -