ページ 11

ボイスチャット向きの圧縮方法

Posted: 2010年12月30日(木) 09:54
by shiro4ao
こんにちは、ボイスチャットが、なんとか実装できたのですが、
PCMのままで送信をしているせいか、ブチブチと音が切れます。

LAN内でそんな様子なので、何とかして圧縮を行いたいと思いましたが
音声向きのmp3やoggではリアルタイムな圧縮には向かないらしく、
Stacker 圧縮 は文字向きなので、使えないのかもしれません。

なにかボイスチャット向きの圧縮方法はありますか?
それとも根本からおかしいのでしょうか?

Re: ボイスチャット向きの圧縮方法

Posted: 2010年12月30日(木) 11:10
by softya(ソフト屋)
skypeでは映像付きで会話できますからね。なにか問題があるのは確かです。
次の点を確認してみてください。
・PCMのサンプリング周波数は最低限に下げてますか?
・パケットの周期は物理的限界ですか?ロギングしてみてください。
・十分なキャッシュを行っていますか?

あと最新のコードを添付してもらえますか。

Re: ボイスチャット向きの圧縮方法

Posted: 2010年12月30日(木) 12:13
by shiro4ao
>softyaさん
ご回答ありがとうございます。

・PCMのサンプリング周波数は最低限に下げてますか?
 はじめ11.025kHzにしていて、その後8kHz、にしてみましたが、
 やはり途切れます。

・パケットの周期は物理的限界ですか?ロギングしてみてください。
 タスクマネージャーのネットワークタブにて確認したところ、
 ほとんど使われていないようでした(多くとも0.12%程)
 よって、データが多すぎるということではないような気がします。

・十分なキャッシュを行っていますか?
 キャッシュがどういうものなのかわからないのですが、
 FD_READが来るたびに音を鳴らしているだけなので、おそらく
 そういったものは実装されていないと思います。


以上より、再生中に受信データがやってきたために、受信していないか、
受信中に再生が止まっている可能性があると思います。

受信スレッドと、再生スレッドを分ければ解決できると思いますが、
どうでしようか?

Re: ボイスチャット向きの圧縮方法

Posted: 2010年12月30日(木) 13:13
by softya(ソフト屋)
どの音声通信系のソフトでも少なくとパケットxnのバッファにキャッシュしてから再生していると思います。
最適値は実験で確かめるしか無いですが、遅延を余り感じず途切れれない最適値があるはずですので、最低n=2から始めて見てはどうでしょうか?
画面の2フレームバッファとかと似たような考え方です。

あと再生の制御は別スレッドに分けた方が良いと思いますが、まずキャッシュを試してみてください。

Re: ボイスチャット向きの圧縮方法

Posted: 2010年12月30日(木) 13:47
by softya(ソフト屋)
調べてみたのですが、RTP(Real-time Transport Protocol)と言う規格を参考にされると良いかと思います。
http://ja.wikipedia.org/wiki/Real-time_ ... t_Protocol

「Geekなぺーじ : RTP(Realtime Transport Protocol)」
http://www.geekpage.jp/technology/rtp/

全部を実装する必要は無いと思いますけどね。

Re: ボイスチャット向きの圧縮方法

Posted: 2010年12月30日(木) 13:55
by shiro4ao
ご回答ありがとうございます。

受信側を、別スレッドにしてみたのですが、問題解決には
なりませんでした、やはりキャッシュを実装する必要がありそうです。

RTPの実装はかなり困難そうなので、まずはキャッシュに挑戦してみよう
と思います。