モバイル デバイス用の voip アプリを作成するのは初めてです。現在、アスタリスクサーバーをセットアップしており、iPhone voip アプリと android voip アプリも用意しています。iPhone と Android の両方で、sip ライブラリとして linphone コア ライブラリを使用しています。
現在、正常に電話をかけることができます。時々、音声の「パチパチ」というような通話品質の問題が発生したり、人の文章の一部が途切れたりすることがあります。そのため、パフォーマンスの向上に努めています。
コーデックを調査するのはこれが初めてなので、実際に使用されているコーデックを特定しようとしています。だから私の質問は:
コーデックが実際に採用されるのはいつですか? 電話はコーデックを使用して、アップロードする音声を圧縮し、着信音声を解凍しますか? それとも、アスタリスクサーバーで何かが起こりますか? または両方?
この質問に対する答えを見つけることができませんでした。linphone コマンド getAudioCodecs() を実行すると、使用可能なコーデックのリストが表示されますが、特定の通話で実際に使用されているコーデックのリストは表示されません。たとえば、呼び出しの途中で関数 getAudioCodecs() の var_dump を次に示します。
08-13 08:39:49.787: I/System.out(16358): codec:SILK 16000
08-13 08:39:49.787: I/System.out(16358): codec:speex 16000
08-13 08:39:49.787: I/System.out(16358): codec:speex 8000
08-13 08:39:49.787: I/System.out(16358): codec:PCMU 8000
08-13 08:39:49.787: I/System.out(16358): codec:PCMA 8000
08-13 08:39:49.797: I/System.out(16358): codec:SILK 24000
08-13 08:39:49.797: I/System.out(16358): codec:SILK 12000
08-13 08:39:49.797: I/System.out(16358): codec:SILK 8000
08-13 08:39:49.797: I/System.out(16358): codec:speex 32000
08-13 08:39:49.797: I/System.out(16358): codec:AMR 8000
08-13 08:39:49.797: I/System.out(16358): codec:iLBC 8000
08-13 08:39:49.797: I/System.out(16358): codec:L16 44100
08-13 08:39:49.797: I/System.out(16358): codec:L16 44100
08-13 08:39:49.807: I/System.out(16358): codec:G722 8000
08-13 08:39:49.817: I/System.out(16358): codec:GSM 8000
これは多くのコーデックです...では、どのコーデックが使用されているかをどのように知るのでしょうか?
私のアスタリスク サーバーに関しては、私の sip.conf には各ユーザーに対して次の行があります。
allow=ulaw
allow=gsm
つまり、GSM を使用しているということですか? GSM は getAudioCodecs の var_dump と sip.conf の両方に表示される唯一のコーデックなので?
役立つ場合は、linphone sip ライブラリのドキュメントを次に示します。 http://www.linphone.org/docs/liblinphone-javadoc/
追加情報
OK、さらに興味深いものをいくつか見つけました。このコードを Android アプリに書きました。
//mLC is the currently active LinphoneCore object when receiving a call
LinphoneCallParams lcp = mLc.getCurrentCall().getCurrentParamsCopy();
PayloadType pt = lcp.getUsedAudioCodec();
String mime = pt.getMime(); // the mime value is PCMU
現在、変数 mime が値「PCMU」を保持していることに気付きました。Google 検索を行ったところ、G.711 に関連付けられていることがわかりました。
AndroidアプリではG.711コーデックだと思いますか? もしそうなら、sip.conf で G711 について触れていないのに、どうして G711 が許可されるのでしょうか?