WebRTCブログ第一回

 

はじめまして!OISの自社製品『ReDois』開発担当です。

 

『ReDois』は、WebRTCと呼ばれる技術を利用し、リアルタイム配信を実現しています。

 

 

私からは、このWebRTCに関する情報について発信していこうと思います。

今回は、WebRTCの基本として、P2Pでの接続について解説します。

 

WebRTC公式より公開されているサンプルページを使い、ソースコードの解説も交えながら見ていこうと思います。

ソースコードはこちらになります。

このサンプルページでは、左上から順にボタンを押していけば自分同士でWebRTC接続ができるようになっています。

それぞれのボタンを押したとき、具体的にどのような動作をしているのか掘り下げていきましょう。

 


 

①[Get media]ボタン

最初に、マイクやカメラからストリームを取得し、それを画面に表示します

具体的には、
navigator.mediaDevices.getUserMedia()メソッドでMediaStreamオブジェクトを取得し、これを画面上のvideo要素にセットすることによってマイクやカメラの音声・映像をブラウザ上で再生することができます。

(サンプルページでは、localVideoが示すvideo要素はmuted属性を持っているので音声は再生されません)

 

②[Create peer connection]ボタン

WebRTC接続の要となるオブジェクトである、RTCPeerConnectionオブジェクトを作成します。

今回は自分同士での接続なので、ローカル・リモート共にこの場でRTCPeerConnectionオブジェクトを作成しています。
RTCPeerConnectionオブジェクトを作成する他に、①で取得したMediaStreamオブジェクトからMediaStream.getTracks()メソッドでMediaStreamTrackオブジェクトを取得し、RTCPeerConnection.addTrack()メソッドでこれから送信する音声・映像をセットしています。

 

③[Create offer]ボタン

SDPと呼ばれる文書をoffer側(今回はローカル側)で作成します。SDPについての詳細な説明は今回省きますが、WebRTC接続にはお互いの内部情報をやりとりする必要があり、SDPはそれを表現するプロトコルです。

SDP offerはRTCPeerConnection.createOffer()メソッドで作成します。
ここでは更に、作成したSDPをtextarea要素で表示しています。

 

④[Set offer]ボタン

作成したSDP offerをRTCPeerConnectionオブジェクトにセットします。

ローカル側はRTCPeerConnection.setLocalDescription()、リモート側はRTCPeerConnection.setRemoteDescription()でSDP offerをセットします。
今回は自分同士の接続なので気にしなくてよいのですが、本来リモートはSDP offerを知らないはずなので、SDPを伝達するためにシグナリングサーバーと呼ばれるものが必要になってきます。これについては次回以降で詳しく解説する、かも…?

また、SDP offerをセットした後、リモート側のonTrackイベントが発火します。イベント発火時の処理gotRemoteStream()は②でリモート側に設定しています。

 

onTrackイベントが発火すると、通信相手が送信するMediaStreamオブジェクトの配列を受け取れるので、それをリモート側のvideo要素にセットしています。
ただし、この時点ではWebRTC接続が確立されていないので、セットした音声・映像が再生されることはありません。

 

⑤[Create answer]ボタン

SDPをanswer側(今回はリモート側)で作成します。
offerとanswerについての説明も次回以降をお楽しみに…!!

SDP answerはRTCPeerConnection.createAnswer()メソッドで作成します。
③同様、作成したSDPをtextarea要素で表示しています。

 

⑥[Set answer]ボタン

作成したSDP answerをRTCPeerConnectionオブジェクトにセットします。

ローカル側はRTCPeerConnection.setRemoteDescription()、リモート側はRTCPeerConnection.setLocalDescription()でSDP answerをセットします。
ここまで完了すると後はWebRTCが勝手に接続試行を行ってくれ、成功するとリモート側のvideo要素で音声・映像の再生が始まります。

接続成功!

 

⑦[Hang up]ボタン

WebRTC接続を終了します。

ローカル・リモート共にRTCPeerConnection.close()メソッドでWebRTC接続を閉じます。
お疲れ様でした。

 


 

さて、いかがでしたでしょうか。

単純なP2Pであれば、WebRTCは誰でも簡単に利用することができる優れものです。

今後も『ReDois』やWebRTCについて継続的に発信していきます。

お楽しみに!

 

オリエンタルインフォーメイションサービス(OIS)

前の記事

業務発表会2019

次の記事

月の工数管理の集計