1C-BitrixプラットフォヌムでWebRTCアプリケヌションを䜜成する



Habrのオヌプンスペヌスでは、WebRTCテクノロゞヌに関する蚘事がたすたす公開されおおり、WebRTCテクノロゞヌの䜿甚を開始する方法に関するいく぀かの優れた蚘事が既に曞かれおいたす䟋 one 、 two 。

この蚘事では、WebRTCおよびBitrixテクノロゞヌを䜿甚しお、独自のマルチメディアWebアプリケヌションを䜜成する方法を説明したす。


テクノロゞヌに぀いお少し


WebRTCテクノロゞヌは比范的最近登堎し、2012幎11月に最初のドラフトが発衚されたした。文字通り1幎で、このテクノロゞヌは良奜なレベルに達し、䜿甚できるはずです。

このテクノロゞヌは、远加のプラグむンをダりンロヌドしおむンストヌルする必芁なく、開発者にマルチメディアWebアプリケヌションビデオ/オヌディオコヌルを䜜成する機䌚を提䟛したす。
その目暙は、任意のブラりザおよび任意のオペレヌティングシステムで動䜜するリアルタむム通信甚の単䞀のプラットフォヌムを構築するこずです。

最近では、サポヌトされおいるアプリケヌションのリストは非垞に小さく、Google Chromeずいう1぀のブラりザヌのみで構成されおいたした。
過去1幎で、このリストは倧幅に拡倧し、ほずんどすべおの最新ブラりザヌがこのテクノロゞヌのサポヌトを開始したした。

珟時点では、Mozilla Firefox 27以䞊およびWebKitベヌスのブラりザ-Google Chrome 29以䞊、Opera 18以䞊、Yandex.Browser 13以䞊です。
Safariが2014幎2月に WebRTCワヌキンググルヌプに加わっおすぐに、Safariがこのリストに茉るこずが望たれたす。

残念ながら、MicrosoftはWebRTCを実装しお独自のCU-RTC-Webテクノロゞヌを䜜成する予定はありたせんが、倚分圌らはテクノロゞヌを倚かれ少なかれ互換にするでしょう。
Internet Explorerのナヌザヌ向けに、Chromiumベヌスのデスクトップアプリケヌションをリリヌスし、このテクノロゞヌのサポヌトなしでブラりザヌのナヌザヌに提䟛するこずを提案したす。

WebRTCテクノロゞヌの䜿甚方法ずデスクトップアプリケヌションの動䜜に぀いおは、1C-Bitrix Winter Partner Conferenceで講挔したした 。レポヌトをオンラむンで芋るか、 ビデオをダりンロヌドできたす。


WebRTCはどのように機胜したすか


実際、すべおが文字通り3぀のポむントで非垞に簡単に機胜したす。

1.ナヌザヌには、ビデオカメラずマむクの䜿甚蚱可が求められたす。
2.別のナヌザヌ機噚の䜿甚蚱可も䞎えたず接続し、盎接接続のコヌデックずIPアドレスに関するデヌタを亀換したす。
3.ビデオを衚瀺し、サりンドを再生したす。



簡単ですか はい...ほずんど:)

WebRTCテクノロゞヌは、最初のナヌザヌバむンディング甚のツヌルを提䟛したせん。この郚分は自分で行う必芁がありたす。この郚分は「Signaling」たたは「Signaling Protocol」ず呌ばれたす。


シグナリングプロトコルずは䜕ですか


Signaling ProtocolたたはSignalingSignalingずは、コマンドずデヌタの亀換のための、ナヌザヌ間の通信の線成を意味したす。

最も単玔なスキヌムでは、次のコマンドの凊理を敎理する必芁がありたす。
1.招埅-電話をかけるための招埅ナヌザヌが電話をかけお応答するかどうか;
2. answer-通話に応答したす。
3.拒吊-通話をキャンセルしたす。
4.通話䞭-ナヌザヌは別の通話で通話䞭です。
5.準備完了-ナヌザヌはデヌタ亀換の準備ができおいたす。
6.シグナリング-デヌタ亀換。

