2011-10-14 39 views
4

我想開始編寫一個簡單的Voip應用程序,它可以幫助我與我的一位朋友交談。像Skyp一樣。用C編寫一個簡單的voip應用程序

我搜索到互聯網,發現類似this

它看起來不錯一些有用的鏈接。你說的話 ?

哦,我忘了說,我在想用C寫這個應用程序。你的意見是什麼?對於這項工作,你更喜歡其他語言嗎?是不錯的選擇?

另外,如果有人曾經嘗試這樣的事情,請告訴我你的經驗。 如何啓動,如果有一個很好的教程,使用什麼語言和任何其他有用的信息。

謝謝你的時間。

+1

我認爲我們心中的問題是:爲什麼不使用Skype或任何其他各種語音聊天軟件?你的朋友是否真的想等你來編寫軟件並修復任何錯誤,然後你們可以一起談話?安裝軟件只需幾分鐘。編寫這個應用程序最少需要幾個小時,可能更多的是因爲你必須閱讀文檔,編寫代碼,測試它等。 – birryree

+2

第一個問題,我實際上在這裏笑了。 – Anders

+0

我正在和Skype朋友聊天。但我只想學習這項技術的一些基本的東西,這就是爲什麼我想寫這個應用程序。只是爲了學習基礎知識。有什麼問題 ? – user547363

回答

8

好的,寫一個簡單的VOIP程序作爲學習經驗當然是一個很好的理由。

首先,您應該選擇合適的音頻編解碼器並學習如何使用它。我建議SPEEX

其次,您需要決定如何通過網絡發送編碼數據。一個簡單的TCP套接字可以工作,至少有正確的選項(我在這裏特別想到TCP_NODELAY),但大多數VOIP應用似乎使用UDP來直接傳輸數據包,交換可靠性以提高效率。所以你應該學習如何設置和使用UDP套接字。

當然,您還需要學習如何閱讀和播放音頻。這些細節將取決於您使用的語言和平臺。

一旦你掌握了所有這些,它應該是非常簡單的。從麥克風讀取音頻,對其進行編碼,通過網絡發送出去,從網絡讀取傳入數據,解碼,播放。 當然,你同時做了幾個這樣的事情—如果你的程序在等待可能或不可能到來的輸入數據時停止發送你的語音,這是不好的。

處理此問題的一種方法可能是將程序分成兩個線程:一個用於收聽和傳輸,另一個用於接收和播放。另一種解決方案是使用非阻塞I/O和事件驅動的編程來處理來自多個源的數據。此選項的一個可能的優點是它可以更容易地實現電話會議,您可以在其中發送和接收來自多個人的音頻。

當然,我從來沒有嘗試過這個,所以我真的只是猜測在這裏。