林大華
摘要:針對當(dāng)前網(wǎng)絡(luò)電臺發(fā)展需要,該首先描述了網(wǎng)絡(luò)電臺的相關(guān)定義,其次在JAVA多媒體技術(shù)的基礎(chǔ)上,設(shè)計并實現(xiàn)了一個基于JMF的網(wǎng)絡(luò)電臺軟件,可以實現(xiàn)音頻的實時通信傳播。
關(guān)鍵詞:java媒體框架;音頻;實時傳輸協(xié)議
中圖分類號:TP393 文獻標(biāo)識碼:A 文章編號:1009-3044(2016)12-0082-02
如今的高速的網(wǎng)絡(luò)信息時代,高速便捷的社會里,網(wǎng)絡(luò)逐漸成為人類工作、學(xué)習(xí)、生活的必需物。網(wǎng)絡(luò)電臺的出現(xiàn)也成為了必然,網(wǎng)絡(luò)電臺代替?zhèn)鹘y(tǒng)的電臺是一個時代進步的必然進程。網(wǎng)絡(luò)電臺是隨著網(wǎng)絡(luò)的發(fā)展,如今的網(wǎng)絡(luò)技術(shù)給網(wǎng)絡(luò)電臺的出現(xiàn)提供了成熟的環(huán)境。網(wǎng)絡(luò)電臺的含義就是在網(wǎng)絡(luò)上搭建的電臺。網(wǎng)絡(luò)電臺就是把以前的電臺搬到了互聯(lián)網(wǎng)上,沒有發(fā)射塔,有的只是快捷便利的網(wǎng)絡(luò),在這里沒有麻煩的編錄設(shè)備,可以享受到電腦的方便;只要使用電腦,隨意一敲,就可以收聽到電臺的美妙。當(dāng)前網(wǎng)絡(luò)電臺分為聯(lián)播電臺、商業(yè)電臺、個人電臺等等。與傳統(tǒng)電臺比較,網(wǎng)絡(luò)電臺的優(yōu)勢,一是迅捷性、無限性。二是交互性和個性化。在如今互聯(lián)網(wǎng)上雖然已經(jīng)擁有很多的用戶,但是依然有著很大的潛力,可以挖掘更多的客戶,這就為網(wǎng)絡(luò)電臺的出現(xiàn)和發(fā)展做了很好的鋪墊。據(jù)調(diào)查,網(wǎng)絡(luò)電臺都是中學(xué)生與大學(xué)生用戶為主,這些年輕受眾為網(wǎng)絡(luò)電臺的經(jīng)營提供了生存空間與可能。網(wǎng)絡(luò)電臺的作用更加大了,不僅局限在娛樂,更加的在現(xiàn)場監(jiān)控及數(shù)據(jù)采集系統(tǒng)SCADA、分布式自動控制系統(tǒng)、小區(qū)智能安防系統(tǒng)、車船調(diào)度等上面都開始廣泛的運用。
本文所采用的方案是基于JAVA媒體框架,采用RTP/RTCP協(xié)議,在發(fā)送端和接收端之間進行一對一傳輸?shù)木W(wǎng)絡(luò)電臺系統(tǒng)。優(yōu)點是確保媒體流在網(wǎng)絡(luò)中低時延、高質(zhì)量地傳輸。
1 相關(guān)技術(shù)介紹
1.1 流媒體技術(shù)
流媒體技術(shù)也被叫為流式媒體技術(shù).它的原理就是把壓縮后的影像和聲音信息放上網(wǎng)站服務(wù)器,讓用戶不用全部下載完成才能觀看收聽,而是邊下載邊觀看、收聽的網(wǎng)絡(luò)傳輸技術(shù)。流媒體技術(shù)的原理是這樣的:服務(wù)器在向用戶傳輸多媒體文件時,不是一次將文件整體發(fā)送出去,而是按播放的時間順序?qū)⑵浞譃樾〉钠瑪啵愃朴趫D像中的幀,然后將這些片斷依次傳給用戶。用戶的網(wǎng)絡(luò)播放工具接收到這些片斷后,連續(xù)播放,就可以產(chǎn)生完整的聲音和圖像,只是開始時有些延遲。網(wǎng)上直播時多媒體文件的產(chǎn)生也是不斷生成新的片斷。而且流媒體的聲音、圖像不會占用你的硬盤空間,流進你的機器后會繼續(xù)流出你的機器,消失掉。為了保證聲音、圖像的播放效果,服務(wù)器與用戶計算機間的網(wǎng)絡(luò)傳輸速度有一定的要求。如果網(wǎng)絡(luò)傳輸速度較慢,播放時就會出現(xiàn)斷斷續(xù)續(xù)的現(xiàn)象。很多網(wǎng)站可以根據(jù)用戶的實際帶寬,向用戶提供不同清晰度的播放效果。一般來說,播放聲音需要4kb/s以上的傳輸速度,圖像需要每秒幾十千比特到每秒幾百千比特。
1.2 JMF
JMF是JAVA的擴展框架,允許用戶制作純音頻流和視頻流。Java媒體框架JMF(Java Media Framework)是一個把音頻、視頻和其他基于時間的媒體結(jié)合到Java程序和Applet中的應(yīng)用程序接口。它讓Java程序具有捕捉音頻和視頻信號,存儲、播放并處理多媒體數(shù)據(jù)等功能,除此之外還能傳輸多媒體數(shù)據(jù)和編譯多媒體數(shù)據(jù)格式。JMF包括了和RTP APIJMF API。前者主要是在網(wǎng)絡(luò)上傳輸和接收媒體流,后者具有捕捉、處理、存儲和播放媒體等功能。
2 系統(tǒng)設(shè)計與實現(xiàn)
2.1 系統(tǒng)設(shè)計
本軟件分為發(fā)送端與接收端兩部分,下面分別介紹發(fā)送端與接收端的功能模塊。
發(fā)送端功能模塊:
1)音頻采集和傳輸模塊;
接收端功能模塊:
1)音頻接收和播放模塊;
2)總的功能模塊圖見圖1。
2.1.1 音頻采集和傳輸模塊的功能介紹
此模塊的功能主要實現(xiàn)從麥克風(fēng)中采集音頻,然后進行音頻的編碼,之后利用RTP協(xié)議在Internet網(wǎng)絡(luò)中實時傳輸音頻數(shù)據(jù)流。此模塊當(dāng)中需要設(shè)置接收端的IP地址和端口號。當(dāng)發(fā)送端啟動后,按照設(shè)置的IP地址和端口號來構(gòu)造目的會話地址進行傳輸。
2.1.2 音頻接收和播放模塊的功能介紹
此模塊的功能主要是利用RTP協(xié)議實時接收來自發(fā)送端的媒體數(shù)據(jù)流,并為每一種新接收到的媒體數(shù)據(jù)流產(chǎn)生一個播放器,一邊接收媒體數(shù)據(jù),一邊將媒體數(shù)據(jù)播放出來。此模塊當(dāng)中需要輸入發(fā)送端的IP地址和端口號,由此可以跟發(fā)送端建立連接。
2.2 系統(tǒng)實現(xiàn)
2.2.1 音頻采集和傳輸模塊的實現(xiàn)
該模塊中主要包括2大類。一個是AudioTransmit類用于音頻數(shù)據(jù)流網(wǎng)絡(luò)實時傳輸?shù)?。另一個類是AudioCapture是人機交互的用戶界面類,該類中包含了main()方法,即它也是該模塊的啟動類。
2.2.1.1 AudioCapture類
包含以下幾個成員函數(shù):
1)jbInit(),用來設(shè)置界面和添加事件的監(jiān)聽。
2)buttonCaptureTransmit_actionPerformed(),用來響應(yīng)開始音頻采集和傳輸按鈕消息。
3)buttonStop_actionPerformed(),用來響應(yīng)停止按鈕消息。
4)this_windowClosing(),用來響應(yīng)窗口中的關(guān)閉按鈕消息。
2.2.1.2 RTPTransmit類
包含以下幾個主要成員函數(shù):
1)start(),用來啟動RTP數(shù)據(jù)流傳輸。
2)createProcessor(),用來指定的媒體定位器產(chǎn)生一個處理器。
3)createTransmitter(),為處理器的每一個媒體磁道產(chǎn)生一個RTP會話。
4)stop(),用來停止RTP數(shù)據(jù)流傳輸。
5)waitForState(),等待處理器達(dá)到相應(yīng)的狀態(tài)。
2.2.2 音頻接收和播放模塊的實現(xiàn)
使用RTP協(xié)議實現(xiàn)媒體數(shù)據(jù)流接收和播放的類為RTPReceive。
1)ReceiveStreamListener在實現(xiàn)監(jiān)聽接口好,NewReceiveStreamEvent事件被監(jiān)聽;
2)NewReceiveStreamEvent在接收到這個,為了獲取RTP數(shù)據(jù)源(DataSource)可以經(jīng)過事件獲取接收媒體數(shù)據(jù)流(Receivestream),然后接收媒體數(shù)據(jù)流。
3)給Manager.createPlayer()傳遞數(shù)據(jù)源產(chǎn)生一個播放器。
4)播放器添加了監(jiān)聽器,實現(xiàn)了播放器后,播放數(shù)據(jù)就可以顯示了。
RTP會話是在RTPManager管理器來通過管理的,RTP會話和表現(xiàn)媒體數(shù)據(jù)接收后,RTPReceive類需要實現(xiàn)SessionListener、ReceiveStreamListener和ControllerListener監(jiān)聽接口。
在本模塊中,還定義三個內(nèi)部使用的類:SessionLable類用來解析用戶輸入的用于RTP會話的目的端(發(fā)送端)的IP地址和端口號、PlayWindow類用來實現(xiàn)完成播放器窗口的功能、PlayerPanel類用來為播放器在PlayerWindow窗口中添加視頻組件和控制組件。
2.2.3 基于JMF的網(wǎng)絡(luò)電臺軟件的功能測試
打開命令提示符窗口,用cd命令進入代碼文件所在目錄,輸入javac *.java來編譯test目錄下的所有java文件(代碼文件),然后輸入java audiovideotransmit命令來啟動軟件,軟件啟動后,首先要設(shè)置接收端的IP地址、端口號這兩個參數(shù),點擊開始音頻采集和傳輸按鈕后,就會接收到音頻數(shù)據(jù)流并開始播放的界面,如圖2所示。
2 結(jié)束語
雖然系統(tǒng)具備了一些優(yōu)點和值得肯定的方面。但由于時間及水平有限,目前實現(xiàn)的網(wǎng)絡(luò)電臺軟件還是比較粗糙的,還有很多方面可以有待提高:
1)實現(xiàn)接收端的界面化,這樣操作更加簡便。
2)增加文字圖像功能,豐富電臺形式。
3)發(fā)送方播放文件,接收方將接受到的音頻錄制成文件。
4)實現(xiàn)一對多的播放模式。
參考文獻:
[1] 阮高峰, 吳培英, 阮招娣. 交流面對面: 走進視頻通訊新天地[J]. 電腦知識與技術(shù), 2004,10(13).
[2] 陳杰. 新興的網(wǎng)絡(luò)視頻[J]. 江蘇通信技術(shù), 2003, 19(4).
[3] 李鵬偉. 局域網(wǎng)內(nèi)點對點通信的Java實現(xiàn)[J]. 安陽師范學(xué)院學(xué)報, 2006, 23(2).
[4] 毛學(xué)英. 電臺廣播發(fā)射機微控制器系統(tǒng)的設(shè)計與實現(xiàn)[J]. 數(shù)字技術(shù)與應(yīng)用, 2016.1.
[5] 劉立山. 高清非編制作網(wǎng)絡(luò)系統(tǒng)設(shè)計及應(yīng)用實踐[J]. 世界廣播電視, 2010(7).
[6] 張佳. 廣播電臺音頻傳輸與監(jiān)控系統(tǒng)的設(shè)計和應(yīng)用[J]. 電聲技術(shù), 2013(2).
[7] 徐智娟. 廣播電視臺節(jié)目制作網(wǎng)絡(luò)系統(tǒng)設(shè)計與應(yīng)用[J]. 電子技術(shù)與軟件工程, 2015(14).
[8] 康緣. 共享廣播信道的多頻點小區(qū)組網(wǎng)設(shè)計[J]. 通訊世界:下半月, 2015(8).
[9] 劉金國. 廣播電視臺直播間的設(shè)計和建設(shè)[J]. 遼寧廣播電視技術(shù), 2013(1).
[10] 景長軍. 廣播電視后期制作設(shè)備管理系統(tǒng)的設(shè)計與實踐[J]. 有線電視技術(shù), 2005(24).
[11] 魏三強, 朱軍. 基于數(shù)字IP網(wǎng)絡(luò)的智能小區(qū)廣播系統(tǒng)設(shè)計[J]. 蘇州科技學(xué)院學(xué)報: 自然科學(xué)版, 2012(4).