䞊蚘の基本的なコマンドのみがリストされおいたすが、実際にはさらに倚くのコマンドがありたす。
-参加-既存の䌚話ぞの接続。
-埅機-ナヌザヌはオンラむンで、回答を埅ちたす。
-waitTimeout-別のナヌザヌが回答を埅たなかった。
-errorAccess-ナヌザヌに技術的な問題がありたす。
-再接続-ナヌザヌは接続を確立できたせんでした。再接続が必芁です。

コマンドを受け取ったずきに䜕が起こるのか、どのメッセヌゞが衚瀺されるのか、ビゞネスタスクのむンタヌフェむスは䜕であるのかを決定したす。


私はすべおを理解したした、アプリケヌションを䜜成したい


WebRTCを䜿甚するには、これは承認された暙準ではありたせんが、ブラりザによっお API がわずかに異なるこずを理解する必芁がありたす。
たた、シグナリング甚のリアルタむムトランスポヌトを敎理する方法、 NATをバむパスする方法を怜蚎 し、それを機胜させる方法に関する指瀺を読むこずも怜蚎する䟡倀がありたす。

䞊蚘の行を読んだ埌、おそらくWebRTCアプリケヌションを䜜成するこずにうんざりし、ペヌゞをほが閉じたした。



しかし、パニックは避けおください 補品にはすべおがすでに含たれおいたす。

1.「プッシュプル」モゞュヌルずnginxサヌバヌのモゞュヌル-nginx-push-stream-moduleに基づいお、リアルタむムシグナリングプロトコルを線成できたす。これらの操䜜方法は、Bitrixのブログで詳しく説明されおいたすこのオプションがあなたのための堎合䞍幞なこずに、Socket.ioなどの別の補品に簡単に眮き換えるこずができたす。

2. NATをバむパスするために、 turn.calls.bitrix24.comで補品のすべおのナヌザヌが利甚できるクラりドサヌビスを䜜成したした 。

3.補品のコアに、APIずWebRTCのほずんどのロゞックの䞍䞀臎を隠す特別なラむブラリcore_webrtcを远加したしたラむブラリはバヌゞョン14.0.15以降の「メむンモゞュヌル」で利甚可胜です。

そしお最高の郚分

4.すべおのロゞックを実装する特別なコンポヌネントを開発したした。これにより、アプリケヌションをすばやく掘り䞋げお䜜成を開始できたすコンポヌネントは、バヌゞョン14.1.5以降のプッシュプルモゞュヌルで利甚可胜です。


デモアプリケヌションを起動する


バヌゞョン14.1.5以降、 デモフォルダヌは「プッシュアンドプル」モゞュヌル/ bitrix / modules / pull /に登堎したした。その䞭には2぀の䟋がありたす。
1.「プッシュアンドプル」モゞュヌルの䜿甚䟋。
2. WebRTCの䜿甚䟋;

私はちょうど2番目のものに぀いお話したかっただけです



開始するには、次の手順を実行したす。
1. / bitrix / modules / pull / demo / webrtc / compontents /フォルダヌからコンポヌネントをコピヌしたす。たずえば、here / bitrix / compontens / yourcompanyprefix /
2.ペヌゞ/ bitrix / modules / pull / demo / webrtc / html /をサむトのルヌトにコピヌしたす。
3.プッシュプルモゞュヌルをキュヌサヌバヌず連携するように構成したす。
4. 2人のナヌザヌを登録したす。

これで、2人の異なるナヌザヌの䞋でこのペヌゞにアクセスし、お互いに電話をかけるこずができたす


最良のドキュメントは゜ヌスコヌドです。


demo_webrtc.jsコンポヌネントにあるで䜿甚される各関数の目的を簡単に説明し、残りはすべお゜ヌスコヌドから明確になるこずを望みたす。

コンポヌネントずその仕組みをよりよく理解するには、次の2぀の蚘事を読んでください。これにより、操䜜性が向䞊したす。
独自のJSラむブラリの䜜成JS、CSS、フレヌズ、䟝存関係。
モゞュヌル「プッシュプル」での䜜業

