4.1播放器(Players)
播放器(Player)對一個媒體資料輸入流進行處理,并實作時間上的精确播放。資料源(DataSource)将輸入流傳遞到播放器。播放器将聲音或(和)視訊傳遞到相應的目标地(destination)。
圖9為JMF播放器模型
播放器在處理和顯示媒體資料過程中不提供任何控制。通過繼承Clock和Controller類,播放器可支援标準的使用者控制功能以及部分限制操作。
圖10為JMF 播放器
4.1.1播放器狀态(Player States)
播放器對象有多種狀态,JMF中定義了6 種狀态。在正常情況下播放器對象需要經曆每個狀态,然後才能播放媒體資料。下面是對這些狀态的說明:
(1)Unrealized:在這種狀态下播放器對象已經被執行個體化,但是并不知道它需要播放的媒體的任何資訊。
(2)Realizing:當調用realize方法時,播放器對象的狀态從Unrealized轉變為Realizing。 在這種狀态下Player對象正在确定它需要占用資源。在此過程中,播放器取得的資源都是那些隻需取得一次的資源,不是那些獨占的資源。
(3)Realized:在這種狀态下播放器對象已經确定了它需要的資源并且也知道要播放的媒體的類型(type)。
(4)Prefetching:當調用prefectch方法時,播放器對象的狀态從Realized變為Prefetching 在該狀态下的播放器對象正在為播放媒體做一些準備工作。其中包括加載媒體資料而需要獲得的獨占資源等。這個過程被稱為預取Prefetch。
(5)Refetched:當播放器對象完成了預取操作後就到達了該狀态。
(6)Started:當調用start方法後播放器對象就進入了該狀态并開始播放媒體。
圖11為播放器的狀态轉換圖
當一個播放器從一個狀态轉換到另一個狀态時,它将給出TransitionEvents。通過ControllerListener接口,你的程式可以确定播放器在什麼狀态并作出相應的反應。
使用這種時間報告機制,你可以通過控制一個播放器對象的Realizing和Prefetching的開始點來管理它的緩沖時間(start latency)。同時,你也可以在調用播放器的方法前确定播放器是否在其适當的狀态。
4.1.2每個狀态下播放器對象可執行的方法
為了避免混亂情況,在一個播放器所有狀态下,不是所有的方法都能被調用的。下表定義了JMF規定的限制。如果你在一個播放器對象的目前狀态下,調用了一個非法的方法,播放器對象将抛出異常或錯誤。
<b></b>
if previously set
4.2處理器(Processors)
處理器(Processors)同樣可以用來播放媒體資料。處理器是一種特殊的播放器,它可以對輸入媒體流進行過程控制。處理器支援所有播放器擁有的播放控制功能。
除了将媒體資料傳送至播放終端外,處理器可以将媒體資料輸出至一個資料源(DataSource),此資料源可以作為其它的播放器或處理器的資料源,或是通過其它的處理器對其進行進一步操作控制,或将其傳輸到一個檔案進行存儲。
圖12為處理器模型
處理器對應的接口是Processor。在JMF API中Processor接口繼承了Player接口。
圖13 為JMF處理器
如圖12 所示,處理器對象除了支援播放器對象支援的所有功能外,還可以對輸入的媒體資料流進行處理,并通過資料源向其他的播放器對象或處理器對象輸出資料。
4.2.1處理器狀态(Processor States)
如圖13所示,除了在播放器中提到了的6種狀态以外,處理器對象還包括兩種新的狀态。這兩種狀态是在Unrealized狀态之後,在Realizing 狀态之前。
(1)Configuring:當調用configure方法後,處理器對象進入該狀态。在該狀态下處理器對象連接配接到資料源并擷取輸入資料的格式資訊。
(2)Configured:當完成資料源連接配接,獲得輸入資料格式的資訊後,處理器對象就處于Configured狀态。
圖14為處理器的狀态轉換圖
4.2.2每個狀态下控制器對象可執行的方法
Descriptors
Exception
4.3 Controller 事件
Controller(播放器或控制器)注冊的ControllerEvents被分為三類:改變通知(change notifications),關閉事件(closed events),狀态轉變事件(transtion events):
(1)改變通知事件如RateChangeEvent,DurationUpdateEvent,FormatChangeEvent表明一些Controller的屬性的改變。
(2)狀态轉變事件可以使你的程式對Controller對象的狀态轉變作出反應。
(3)當Controller關閉時,它将注冊關閉事件。
圖15 為JMF Controller事件
5.媒體處理者結構(MediaHandler Construction)
播放器(Players),處理器(Processors),資料池(DataSinks)都是媒體處理者的一種,它們都從資料源(DataSource)中讀取資料。每個媒體處理者都是為專為一個資料源建立的。
圖16為JMF的媒體處理者結構
本文轉自zhangjunhd51CTO部落格,原文連結:http://blog.51cto.com/zhangjunhd/25472,如需轉載請自行聯系原作者