top
Loading...
用Java實現網絡語音信號傳送
天極IT資訊短信服務 電腦小技巧
資費:包月5元
手機:
介紹:細處著手,巧處用功。高手和菜鳥之間的差別就是:高手什么都知道,菜鳥知道一些。電腦小技巧收集最新奇招高招,讓你輕松踏上高手之路。


一、引言

Java是一門適合于分布式計算環境、尤其是Internet程序設計的語言。這不僅僅在于java具有很好的安全性和可移植性,還在于java為Internet編程提供了豐富的網絡類庫的支持。利用這些網絡類庫,可以輕松編寫多種類型的網絡通信程序。然而由于某些限制,Java在傳輸多媒體信息方面的應用不是很廣,大部分的應用都集中在網絡上傳輸語音等音頻信號的方面。傳輸音頻信號應用方案一般有兩種,一是應用于數據廣播的多對一傳輸,例如音頻數據服務器向數個客戶端發送音頻數據信號,其最廣泛的應用則是某些網上的IP電話,大家經常可以看到不少這種提供在線IP電話服務的網站的客戶端都是使用的嵌在網頁上的Java Applet程序,用來實現撥號、通話等等基本的網絡電話功能; 第二種方案則是我們今天要涉及的部分,一對一的音頻信號數據的傳輸。這種方案的應用范圍更廣。大家都去過語音聊天室,大部分的語音聊天室的語音聊天功能的實現就是使用的Java技術,大家對這樣網頁的源代碼分析一下就可以發現這一點。

我曾開發一個項目,涉及使用java來實現在網絡上傳輸語音數據。開發中遇到不少問題,而且在互聯網上發現關于java語音傳輸的資料比較少,尋找了許多天,最終從一個開放源代碼的一個簡單的Answer Machine 演示程序中獲得了解決問題的方法。今天我就把我在點對點傳輸音頻信號方面的一些經驗拿出來,與大家共同探討這方面的問題。

二、存在的問題

在網絡上傳輸音頻的方面存在的問題主要可以歸納為以下幾點:

1 雙方之間的網絡連接

要進行頻數據的傳輸,首先就是要建立數據連結。常用的通訊協議中,TCP較可靠,所以用在不允許數據丟失的應用上。而UDP則較多應用于處理速度要求較快、數據傳輸可靠性要求不是很高的應用上,如數據廣播。通信協議的選擇取決于我們所要做的應用的類型。怎樣建立網絡連接,穩定的接收和發送音頻信號的數據流是關鍵。

2 音頻信號的采集以及回放

在進行音頻信號的采集中我們必須考慮到采樣率的問題,聲音信號的采樣率有8Khz、16Khz、32Khz、44Khz等,每種數據采樣慮產生的數據量都不一樣,越高的采樣率產生的數據量越大,所以我們要選擇合適的采樣率以適應網絡的帶寬。

3 音頻數字信號的編碼與解碼。

如果把直接采集到的音頻信號數據流在網絡上進行傳輸,它所占有的帶寬也是十分大的,以8Khz的采樣率采集14位的音頻數據那么就有以下這樣的一個式子:

14 bit * 8000/second=112,000 bits/second or112kbps

從中我們可以看出以這樣的方式傳輸音頻數據,每秒需要向網絡中發送112kb的數據。所以。從節省帶寬的角度考慮,我們很有必要對這樣的數據進行壓縮。對多媒體信號的壓縮我們有許多可以選擇的格式,如mp2、mp3、GSM等等。同樣,我們這里也存在一個對壓縮格式進行選擇的問題,考慮到音頻數據傳輸的及時性,對傳輸的音頻數據質量的要求,以及各種壓縮格式的壓縮比率以及進行壓縮和解壓縮所要耗費的系統資源等方面問題,選擇合適的壓縮格式就顯得尤為重要。

作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