2014-08-29 93 views
1

我在C++中有一個經典的客戶端 - 服務器環境。
現在我想實現特定客戶端之間的語音聊天。
我的問題是:如何流沒有「暫停」音頻。我只相信理論。
我的第一個想法是每0.5秒將一些字節捕獲到緩衝區,然後將其發送到服務器,服務器將其重新發送給感興趣的客戶端。
但我不知道如何做到儘可能實時!
C++從麥克風流式傳輸音頻

編輯客戶端是Windows和服務器就是Linux

+1

此問題的正確答案完全取決於您的操作系統。在Microsoft Windows上運行的應用程序與在Linux上運行的應用程序完全不同。這裏使用的操作系統必須指定。 – 2014-08-30 00:17:28

回答

3

你會選擇一個編解碼器和基於流的由該編解碼器指定的時鐘速率。例如,G.711編解碼器指定8000Hz的時鐘速率(意味着麥克風輸入源將每秒採樣8000次)。它還指定(默認情況下)每個數據包應該包含20毫秒的音頻,因此超過一秒鐘,您將發送50個音頻數據包(1秒= 1000毫秒/每個數據包20毫秒=每秒50個數據包)。

實施方式(實時)您將擁有一個單獨的線程,具有「實時」優先級,負責從麥克風採樣音頻,將其包裝在RTP數據包中,然後將該數據包發送到你的服務器。您的服務器同樣會有一個單獨的「實時」優先級線程,它將接收每個RTP數據包並將其轉發給每個訂閱的客戶端。