3

Cumulusを使用してライブ RTMFP ボイス チャット アプリケーションを構築しています。基本的な音声転送は NetStreams を使用して非常に簡単に機能しますが、大きな問題が 1 つあります。

NetStream が送信するマイク データを操作する方法はないようです。また、リッスンしている NetStream が再生前に受信するデータを操作する方法もないようです。

しかし、これはまさに私たちが必要としているものです。通常のマイクで録音されたオーディオを転送したくはありませんが、最初にピッチングし、次に送信してから再生します。または、最初に送信し、次にピッチしてから再生します。しかし、オーディオ録音、Speex エンコーディング、Speex デコーディング、およびオーディオ再生全体が、NetStream クラス内に完全にカプセル化されているようです。

私たちが望むものを達成する唯一の方法 (そしてそれらすべてが NetStream を完全に削除する方法) のようです:

  1. 生のピッチ付きオーディオ データを送信します。それは機能しますが、もちろん送信するデータは大量であり、ローカル LAN テスト以外では十分な速度で動作しない可能性があります。

  2. オーディオ データのピッチング、フラッシュ用の既存のエンコーダーを使用した ogg/mp3 への変換、送信、ogg/mp3 のデコード、および再生。しかし、これは、マイクから受信したすべてのサンプル パケットをエンコードし、ヘッダーを追加することなどを意味します。そのため、生のオーディオ データと比較してそれほど多くの利点は得られない可能性があります。

    2.1. フラッシュ用のSpeexエンコーダー/デコーダーがあれば、これは実際には良い方法です。しかし皮肉なことに、明示的に使用できない組み込みのもの (NetStreams でオーディオのエンコード/デコードに使用されるもの) 以外にはありません。ええ、アドビ、提供してくれないことに感謝します...

  3. データを Cumulus サーバーに送信し、そこで提案 (およびおそらく変換) して、受信者に送信します。これは 1. よりもはるかに高速ではない可能性が高く、RTMFP、P2P 通信の正確な利点も捨ててしまいます。

ここにリストしたものよりもうまく機能するこの問題の解決策はありますか? NetStream に渡される前にマイク データを実際に操作する方法はありますか?

4

1 に答える 1

3

実行可能なものを取得するには、オーディオデータを圧縮形式に変換する必要があります。生データは膨大な量のデータを表します。2番目の選択肢の方が良いと思います;-)

私はすでにフラッシュでoggvorbisデコーダー/エンコーダーを開発しました。Alchemyを使用すると、CPUの消費量は常に10%未満になります。それは完全に可能です。

speex形式を好む場合は、一貫した努力で、錬金術を使用してspeexコードを構築する際に同じことを実現できると思います。

さらに詳しく教えていただければ、cumulus.dev@gmail.comまでご連絡ください;-)

于 2012-04-05T12:37:05.533 に答える