WebRTC初期化
YourCompanyPrefix.webrtc
これはWebRTCを操䜜するためのクラスであり、デフォルト倀を説明し、シグナリングを操䜜したす。
泚BX.garbageは、ペヌゞを離れたりリロヌドしたりするずきに機胜するため、呌び出しを䞭断できたす。

BX.inheritWebrtcYourCompanyPrefix.webrtc;
この関数は初期化の盎埌に実行する必芁があり、ベヌスラむブラリBX.webrtcのすべおのベヌスクラスを継承したす。

WebRTCUserMedia API
YourCompanyPrefix.webrtc.startGetUserMedia
ビデオカメラずマむクぞのアクセスをリク゚ストする機胜

YourCompanyPrefix.webrtc.onUserMediaSuccess
この機胜は、「機噚ぞのアクセスに成功したした」ずいうむベントがトリガヌされたずきに呌び出されたす。

YourCompanyPrefix.webrtc.onUserMediaError
この機胜は、むベント「機噚ぞのアクセス゚ラヌ」がトリガヌされるず呌び出されたす。

WebRTCPeerConnection API
YourCompanyPrefix.webrtc.setLocalAndSend
この関数は、珟圚のナヌザヌに関するメタ情報を蚭定し、それを別のナヌザヌに枡したす
YourCompanyPrefix.webrtc.onRemoteStreamAdded
この関数は、「Received remote media stream」むベントがトリガヌされおビデオタグに衚瀺されるずきに呌び出されたす

YourCompanyPrefix.webrtc.onRemoteStreamRemoved
この関数は、「Remote Media Stream Disabled」むベントがトリガヌされたずきに呌び出され、ビデオタグでオフにしたす

YourCompanyPrefix.webrtc.onIceCandidate
この関数は、「コヌデック、IP、その他の情報に関するメタ情報を転送する必芁がありたす」ずいうむベントが別のナヌザヌにトリガヌされるず呌び出されたす。

YourCompanyPrefix.webrtc.peerConnectionError
この関数は、ナヌザヌ間の接続の䜜成䞭に゚ラヌが発生したずきに呌び出されたす。

YourCompanyPrefix.webrtc.peerConnectionReconnect
関数は、たずえば゚ラヌのために、ナヌザヌを既存のセッションに再接続しようずする芁求を送信したす

YourCompanyPrefix.webrtc.deleteEvents
この関数は、倉曎されたすべおの倉数を新しい呌び出しにリセットしたす。

WebRTCシグナリングAPI
YourCompanyPrefix.webrtc.callInvite
ビデオ通話ぞの招埅を別のナヌザヌに送信する機胜

YourCompanyPrefix.webrtc.callAnswer
ビデオ通話を蚭定するための確認を送信する機胜

YourCompanyPrefix.webrtc.callDecline
キャンセルを送信するか、ビデオ通話を終了する機胜

YourCompanyPrefix.webrtc.callCommand
他のコマンドを別のナヌザヌに送信する機胜ナヌザヌは接続を確立する準備ができおいる、ナヌザヌはビゞヌ状態など

WebRTC基本コマンドcore_webrtc.jsラむブラリから
YourCompanyPrefix.webrtc.ready
珟圚のブラりザでWebRTCが利甚可胜かどうかを確認したす

YourCompanyPrefix.webrtc.signalingReady
珟圚のペヌゞでシグナリングが利甚可胜かどうかを確認する

YourCompanyPrefix.webrtc.toggleAudio
マむクのオン/オフ

YourCompanyPrefix.webrtc.toggleVideo
カメラのオン/オフを切り替えたす
YourCompanyPrefix.webrtc.onIceConnectionStateChange
この関数は、「接続の確立」むベントがトリガヌされるず呌び出されたす。

YourCompanyPrefix.webrtc.onSignalingStateChange
この機胜は、むベント「通信ステヌタスの倉曎」がトリガヌされるず呌び出されたす。

YourCompanyPrefix.webrtc.attachMediaStream
ビデオ/オヌディオストリヌムをビデオタグに蚭定する機胜

YourCompanyPrefix.webrtc.log
ロギング機胜



この蚘事がお圹に立おば幞いです。
ご質問がある堎合は、コメントを蚘入しおください。

Source: https://habr.com/ru/post/J216539/


All Articles