私は Skype のようなものを書きたいと思っています。つまり、1 台のコンピューターで一定のオーディオ ストリームがあり、潜在的なインターネット接続に適した形式で再圧縮し、もう一方の端で受信して再生します。
また、インターネット接続がかなり近代的で高速であると仮定しましょう。つまり、DSL などであり、電話などによる低速な接続はありません。関連するコンピューターもかなり最新のものになります (2 GHz 以上のデュアル コア Intel CPU)。
私はマシンのオーディオの扱い方を知っています。私が知らないのは、音声を効率的に送信する方法です。
課題は次のとおりです。
回線全体で良好なオーディオ品質を得たいと思っています。
ストリームはドロップせずに受信される必要があります。ただし、ストリームは少し遅れて受信される場合があります (2 番目の遅延は許容されます)。トランスポート ソフトウェアは、最初に平均 (および最大) レイテンシを決定し、次にストリームを開始し、オーディオの再生を開始する前にその最大レイテンシを待つようにレシーバーに指示できると思います。これにより、レイテンシーがこれ以上高くならない場合、ストリーム全体がスタッターやドロップなしで反対側で再生可能になります.
予想外の IP レイテンシーやブロックによってストリームが切断された場合、これに気づき、アクションを実行して (ストリームを中止するなど)、最終的に新しい送信を開始できるようにしたいと考えています。
圧縮と送信に既製のソフトウェアを使用したい場合、どのようなオプションがありますか? 私は自分自身のオーディオ圧縮エンジンを書くつもりはありません。OTOH、私はこのソリューションを垂直市場で販売する予定です。つまり、コピーごとに数ドルのライセンス料を支払う余裕はありますが、100 ドルではありません。
最も簡単な解決策は、TCPストリームを開き、いくつかのパケットを前後に送信して実行時間を決定し(またはUDPを使用して)、結果を最大遅延値のガイドとして使用することだと思います。オーディオ データを生の形式 (圧縮されていない 16 ビット ステレオ) で、TCP 接続を介してタイミング コードと共に送信します。レシーバーはデータを読み取り、事前に決められた遅延で再生します。それは、私が期待するタイプの高速接続でうまくいくかもしれません.
この目標を達成するための、より優れたパフォーマンス (低レイテンシー) とより少ないデータ (圧縮) を備えた、より優れたソリューションがあるかどうか疑問に思っています。
ところで、私は最初にこれを OS X に実装しようとしましたが、成功した場合は Windows でも実装したいと思うかもしれません。