于志楠 尹偉靜
(沈陽師范大學 科信軟件學院,遼寧 沈陽110034)
隨著人們對音頻和視頻信息需求,視頻會議系統廣泛應用于現代企業中。視頻會議系統[1]的可以適應現代社會的快捷、高效,使視頻會議系統的使用正在向各行各業滲透。本文總結和借鑒其他視頻會議軟件系統的基礎,結合JAVA跨平臺[2-3]等優點,提出一種基于JAVA簡單應用于局域網視頻會議系統的設計與實現方案。
視頻會議系統的示意圖如圖1所示。

圖1 視頻會議系統的示意圖
從圖看出,視頻會議系統主要有三個部分組成,即通信網絡、會議終端和多點控制單元。會議終端是將視頻、音頻、數據、信令等各種數字信號送上信道進行傳輸;多點控制單元是視頻會議系統用于多點視聽信息的傳輸與切換部分;通信網絡是一系列的設備、機構和進程,附著在網絡上的終端用戶設備能夠進行有意義的信息交換。涉及網絡傳輸協議、網絡編程接口等內容。
網絡視頻會議系統硬件主要:有網卡、聲卡的電腦,攝像頭,帶麥克風的耳機其組成結構。
在軟件結構上,由于整個系統是基于純軟件開發,設計上類似于TCP/IP模型,我們依然采用分層思想,降低復雜度,使程序更容易修改,軟件開發速度更快,每層利用緊鄰的下層服務,更容易記住各層功能,并有許多可選部分完成類似的任務。在體系結構上分為四個層次:IO層、處理層、傳輸層、網絡層。
安裝JMF后,利用它進行音視頻的捕獲。在JMF中,Capture Device Manager也是一個manager類,它提供給了一個列表,這個列表顯示當前系統被使用的設備。同時Capture Device Manager通過查詢的方法對設備進行定位并返回設備的配置信息對象Capture Devicelnfo,它也通過注冊的方法向列表加入一個新的設備信息,以便為JMF使用。設備可通過Capture Device Manager的get Device0方法直接獲得設備控制權,設備的控制權一旦得到,就以此設備作為一個Media Locator,通過Capture Devicelnfo的get Locator0方法得到。在JMF中,Capture Device Manager也是一個manager類,它提供給了一個列表,這個列表顯示當前系統可以被使用的設備。同時Capture Device Manager通過查詢的方法對設備進行定位并返回設備的配置信息對象Capture Devicelnfo,它也通過注冊的方法向列表加入一個新的設備信息,以便為JMF使用。設備通過Capture Device Manager的get Device0方法直接獲得設備控制權,設備控制權一旦得到,以此設備作為一個Media Locator,通過Capture Devicelnfo的get Locator0方法得到。
采集到的數據源是不適合直接傳輸的,經過處理,使其適合為RTP傳輸格式并產生新的數據源再進行傳輸,處理過程為:
用前面獲得的數據源構造處理器對象,以便得到采集到的數據;
processor=javax.media.Manager.create Processor(datasource);
然后將數據源處理為適合RTP傳輸的格式;
然后調用處理器對象的get Track Control0方法,得到通道的Track Control對象;
媒體流中每一個磁道得到一個控制器;接下來調用Track Control對象的set Format()方法設置每個軌道的編碼格式;
最后,調用處理器對象的get Data Output0方法產生數據源,以便數據傳輸時使用;RTP會話是由RTP Manager完成的,每個軌道都需要有一個管理器,管理器對象采用RTP Manager.new lnstance()方法來獲得。建立會話時,需創建Session Address對象描述發送端與接收端的地址信息,再加入RTP管理器。會話建立后,由管理器創建流將數據通過網絡發送。
接收媒體流也同樣建立RTP會話,過程與發送流時建立會話的過程類似,不同的是每個RTP管理器需要加上監聽器來監聽相應地址與端口,包括會話請求、數據流到達等。系統實現Session Listener和Receive Stream Listener兩個接口,前者用于監聽RTP會話請求,后者用于監聽是否有數據流到達。當創建一個新的數據流后,Session Manager會發出一個New Receive Stream Event。注冊了Receive Stream Listener接收數據流監聽器,會收到事件。為每一個新接收數據流創建Player。從接收數據流中獲取Data Source,并作為參數傳遞給Manager來創建Player。發送端和接收端播放多媒體信息過程是相同的,由Session Manager到Data Source到Player,直接將播放的數據源交由播放器;創建并初始化RTP Session,創建一個Session Manager(會話管理器),并調用add Receive Stream Listener方法為RTP Manager對象添加RTP時間監聽器,監聽New Receive Stream Event事件,然后調用RTP Manager對象的initialize方法初始化RTP會話,設置本地和目的地地址和端口;Receive Stream Listener update方法,監視New Receive Stream Event事件,它會指示新數據流被檢測到。當一個New Receive Stream Evem事件被檢測到時,以New Receive Stream Event事件調用get Receive Stream方法,以取得Receive Stream數據流對象,然后通過調用輸入數據流對象get Data Source獲取RTP數據源對象;把數據源對象作為參數傳遞到Manager的create Player方法中來創建Player。直接將播放數據源交由播放器,播放器界面分為播放界面和控制界面兩部分,分別用get Visual Component和get Control Panel Component方法來得到。
Player P=javax.media.Manager.create Player(ds);
P.add Controller Listener(this);P.realize();
Component VC,cc;VC=player.get Visual Component0;
CC=player.get Control Panel Component0;
通過SUN公司提供IP多播類實現多播技術分發媒體流,在具體實現時可通過.Multicast Socket類創建一個所獲得的指定端口號的多播套接字,然后調用join Group方法加入到該多播組,接收端程序加入多播組后,便可以從該多播地址和端口號處接收媒體流。
系統采用JAVAGUI編程,運用SWING組件來編寫,通過連接服務器取得連接后進行視頻連接,連接后視頻在屏幕顯示其界面如圖2。
本文總結和借鑒其他視頻會議軟件系統的基礎,結合JAVA提出一種基于JAVA的應用于局域網的視頻會議系統的設計方案。
[1]黃永峰,等.IP 網絡多媒體通信技術[M].北京:人民郵電出版社,2003.
[2][美]Chad Darby,John Griffin,Pascal de Haan,等.Java 網絡編程指南[M].邱仲潘,等,譯.北京:電子工業出版社,2002.
[3]孫衛秦.Java 程序設計[M].電子工業出版社,2006.
[4]孫奎,殷兆麟.基于JMF的多人視頻聊天軟件的設計與實現[J].計算機工程與設計,2007,28(9):2196-2198.
[5]閏改珍,師衛.基于RTP的音頻流多播系統的JMF實現[J].科技情報開發與經濟,2007,17(5):240-242.