?? jmf.txt
字號:
基本步驟是首先獲取視頻、音頻捕獲設備的信息,然后再根據取得的設備信息確定設備的位置。找到設備的位置以后,調用Manager的CreatePlayer方法創建Player,當Player開始播放的時候,就開始了捕獲的過程。
有多種方法獲得捕獲設備信息,可以通過查詢指定的格式,也可以查詢特定的設備名字。具體步驟如下:
1. 先把所有的捕獲設備調出來
2. 所有的視頻捕獲設備的名字都是以vfw開頭的,所以取得捕獲設備列表中以vfw 開頭的設備名字就是視頻捕獲設備
3. 獲取設備的medialocator地址
4. 創建Player,當Play開始的時候,就開始了視頻捕獲的過程
2.5保存攝像頭數據為視頻文件
首先是找到捕獲設備,然后取的捕獲設備的位置信息。如果要保存所采集的數據,就要創建一個處理器。然后將處理器的輸出作為數據池的輸入。當啟動數據池的時候,就可以把捕獲的數據保存成文件了。具體步驟如下:
1. 獲取視頻捕獲設備的medialocator地址
2. 以獲取的medialocator為參數,創建Processor
3. 設置Processor,輸出類型為AVI格式
4. 以Processor的輸出為參數,創建數據源
5. 建立一個保存文件位置的MediaLocator
6. 以輸入數據源和輸出數據源為參數,建立一個DATASINK
7. 調用Processor的StreamWriterControl,設置Processor控制生成文件的大小
8. 設置完畢,可以啟動Processor和DataSink來保存捕獲數據了
2.6 捕獲音頻、視頻數據為QuickTime格式的文件
使用處理器模型來捕獲實時的視頻、音頻數據并且將數據軌道進行編碼、混合,最后保存為QuickTime 格式的文件。
首先構建一個處理器模型,設定好特定的數據軌道和輸出內容格式。然后使用這個處理器模型來創建一個處理器。處理器會自動連接到符合文件格式要求的捕獲設備。具體步驟如下:
1. 設定要輸出的音頻格式和視頻格式
2. 設定要輸出的文件類型為QuickTime格式
3. 以數據軌道輸出格式和文件輸出類型為參數,創建ProcessorModel
4. 由ProcessorModel對象創建Processor對象
5. 以Processor的輸出為參數創建數據源
6. 建立一個記錄保存文件的MediaLocator
7. 創建DataSink
8. 開始保存數據文件,啟動處理器
9. 當結束捕獲視頻時,停止處理器,并關掉它
10. 當數據池接到EndOfStream事件時,停止保存文件。
2.7 發送實時媒體數據
如果需要將媒體數據發送到網絡,首先需要用Processor生成RTP編碼的數據源,然后創建SessionManager或者DataSink來控制傳輸過程。具體步驟如下:
1. 獲取視頻采集設備
2. 創建Processor,連接到視頻采集設備
3. 等待,直到processor的狀態變成configured,設置輸出格式為RAW_RTP
4. 列出所有的和數據軌道相關的控制器
5. 遍歷這些控制器,找到可以控制輸出格式的控制器
6. 找到了數據軌道的格式控制器之后,設置輸出格式,輸出格式輸出為VideoFormat.JPEG_RTP
7. 準備工作已經做好,可以調用Processor的realize方法
8. 當Processor進出realized狀態以后,可以取得Processor的輸出作為數據源
9. 可以把這個數據源作為參數傳遞給manager,通過manager創建一個RTP的數據池。
10. 先設置一個發送數據流的多播目的網址
11. 確定了數據源和發送地址,可以建立數據池DataSink了,建立成功后調用open()和start()方法,就可以在網上以多播方式發送捕獲的內容了
2.8 接收實時視頻數據
接收網上傳輸的數據流時,首先要構建一個MediaLocator來描述RTP 進程,Manager為進程中的第一個數據流創建播放器,當從進程中檢測到數據時,Player會發出RealizeComplete事件。
通過監聽RealizeComplete事件,你可以確定是否有數據到了,還可以確定Player是否準備好播放數據了。當Player發出這個事件時,就可以獲取播放器的可視面板和控制面板了。具體實現步驟如下:
1. 確定RTP 數據源的地址,例如:String url= "rtp://224.144.251.104:49150/audio/1"
2. 以RTP數據源地址為參數,創建MediaLocator
3. 以MediaLocator為參數,創建Player
4. 為PLAYER添加監聽器,以便監聽RealizeComplete事件
三. 實驗效果總結
JMF2.0 支持媒體捕獲,并且考慮到了程序開發者需求。允許程序開發者在媒體處理、媒體控制上添加自己的控制器。JMF 提供的插件的架構使得直接訪問媒體數據成為可能。這樣JMF可以更方便的被擴展。JMF的設計目的是使開發簡便、支持媒體捕獲、支持使用JAVA技術開發媒體傳輸以及視頻會議等應用、支持高級開發者開發插件擴展JMF應用,新的特性還可以和原有的系統很好的融合。允許開發者開發定制的,可下載的編碼器、處理器、分離器和組合器。
JMF的類庫還可以提供對RTP(實時傳輸協議)的支持。RTP支持在網上實時的發送、接收媒體流。RTP可以用在開發視頻點播、音頻點播或者網上的交互內容服務等應用。
四. 進一步的研究工作
本文研究了JAVA視頻應用基本內容,為進一步擴展JMF的應用開發打下了基礎。在這一段的研究中積累的很多經驗。由于時間的關系,只是初步了解了如何通過插件技術擴展JMF的應用能力。今后需要做的主要研究工作和研究方向主要有
1、編寫解碼器插件,擴展JMF的應用能力。使得JMF可以支持更多的媒體類型;
2、編寫處理器插件,增強JMF的視頻處理能力,使得JMF的視頻編輯能力更強。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -