ブラウザからSIPへのビデオ通話

前回の記事で、ブラウザーで音声通信を整理するために利用可能な方法の問題を強調しました。 今回はタスクがより複雑になります。ブラウザから、SIPをサポートするソフトフォンまたはデバイスにいるリモートサブスクライバーにビデオコールを発信する必要があります。 たとえば、次のような理由が必要になる場合があります。









技術



前の記事のすべての計算を完全に繰り返すのではなく、結論に直行します。 したい場合:

現時点では 、Adobe Flash PlayerとRTMFPプロトコルに基づいて決定を下す以外に選択肢はありません。 明るい未来がもうすぐそこにあります。Google 、Chromeで非常に興味深いWebRTCテクノロジーのサポートをすぐに含めること約束しました。これについては別の記事で説明します。 それまでは、ユーザーが既に持っているものを使用します。



Adobe Flash Playerのビデオサポート



Flashは現在、いくつかのコーデックで圧縮されたストリームを再生できます。

この「富」のうち、H264にのみ関心があります。これは、ソフトフォンやSIPデバイスの他のオプションのサポートを見つけることはほとんど不可能だからです。



カメラからのビデオのキャプチャとエンコードにより、すべてがさらに悪化します。 H264コーディングのサポートは、最近リリースされたFP11でのみ登場し、それ以前は、唯一のオプションはSorenson Sparkでした。 残念ながら、11番目のバージョンは大多数のユーザーによってまだインストールされていないため、FP10のみを使用しているユーザーを考慮する必要があります。







また、私たちは誰を扱っているかを忘れてはなりません。 Adobeは、Flash Playerバージョン11.0-11.2で特定のタイプのH264ストリームの再生を「中断」することができました。 問題は、packetization-mode:0でパケット化されたストリームを再生することです。つまり、このモードはほとんどのソフトフォンで使用されます。 バグの詳細は、同社のバグトラッカーで見つけることができます。



結果は次の図です。 H264を介してSIPクライアントに正常に接続するには、次のものが必要です。

ffmpeglibx264の組み合わせは 、トランスコーディングに適しています。 トランスコーディングのパフォーマンスのために、サーバー上のMMX、SSE、および同様のテクノロジーの最新バージョンの可用性は非常に重要です。 ビデオコーデックはそれらを使用して、同時に加速することができます。



ビデオは音声ではありません


一見すると、ビデオと音声の伝送の唯一の違いは、使用するチャネルの幅にあるように思えるかもしれません。 これは確かに真実ですが、いくつかの重要な違いがあります。



オーディオストリームは通常10〜20ミリ秒のフレームに分割され、各フレームは他のフレームとは別にエンコードおよびデコードされます。 ビデオの場合、これは無駄が多すぎるため、ほとんどのフレームでは、画像自体がエンコードされるのではなく、前のフレームとの違いがあります。 さらに優れた圧縮のために、オブジェクトの動きを補正するために、わずかに「シフトされた」前のフレームで差が取られます。 一般に、ビデオ圧縮に関する一連の記事を個別に作成できますが、これについては詳しく説明しません。



別のことが重要です。 オーディオストリームの1つのフレームが失われた場合、たとえば、前のフレームを再び失うなど、単純にそれを隠すことができ、ほとんど気付かないでしょう。 ただし、このようなトリックはビデオでは機能しません。これは、失われたフレームに後続のフレームを重ねる必要があるためです。 ここから、リモート側に独立して圧縮されたキーフレームを送信するように依頼しない限り、アーティファクト自体は消えないように見えます。 SIPでは、これは2つの方法で実行できます。SIPINFOを介したシグナリングレベルと、RTCPを介したメディアレベルです。



次に、会話の参加者間のチャネルのMTUの制限を考慮する必要があります。これは通常、約1500バイトです(NATの場合、IPフラグメンテーションに依存することはできません)。 オーディオフレームはこのような制限に適合しますが、ビデオフレームはほとんどの場合適合しません。 したがって、フレームを断片に分割する必要性は、パケット化と呼ばれ、Flash Playerの一部のバージョンのバグに関連付けられています。



結果



その結果、すべてのレーキを注意深く調べ、必要な量の干し草をどこにでも散布すれば、完全に機能するソリューションを得ることができます。 ブラウザからのビデオコールのサポートをクラウドベースのRTCKitプラットフォームに統合することができました。これにより、この機能を数時間で任意のWebサービスに統合し、多くの時間を節約できます。



RTCKit



テストページに登録せずにこれらすべてをテストできます 。 そこのビデオの解像度は352x288に制限されています。 JitsiおよびLinPhoneソフトフォンをテストしましたが 、H264をサポートしている他のクライアントに関するレビューを聞くのは興味深いでしょう。 habr効果による負荷に耐えようとします! 重要な注意:ブラウザーからブラウザーへRTCKitを介して呼び出し、同時に非常に友好的なNATを使用する場合、説明されているすべての代わりに、RTMFP Peer-2-Peerテクノロジーが使用されます。



今後の記事では、音声およびビデオ会議、通話ルーティング、モバイルデバイスとの対話のトピックを取り上げます。 お楽しみに。



All Articles