程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JMF介紹之媒體框架(二)

JMF介紹之媒體框架(二)

編輯:關於JAVA

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規定的限制。如果你在一個播放器對象的當前狀態下,調用了一個非法的方法,播放器對象將拋出異常或錯誤。

Method Unrealized Player Realized Player Prefetched Player Started Player addController NotRealizedError legal legal ClockStartedError deallocate Legal legal legal ClockStartedError getControlPanelComponent NotRealizedError legal legal legal getGainControl NotRealizedError legal legal legal getStartLatency NotRealizedError legal legal legal getTimeBase NotRealizedError legal legal legal getVisualComponent NotRealizedError legal legal legal mapToTimeBase ClockStoppedException ClockStoppedException ClockStoppedException legal removeController NotRealizedError legal legal ClockStartedError setMediaTime NotRealizedError legal legal legal setRate NotRealizedError legal legal legal setStopTime NotRealizedError legal legal StopTimeSetError

if previously set

setTimeBase NotRealizedError legal legal ClockStartedError syncStart NotPrefetchedError NotPrefetchedError legal ClockStartedError

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每個狀態下控制器對象可執行的方法

Method Unrealized Processor Configuring Processor Configured Processor Realized Processor addController NotRealizedError NotRealizedError NotRealizedError legal deallocate legal legal legal legal getControlPanelComponent NotRealizedError NotRealizedError NotRealizedError legal getControls legal legal legal legal getDataOutput NotRealizedError NotRealizedError NotRealizedError legal getGainControl NotRealizedError NotRealizedError NotRealizedError legal getOutputContentDescriptor NotConfiguredError NotConfiguredError legal legal getStartLatency NotRealizedError NotRealizedError NotRealizedError legal getSupportedContent-

Descriptors legal legal legal legal getTimeBase NotRealizedError NotRealizedError NotRealizedError legal getTrackControls NotConfiguredError NotConfiguredError legal FormatChange-

Exception getVisualComponent NotRealizedError NotRealizedError NotRealizedError legal mapToTimeBase ClockStoppedException ClockStoppedException ClockStoppedException ClockStopped-

Exception realize legal legal legal legal removeController NotRealizedError NotRealizedError NotRealizedError legal setOutputContentDescriptor NotConfiguredError NotConfiguredError legal FormatChange-

Exception setMediaTime NotRealizedError NotRealizedError NotRealizedError legal setRate NotRealizedError NotRealizedError NotRealizedError legal setStopTime NotRealizedError NotRealizedError NotRealizedError legal setTimeBase NotRealizedError NotRealizedError NotRealizedError legal syncStart NotPrefetchedError NotPrefetchedError NotPrefetchedError NotPrefetchedError

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的媒體處理者結構

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved