Python管道从网络套接字接收到tcp / udp pcm数据到子进程(aplay)

时间:2013-06-12 00:22:01

标签: python sockets tcp subprocess

我不能为我的生活想出这个...我正在尝试接收网络连接上收到的数据,然后将其传输到子进程,该进程将通过aplay将数据流式传输到我的声卡。 / p>

我设法做到了这一点,但它在收到数据时暂停了一下。

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

设置将无限期从网络连接流式传输的管道的最佳方法是什么?设置多处理或线程来执行此操作?

谢谢!

1 个答案:

答案 0 :(得分:0)

播放声音特别棘手 - 人耳对声音播放中的任何中断都很敏感,感知质量也会很差。此外,您永远无法预测网络中的延迟/抖动/延迟。因此,以下模型是最好的:

  1. 多线程 - 一个线程从网络接收并提交到队列。另一个线程从队列中读取并将音频数据提交给声卡。
  2. 有一个可以容纳1-2秒数据的抖动缓冲区。 (取决于您的应用程序。如果您正在编写语音聊天应用程序,则应缓冲不超过150毫秒的数据。)
  3. 如果此缓冲区中的数据用完,请在开始播放前重新缓冲。播放中的暂停暂停比音频中的常量中断要好。