クライアントのSIPサーバーを使用するAndroidアプリを開発したい。私のクライアントは、アプリと通信するためにSIPサーバーからいくつかのRESTAPIを公開しています。
このアプリに最適なコーデックタイプを知りたいですか?
基本的に、SIPスタックを作成し、 SIPパケットをサーバーに送信します。したがって、パケットのコーディングおよびデコードシステムが必要です。私のクライアントは16kb/秒を好みますが、どちらを使用すべきかわかりません。
クライアントのSIPサーバーを使用するAndroidアプリを開発したい。私のクライアントは、アプリと通信するためにSIPサーバーからいくつかのRESTAPIを公開しています。
このアプリに最適なコーデックタイプを知りたいですか?
基本的に、SIPスタックを作成し、 SIPパケットをサーバーに送信します。したがって、パケットのコーディングおよびデコードシステムが必要です。私のクライアントは16kb/秒を好みますが、どちらを使用すべきかわかりません。
他の人が言っているように、SIPはオーディオやビデオを転送しません。理論的には、ATM、アナログ回線、DS0など、現実の世界ではどのトランスポートでもデータを送信できますが、RTPが最も一般的です。RTP(リアルタイムプロトコル)およびRTCP(リアルタイム制御プロトコル)またはSRTP(セキュアRTP)は通常、オーディオとビデオを伝送します。
コーデックに関する限り、サーバーがサポートするものによって制限されます。ここにいくつかの一般的なコーデックとそれぞれの長所と短所があります。
G.711-通話品質(つまり、優れたアナログ電話回線として優れているか、少し優れています)。事実上すべてのデバイスがG.711をサポートするという点で「ユニバーサル」です。多くの帯域幅を使用しますが、実際にはデータを圧縮しません(G.711は「コンパンダー」です)。ベースラインのG.711はかなり必要最低限のものです(実際にはいくつかのルックアップテーブルです)。付録Iはパケット損失隠蔽(PLC)を追加し、付録IIは無音の抑制と快適なノイズの生成を追加します。
GSM-携帯電話で使用され、問題なく聞こえ、PLCが良好で、圧縮率が高い
G.729A-広く使用されている、ほぼ有料の品質、良好な圧縮(8Kbps)
G.723.1-広く使用されており、G.729とほぼ同じで、圧縮率が高い(4-5Kbps)
G.722-G.711よりも優れたサウンド、広帯域(G.711またはアナログコールの2倍のオーディオ帯域幅)、G.711と同じ帯域幅が回線で使用されます
GIPS-さまざまな実装が存在し、1つは無料です。IIRCは、回線上で約13.5Kbpsを使用し、サウンドはG.723.1ほど良くありません(ただし、これは知覚メトリック、YMMVです)多くのプロセッサを使用します。
すべてのコーデックは、いくつかのプロセッサと他のシステムリソースを使用します。経験則として、コーデックがより積極的である(帯域幅が小さい)ほど、より多くのプロセッサが使用されます。また、これらの特定のコーデックはすべて不可逆コーデックであり、一部のデータが失われます。これは、圧縮が行われていることを意味しますが、ルーティングや回線品質が悪いためにオーディオの一部がドロップされることはありません。MP3はLOSSYコーデックと見なされ、FLACはロスレスと見なされます。興味がある場合は、次のウィキペディアの記事でさらに詳しく説明されています:http: //en.wikipedia.org/wiki/Lossy_compression
このSIPサーバーがサポートするコーデックとプロトコルを知る必要があります。両端を制御し、16Kbpsに固執したい場合は、iLBC(ロイヤルティなし)またはG.729(ロイヤルティが適用されます)が必要になります。G.711と(現在の)G.722にもロイヤリティはありませんが、どちらも〜64Kbpsを使用します。
前に示したリストは良いですが、いくつかの問題があります。
GIPS-さまざまな実装が存在し、1つは無料です。IIRCは、回線上で約13.5Kbpsを使用し、サウンドはG.723.1ほど良くありません(ただし、これは知覚メトリック、YMMVです)多くのプロセッサを使用します。
GIPSはコーデックではありません-iLBCとiSACはGIPSによって設計されたコーデックです。iLBCは無料で標準化されています。iLBCは高品質で、13または15Kbpsであり、G.729またはG.711と比較して、パケット損失に対して非常に耐性があります。iLBCでは30%または50%の損失が発生する可能性がありますが、それでも理解できます。G.729と比較してCPUを大量に使用しているとは言えません。
すべてのコーデックは、いくつかのプロセッサと他のシステムリソースを使用します。経験則として、コーデックがより積極的である(帯域幅が小さい)ほど、より多くのプロセッサが使用されます。また、すべてのコーデックは不可逆コーデックであり、一部のデータが失われます。
ええと、G.711自体は実際には損失がありません(理論的にはそうですが、量子化レベルの損失です)。64KG.722もそれほど損失はありません。G.723は、庭のホースを通して死んだスナネズミを吸います。:-)
自分でやるのは悪い考えのように聞こえます。実装する必要のあるプロトコルがいくつかあるため、SIPクライアントの開発は簡単な作業ではありません。コーディングの選択は、他の決定と比較してそれほど重要な決定ではありません。
利用可能なオープンソースのSIPスタックの1つ(pjsipなど)を使用するか、オープンソースのSIPクライアント(sipdroidなど)の上にアプリケーションを構築する必要があります。
しかし、コーデックを要求したので:GSMコーデックを使用してください。帯域幅を節約し、問題ないように聞こえます。それ以外の場合、G.711は、すべてのsipサーバーの99%がサポートする標準コーデックです。
どれでも?
SIPは、データパケットを送信および処理しません。SIPはSessionInitiationProtocolであり、NEGOTIATIONOFSESSIONSを処理します。
次に、セッションarae(auioおよびvideoの場合)はRTPに基づいており、シグナリングにRTSPを使用します。したがって、あなたの質問は、あなたが何をする必要があるかについての知識が本当に不足していることを示しています-本当の目的は、RTP互換コーデックが必要であるということです。
これは無意味です。RTPはキャリアプロトコルです。これは、「HTTP互換の画像形式とは何か」を尋ねるようなものです。HTTPは気にしません。ブラウザはそうします。
RTPの場合、それは意味します-RTPは気にしません。あらゆるデータを転送できます。重要なのは、両方のサイドが同じコーデックを知っているということです。したがって、あなたの場合、それは次のことを意味します。
ここで考慮する必要がある2つのことがあります。
上記の2つの質問に対する答えを特定したら、選択できるようになります。モバイルデバイスの場合、通常使用される音声コーデックはAMR-NBまたはAMR-WBです。SIPの場合、通常はG.729またはG.722.xです。Speex、ISAC、SILKから選択することもできます。いずれにせよ、すべてと相互運用するためだけにG.711を実行する必要がありますが、帯域幅は高くなります。
ここでは簡単な答えはありません。顧客が他にどのデバイスを使用しているかを選択または述べることができれば、選択が容易になります。