?? jmf開發指南 6
字號:
JMF開發指南-6 時間管理2008-05-24 23:366 時間管理bigbigant翻譯自http://java.sun.com/javase/technologies/desktop/media/jmf/1.0/guide/JavaMediaFrame.fm6.html對于Java媒體播放器來說,把一個媒體流從頭播到尾是一種最普通的case,但很多時候我們需要播放媒體流的一部分,或者是同步多個媒體流。JMF的TimeBase和Clock接口為我們定義了時間管理和同步媒體回放的機制。TimeBase表示的是時間的流逝。time-base時間不能被轉換或者重置。一個Java Media Player使用TimeBase計時的機制類似于石英鐘的原理-通過石英晶體在已知的頻率上的振動來計時。系統中維護的TimeBase是以從一個基準時間(比如1970-1-1起)算起的納秒數來計時的。TimeBase由系統時鐘來驅動,可以通過Manager.getSystemTimeBase 方法來訪問。、播放器的媒體時間(Player's media time)表示的是媒體流上的一個時間點。媒體時間可以開始、停止和重置——很像一個秒表。Clock定義了媒體時間到TimeBase之間的映射關系。一個Java Media Player能夠響應若干關于媒體源的時間查詢。時間信息受到物理特征的影響,同時也受限于媒體源及其存儲的網絡設備。一個Time對象表示了了基于某些時間單位的時間的量(比如納秒)。我們在查詢或設置播放器的時間信息時使用這類對象。6.1 設置媒體時間(Media Time)設定播放器的媒體時間等價于設定媒體流的讀取位置。對于諸如文件的媒體數據源,媒體時間是有界的;最大媒體時間(the maximum media time)取決于媒體流的結束位置。我們可以調用setMediaTime方法,傳入一個Time對象來設置媒體時間。6.2 獲取當前時間getMediaTime方法用來返回播放器當前的媒體時間。如果播放器沒有在呈現數據,那么返回的時間就是媒體將會開始的時間點。媒體時間和具體的幀并不是一一對應的。每一幀是媒體呈現的一個時間段,媒體時間在這個時間段上則是連續向前的。舉例來說:想象我們有一個每5秒播放一幀的幻燈片播放器,這個播放器的幀速率就是0.2幀/秒。如果我們在0.0秒開始播放,當第一幀播完,媒體時間從0.0秒前進到5.0秒。如果我們在2.0秒開始播放,那么第一幀只會持續3秒的時間,到第5秒時就結束了。要想獲取播放器的當前時基時間(time-base time),我們可以首先獲取播放器的TimeBase對象,然后調用getRefTime來獲取這個時間:myCurrentTBTime = player1.getTimeBase().getRefTime();對于一個正在播放的Player,我們可以調用mapToTimeBase來獲取某個媒體時間對應的時基時間。6.3 設置播放器的速率播放器的速率(Player's rate)決定了媒體時間如何基于時基時間變化,它定義了一個時基時間單位上,媒體時間前進多少個單位。播放器的速率可以被認為是一個時間比例尺。例如:速率為2.0,表示媒體時間是時基時間的2倍。理論上,播放器的速率可以被設置為任意的數字,負的速率表示倒帶。然而,一些媒體格式幀與幀互相依賴,導致他們要倒帶或以非標準速率播放是不可能的(或不切實際的)。調用Player的setRate方法時,會放回實際被設置的數值(即使速率沒有被改變也會返回)。播放器只保證支持1.0倍速。6.4 獲取播放器的時長(Duration)因為我們的播放器可能會需要知道媒體流的時長,所以所有的controller都實現Duration接口。這個接口只包含一個方法:getDuration。Dration表示1.0倍速下媒體對象將會播放多長時間。媒體流的時長只能通過Player來訪問。當getDuration被調用時,如果duration無法確定,將會返回DURATION_UNKNOWN.這種情況會發生在播放器尚未達到 duration信息可用的狀態。如果媒體源沒有定義duration(例如一個實時廣播的媒體),getDuration會返回 DURATION_UNBOUNDED。類別:Jmf | 添加到搜藏 | 瀏覽(365) | 評論 (1) 上一篇:JMF開發指南-5 播放器狀態管理 下一篇:JMF開發指南-7 同步播放器
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -