?? jmf開發指南9
字號:
JMF開發指南-9 擴展JMF2008-05-28 00:369.0 擴展JMFbigbigant 翻譯自http://java.sun.com/javase/technologies/desktop/media/jmf/1.0/guide/JavaMediaFrame.fm9.htmlJMF架構允許高級開發者創建并集成新的controller和數據源。例如,我們可以實現一個支持一種特殊媒體格式的Player.這一節主要介紹JMF Player的架構,并講述怎樣才能把新的Player和DataSource集成到 JMF中來。9.1 理解Player的架構正如前面(“Creating a Player” on page 14)中所講述的,一個開發者調用Manager.createPlayer從一個特定的媒體源獲取一個新的Player。當createPlayer被調用時,一個正確的Player會被創建并返回給調用者。Manager為特定媒體源來構造 Player.創建Player時,一個DataSource首先從URL或MediaLocator被構造出來。(一個DataSource是一個特定協議的數據源)。Player經常用DataSource來管理媒體內容的傳輸。Manager在創建Player時:根據指定協議獲取已連接的DataSource根據DataSource定義的數據類型獲取Player把dataSource附給Player9.1.1 定位一個數據源createDataSource方法根據一個指定的MediaLocator定位并集成一個正確的DataSource。這個過程首先創建一個 DataSource類名的列表,遍歷這個列表直到找到可用的數據源。要創建這個搜索列表,createDataSouce做了以下幾件事情:1.從PackageManager獲取了一個協議包前綴的向量。2. 在包前綴向量中遍歷<package-prefix>, 添加以下格式的類名<package-prefix>.media.protocol.<protocol>.DataSourceManager遍歷列表中的每一個class直到找到一個可以實例化并能附加MediaLocator的類。9.1.2 定位PlayercreatePlayer方法使用相同的機制來為特定的DataSource定位和實例化一個恰當的Player。Player是 MediaHandler的一類。MediaHandler可以理解為能夠從DataSource讀取數據的對象。MediaHandler以他們所支持的內容的類型分類。Manager使用內容的類型名稱來從DataSource查找MediaHandler對象。 JMF支持兩種MediaHandler—Player和MediaProxy.MediaProxy從一個DataSource獲取、處理內容然后再創建另一個DataSource。典型地,一個MediaProxy讀取文本配置文件,這個配置文件包含連接一個服務器并獲取媒體數據所需要的所有信息。當createPlayer被調用時,Manager首先創建使用內容的類名創建一個搜索列表。類名來自DataSource和 PackageManager返回的已安裝的包的列表。然后遍歷列表中的每一個類,直到找到能夠被實例化并能attach DataSource的MediaHandler。如果MediaHandler是Player,這個進程結束,Manager返回新Player.如果MediaHandler是一個 MediaProxy,Manager會從MediaProxy獲取一個新的DataSource,創建一個新的DataSource支持的內容列表,重復搜索過程。如果找不到合適的Player,會用"unknown”取代內容類型名稱。"unknown”內容類型通常以平臺依賴的方式被支持大量普通類型的普通播放器支持。構建MediaHandler類名列表時,createPlayer:1.從PackageMnager獲取內容包前綴向量。2.在包前綴向量中遍歷<package-prefix>,添加以下格式的類名<package-prefix>.media.content.<content-type>.Handler9.2 集成一個新的Player實現我們可以創建與JMF無縫集成的自定義的Player實現。集成一個Player到JMF,我們需要:實現Player.setSource來檢測DataSource,確認Player是否支持這樣類型的源。當客戶程序調用createPlayer時,setSource會被Manager在搜索適合的Player時調用。安裝包含信的Player class的包。添加包前綴到PackageManager控制的內容包前綴列表.Manager會向PackageManager請求包前綴列表用來搜索Player.例:為內容類型mpeg.sys集成一個新Player,我們會創建并安裝一個信的包叫做:<package-prefix>.media.content.mpeg.sys這個包包含新的Player類。他的前綴是我們的代碼的表示,例如 com.yourbiz.Vector packagePrefix = PackageManager.getContentPrefixList();string myPackagePrefix = new String("COM.yourbiz");// Add new package prefix to end of the package prefix list.packagePrefix.addElement(myPackagePrefix);PackageManager.setContentPrefixList();// Save the changes to the package prefix list.PackageManager.commitContentPrefixList();9.3 實現一個新的DataSource一個DataSource是一個媒體協議處理器的抽象。我們可以通過實現Positionable接口并擴展PullDataSource或 PushDataSource來添加對額外協議的支持。如果DataSource支持seek操作,則響應的SourceStream則需要實現 Seekable接口。一個DataSource管理SourceStream的集合。一個PullDataSource只支持pull data-stream,它管理的是PullSourceStream的 集合。一個PushDataSource之支持push data-stream,它管理的是PushSourceStream的集合 。當我們實現一個新的DataSource,我們也需要實現source stream的響應,PullSourceStream或PushSourceStream。See "Appendix B: Sample Data Source Implementation" on page 43 for an example illustrating how a new PullDataSource, FTPDataSource, could be implemented.9.4 集成一個新Data Source的實現集成自定義的DataSource機制與Player類似,我們需要:安裝包含DataSource類的包添加包前綴到PackageManager.Manager會在搜索數據源時向PackageManager請求協議包前綴列表。類別:Jmf | 添加到搜藏 | 瀏覽(604) | 評論 (5)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -