2010-02-05 43 views
3

首先,我只是一個業餘愛好者,所以我很抱歉,如果這是愚蠢的問題,或者如果我太天真。 (這也意味着我不能購買昂貴的庫)語音會議 - 如何讓更多人蔘與對話?

這就是情況:我正在C#.NET中構建一個簡單的語音聊天應用程序(類似於Ventrilo或TeamSpeak,但僅適用於大約15或20人,並在100Mbps LAN上運行)。我有工作服務器(產卵線程爲每個客戶端)和客戶端應用程序使用UDP連接和DirectSound捕獲和播放聲音。我可以打「1對1」的電話,但我無法弄清楚最重要的事情之一:

我如何在談話中有兩個以上的人?

+3

您可能想要更改您的問題。 「讓每個人都聽到別人說的最好的方法是什麼」似乎是廣泛的。它不包括人們沒有面對麥克風或按下靜音的情況。根據您的其餘問題,您是否真的在問「我如何在對話中有兩個以上的人」?如果是這種情況,你可能會考慮星型或網狀拓撲結構。你也可以考慮使用IP多播。 – atk 2010-02-05 14:11:33

+0

感謝您的評論。我已經按照你的建議重新提出了這個問題(因爲這真的是cas)。我正在考慮使用多播,但不確定在這種情況下是否是個好主意。 – Ken 2010-02-06 20:38:38

回答

2

你需要一些集中的地方通過多播發回數據包,否則你需要一個分散的方法,其中每個客戶端連接到每個其他客戶端,並且每個客戶端正在主持一個多播。你想避免的是讓機器將數據轉發給其他機器,這會導致O(n)時間向每臺機器發送消息(並且I/O速度很慢!)。

在任何一種情況下,您都會遇到同樣的問題:如何合併音頻流。一種簡單的機制可以實現這一點,即在將它們發回(從網絡端口或向揚聲器發送)之前將它們按位或信號合併在一起,但假設您可以訪問非壓縮和合理同步的數據流。