⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jmf开发指南8

📁 jmf开发指南
💻
字号:
查看文章		 JMF开发指南-8 使用一个播放器去管理和同步其他的Controller2008-05-27 00:228 使用一个播放器去管理和同步其他Controllerbigbigant 翻译自http://java.sun.com/javase/technologies/desktop/media/jmf/1.0/guide/JavaMediaFrame.fm8.html使用syncStart来同步播放器,要求我们细心管理被同步者的状态。我们必须独立地操作每一播放器,正确监听事件并调用控制方法。即使只有很少的几个播放器,这也是一个困难重重的任务。通过播放器接口,JMF提供了一个更简单的解决方案:一个播放器被用来管理所有控制器的操作。当我们和一个管理者播放器交互时,我们的指令被自动地传给被管理的控制器。扮演管理者角色的播放器负责所有其他Controller的状态和同步管理。这个机制我们可以通过addController和removeController两个方法来实现。当我们对一个播放器调用addController 的时候,我们指定的Controller就会被添加到播放器的管理列表中。对应的,当我们调用removeController的时候,指定的 Controller就会从管理列表中删除。当我们需要同步播放器或其它Controller的时候,我们更应该使用addController机制,当对于独立的管理各个被同步的播放器的机制来说,这个机制简单、快捷而且不容易出错。当一个播放器取得一个Controller的控制权    * 这个Controller使用Player的time-base    * 这个播放器的时长有可能变长——在这种同步机制下,播放器的时长取多个参与同步控制器中最长的时长。    * 播放器的启动延时有可能变长——同上对于同步操作的方法,一个管理者播放器只能在每一个受控的Controller都抛出事件后,才能抛出完成事件。管理者播放器会正确报出受控Controller的事件。8.1 添加Controller我们使用addController方法来添加一个Controller到一个Player的管理controller的列表。要被添加,Controller必须处于Realized 状态,否则,会抛出一个NotRealizedError。两个Player不能互为管理者。举例来说,如果player1被player2控制,player2就不能被player1控制,除非先移除player2对player1的控制。一旦一个Controller被添加到一个Player,就不要再调用它的方法,而是通过管理者Player来与之交互。要让player2取得对player1的控制权,可以执行:player2.addController(player1);8.2 管理被添加的Controller的操作要控制一组受一个Player控制的Controller,我们可以直接与管理者Player交互,而不要去直接却调用被管理者的方法。例如,要让所有受控Controller准备开始,可以调用管理者Player的prefetch。类似的,当我们想要开始它们,可以调用管理者 Player的start。管理者Player会确保所有的Controller都达到Prefetched,确认所有Controller的最大启动延时,然后调用syncStart来开始他们,确定启动延时。当我们调用管理者Player的Controller方法时,这个Player回把调用正确地传给受控的PLyaer.在调用受控者的 Controller方法之前,管理者会确认Controller处于恰当的状态。下表描述了当我们调用管理者Player的控制方法时,受控 Controller会发生的事情:Function 	Stopped Player 	Started PlayersetMediaTime 	Invokes setMediaTime on all managed Controllers. 	Stops all managed Controllers, invokes setMediaTime, and restarts Controllers.setRate 	Invokes setRate on all managed Controllers. Returns the actual rate that was supported by all Controllers and set. 	Stops all managed Controllers, invokes setRate, and restarts Controllers. Returns the actual rate that was supported by all Controllers and set.start 	Ensures all managed Controllers are Prefetched and invokes syncStart on each of them, taking into account their start latencies. 	Depends on the Player implementation. Player might immediately post a StartEvent.realize 	The managing Player immediately posts a RealizeCompleteEvent. To be added, a Controller must already be realized. 	The managing Player immediately posts a RealizeCompleteEvent. To be added, a Controller must already be realized.prefetch 	Invokes prefetch on all managed Controllers. 	The managing Player immediately posts a PrefetchCompleteEvent, indicating that all managed Controllers are Prefetched.stop 	No effect. 	Invokes stop on all managed Controllers.deallocate 	Invokes deallocate on all managed Controllers. 	It is illegal to call deallocate on a Started Player.setStopTime 	Invokes setStopTime on all managed Controllers. (Player must be Realized.) 	Invokes setStopTime on all managed Controllers. (Can only be set once on a Started Player.)syncStart 	Invokes syncStart on all managed Controllers. 	It is illegal to call syncStart on a Started Player.close 	Invokes close on all managed Controllers. 	It is illegal to call close on a Started Player.8.3 移除一个Controller我们使用removeController方法来从player的管理controller的列表中移除controller。要让player2放弃对player1的控制,可以执行:player2.removeController(player1);类别:Jmf | 添加到搜藏 | 浏览(309) | 评论 (0) 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -