?? jmf開發指南7
字號:
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 + -