2

C# アプリで win32 波形 API を使用して voip システムを作成しています。すべて順調に進んでいますが、その場でオーディオ データを圧縮する方法が必要です。

基本的に、オーディオ データはサイズ 150 バイトの「レコード」バッファに入り、このバッファは udp 経由で送信され、リモート エンドで 150 バイトが受信されて「再生」バッファに入れられます。

そのため、udp->send の直前と udp->recv の直後にデータを圧縮/解凍する何らかの方法が必要です。通常の圧縮アルゴリズムは、.NET GZip クラスを含むオーディオでは機能しません。

これを行うのに役立つライブラリを知っている人はいますか?

前もって感謝します...

4

4 に答える 4

1

より良い圧縮を得るために、これらの 150 バイトのチャンクをまとめたいと思うでしょう。
ただし、そのような小さなバッファ サイズでも、ある程度の圧縮は可能です。

組み込みの GZipStream が機能しない場合は、DotNetZipに含まれている GZipStream を試すことができます。コーデック パターンを実装する DotNetZip で利用可能な ZlibCodec クラスもあります。これにより、150 バイト ブロックでの圧縮が容易になる場合があります。

于 2009-03-06T16:23:36.003 に答える
1

150 バイトは、オーディオ データの信じられないほど小さいバッファです。たとえば、16 KHz モノラルでは 5 ミリ秒未満です。私は専門家ではありませんが、選択した圧縮スキームに関係なく、このような小さなバッファを使用すると圧縮率が大幅に低下すると思います。それに加えて、送信する各パケットにはかなりのオーバーヘッドがあります。

そうは言っても、音声データを送信する場合は、非可逆圧縮のSpeexを調べてください (音声の圧縮には非常に効果的ですが、音楽の音質はひどいものです)。

于 2009-03-06T16:06:26.793 に答える
0

上で提案したように、私は Speex を検討します。これは十分にサポートされており、現在では Flash Player のデファクト スタンダードとなっています。

バッファーを設定しているサイズによって、レイテンシーが問題になると思います (バッファーが大きいほど、レイテンシーが大きくなります)。これは多かれ少なかれ MP3 を除外します... 5khz の出力サンプル レートでの音声の場合 (これを高くするとあまり目的を果たせません)、圧縮解除されたフレームの最小サイズは 576 サンプル、または送信前にエンコードする必要がある ~100 ミリ秒のデータです。 . これは、問題のネットワーク部分を考慮する前に、双方向の遅延が 200 ミリ秒を超えることを意味します。

于 2009-03-09T16:49:28.273 に答える
0

探しているコンポーネントは、コーダー/デコーダーまたはcodecとしてよく知られており、1 つを選択する際には多くのオプションがあります。

于 2009-03-06T15:52:40.133 に答える