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

📄 jmf开发指南7

📁 jmf开发指南
💻
字号:
7 同步播放器bigbigant翻译自http://java.sun.com/javase/technologies/desktop/media/jmf/1.0/guide/JavaMediaFrame.fm7.html通过把多个Player关联到同一个TimeBase来可以实现多个媒体流的同步回放。要实现这个,我们使用Clock interface的getTimeBase和setTimeBase接口。例如,我们可以同步player1和plaer2:player1.setTimeBase(player2.getTimeBase());如果要通过同一个TimeBase来同步两个Player,我们必须独立管理每一Player。因为这种同步方式比较复杂,所以JMF提供了一个机制,让Player可以承当其他Controller的管理。播放器自动管理控制器的状态可以让我们通过单个控制点来和整个组交互。更多信息见“Using a Player to Manage and Synchronize other Controllers”在少数情况下,我们可能希望自己来管理多个播放器的同步以便独自控制速率或设置时间,可以这样来做:·注册为每一个被同步的Player的监听者。·确定一个播放器,用这个播放器的time-base来驱动其他播放器——把这个time-base设置给其他需要同步的播放器。并非所有的播放器都能被指定新的time-base。例如:如果一个需要同步的播放器有一个推送数据源,那么就必须用这个播放器的time-base驱动其他播放器。·设置所有播放器的速率。如果一个播放器不支持我们所设定的速率,他会返回实际使用的速率。(JMF没有用来查询播放器支持的速率的机制。)·同步播放器的状态。(例如,停止所有的播放器)·同步播放器的操作:为每一个播放器设置媒体时间。预取所有的播放器。检测同步播放器的最大开始延时。调用syncStart(传入表示最大延时的时间)开始播放器。我们必须监听所有播放器的转换时间并且要知道事件的来路。例如,当我们执行一个播放器的prefetch,需要留意是哪一个播放器抛出的 PrefetchComplete事件,这样才能在所有播放器Prefetched状态时调用syncStart。类似地,当我们要在一个特定的时间停止播放器,需要监听所有播放器的stop事件来确认是否所有的播放器都已经停止。在一些场合,我们需要确认所有播放器的状态,等待所有播放器进入同一个状态时才能继续操作。举例来说,假设我们使用一个播放器来驱动一组同步的播放器。一个用户交互要把播放器媒体时间设到 10,开始播放然后把媒体时间设置为20.我们可以这样来做:调用第一个setMediaTime调用prefetch来通知播放器准备开始收到设置媒体时间的请求时,停止播放器调用setMediaTime来设置新的时间重新开始预取操作考虑到启动延时,当所有播放器prefetched后,调用syncStart开始。在这个例子里,在同步启动前简单监听来自所有播放器的PrefetchComplete时间不够用的。我们无法区分事件是从第一次还是第二次 prefetch操作中抛出。为了避免这个问题,我们可以在所有播放器都抛出stop事件前保持阻塞。这样可以保证下次抛出的 PrefetchComplete 事件是我们真正想要的。

⌨️ 快捷键说明

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