1

私は一生これを理解することはできません..ネットワーク接続で受信したデータを取得して、それをサブプロセスにパイプしようとしています。サブプロセスは、データをaplay経由でサウンドカードにストリーミングします。

なんとかこれを行うことができましたが、データを受信して​​いる間、一時停止します。

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

ネットワーク接続から無期限にストリーミングするパイプをセットアップする最良の方法は何ですか? これを行うためにマルチプロセッシングまたはスレッドを設定しますか?

ありがとう!

4

1 に答える 1

0

サウンドの再生は特に注意が必要です。人間の耳は、サウンド再生のあらゆる種類の中断に敏感であり、知覚される品質は悪くなります。さらに、ネットワークの遅延/ジッター/レイテンシーを予測することはできません。したがって、次のモデルが最適です。

  1. マルチスレッド - 1 つのスレッドがネットワークから受信し、キューに送信します。別のスレッドがキューからオーディオ データを読み取り、サウンド カードに送信します。
  2. 1 ~ 2 秒分のデータを保持できるジッター バッファーを用意します。(アプリケーションによって異なります。ボイス チャット アプリを作成している場合は、150 ミリ秒以下のデータをバッファリングする必要があります)。
  3. このバッファ内のデータが不足した場合は、再生を開始する前に再バッファリングしてください。再生を一時的に停止することは、オーディオが絶え間なく途切れるよりも優れています。
于 2013-06-12T01:05:21.953 に答える