2013-06-12 14 views
1

我不能爲我的生活弄清楚這一點..我試圖在網絡連接上接收數據,然後管它到一個子流程,它將通過aplay將數據流式傳輸到我的聲卡。Python管道從網絡套接字接收到tcp/udp pcm數據到子進程(aplay)

我設法做到了這一點,但它在收到數據時暫停了一會兒。

while True: 
    data = sock.recv(1024) 
    p1.stdin.write(data) 

什麼是設置的最佳方式,將無限期地的網絡連接流的管道?設置多處理或線程來做到這一點?

謝謝!

回答

0

播放聲音特別棘手 - 人耳對聲音播放的任何中斷都很敏感,並且感知質量會很差。此外,您無法預測網絡中的延遲/抖動/延遲。因此,以下型號是最好的:

  1. 多線程 - 一個線程從網絡接收並提交到隊列。另一個線程從隊列中讀取並將音頻數據提交給聲卡。
  2. 有一個可以容納1-2秒數據的抖動緩衝區。 (取決於您的應用程序,如果您正在編寫語音聊天應用程序,則應緩存不超過150毫秒的數據)。
  3. 如果用完此緩衝區中的數據,請在開始播放前重新緩衝。播放中的暫停暫停比音頻中的暫停更好。