WebRTCはどのような獣ですか?
WebRTCとは何ですか? これは、次の4つのことを実行できるJavaScript APIです。
- カメラからのビデオストリームとマイクからのオーディオストリームをキャプチャします。
- ビデオとオーディオを再生します(HTML5ビデオとHTML5オーディオ経由)。
- 中間サーバーを介して、またはnatトラバーサルを含む直接的な、2つのブラウザー間のUDP(またはすべてが悪い場合はTCP)接続を確立します。
- 確立された接続を介してビデオ、オーディオ、およびユーザーデータをストリーミングします。
実際、ビデオ/サウンドを操作するためにFlashに置き換わり、ハングアウト、Web用のスカイプ、およびその他のピアツーピアビデオおよび音声会議を行うことができます。 フラッシュなしで、ブラウザの確認を使用して、「カメラとマイクへのアクセスを許可します」。
悪魔の詳細
WebRTCを使用する際の最大の課題は、接続のセットアップです。 両方のユーザーが「192.168 ...」のようなIPアドレスを持ち、UDPパケットをジャグリングして中間NATサーバーをだましてデータの送信を開始する必要がある場合、NAT侵入スクリプトのAPIは「シャープ」になります。 保証されたパブリックIPアドレスを持つサーバーへの接続を確立する場合でも、「接続」メソッドはありません。 すべてを手動で行う必要があります。
2つ目の注意点はコーデックです。 ビデオをキャプチャして圧縮し、ネットワーク経由で転送して再生することは、多くのニュアンスを持つ相互接続されたプロセスです。 2つのブラウザ、特に異なるブラウザ間で呼び出す場合、コーデックに同意し、ネットワーク帯域幅を分析し、ビットレート、ビデオ解像度を変更する必要があります。 また、ビデオとサウンドのオンとオフを切り替えることができます。 また、プロセスに干渉してビットレートを強制することもできます。
また、WebRTCはSDPとほぼ結びついています。SDPは、VoIPテレフォニーで使用され、SIPと互換性のある古代のテキストプロトコルです。 また、通信プロセスに介入する必要がある場合、たとえば固定ビットレートを設定する場合、このテキストを解析および変更する必要があります。
EdgeにはWebRTCはありません!
Microsoftは、WebRTC APIがJavaScript開発者にとって複雑すぎると判断し、Object Real-Time Communicationsという代替手段を実装しました。 プロトコルに関しては、ORTCはWebRTCとほぼ同じように機能します。 しかし、ブラウザーからアクセス可能なJavaScript APIは、オブジェクト指向スタイルでゼロから作成されました。 SDPはもはや突出していません。テキストを解析する必要はありません。すべてはオブジェクトとそのフィールドを通じて制御されます。
ORTCはWebRTC標準に追加され、他のWebブラウザーがそれを実装し始めました。Firefoxにはすでに部分的な実装があります。 これはすべて、私たちがそれを知るまで興味深く、有望に聞こえます...
ORTCはまだ実装されていません
Edgeには、ORTCの1年前バージョンの不完全な実装が含まれています。 現時点では、ORTCの「完全な」実装は1つだけではありません。 ChromeおよびFirefoxで長年使用されてきたWebRTCとは異なります。
ところで、機能するポリファイルはありません(ブラウザのORTC APIを介したWebRTC APIエミュレーター)。 つまり、それらは存在しますが、商業的利用の準備ができておらず、さらなるデモは機能しません。 そして、これはまさに私たちが開発したものです。 ポリファイルを作成することは、2つの根本的に異なるAPIをサポートするために、動作しデバッグされているSDKを書き換えるよりもはるかに簡単だからです。
Edge ORTCは完全には実装されていません
それは最もつらいことでした。 ベータ版が利用可能になり、ORTC実装はSkype for Web用に作成されたようです。 優れたドキュメントにより、EdgeからEdgeへの音声通話またはビデオ通話をすばやく収集できます。 しかし、Firefoxまたは自分のサーバーに電話すると、ニュアンスが浮かび始めます。
ORTC標準には、接続を高速化するTrickle ICEサポートがあります。 Edgeにもメソッドがありますが、そのようなシナリオに使用できないことはどこにも書かれていません。 多くのものは、ChromeおよびFirefoxと互換性がありません。 たとえば、同じ名前のペイロードタイプが異なるICEまたはコーデックの承認。
フェイクバックはありません。 たとえば、データなしでレシーバーを作成し、接続するために転送するなど、右または左に一歩進んだ場合、エラーコードのみが取得され、それ以上は取得されません。 最近まで、これらのコードには説明すらありませんでした;見つけるための唯一の方法はマイクロソフトに尋ねることでした。 最近、戻りコードの簡単な説明がレイアウトされ、生活が少し楽になりましたが、APIは依然として「正しい」ユースケースを想定し、それから離れようとする試みを厳しく罰します。
そして、コーデックがあります!
ビデオとサウンドのコーデックは別の痛みです。 従来、WebRTCはビデオにH.264とVP8を、サウンドにOpusとg.711を使用しています。 Edgeは、Skype用の最小限のコーデックのみを提供しています。ビデオ用のH.264UC(Microsoft Lyncから継承)、g.711、および最近まで独自のサウンド用Opusの実装です。 良いニュースは、最近「通常の」Opusを追加し、VP9のサポートを追加することを約束したことです。 悪いニュース-VP9はまだ追加されていません。 そのため、異なるブラウザ間で音声を送信することはできますが、ビデオは少し待たなければなりません。
トンネルの終わりの光
実際、すべてがそれほど悪くはないので、開発者はすぐにSDK for Edgeを作成しました。SDKは、対応するバージョンのブラウザのリリースとともに提供する予定です。 幸いなことに、WebRTC(またはORTC?)は、Safariを除き、ほぼすべてのブラウザーで既に開発およびサポートされています。 噂によると、AppleはWebRTCに取り組む開発者を雇い入れており、WebKitのナイトリーには最初の実装があります。 ビデオを再生するためだけでなく、通話のためにもFlashを放棄する時が来ました。