見出し画像

2020-07-26の開発

現役のエンジニアが毎日どんなことを学んで,どんな開発を行っているのか雑にアウトプットしてみる試みの14日目です.

WebRTC の実装

今日は,WebRTC の実装を行っていた.

前に触っていた,Elm でフロント側は実装することにした.

久しぶりで,いろいろ思い出しつつやっていたがやっぱり楽しい.

他のJavaScriptフレームワークとは別物で,たとえばView の設定は以下のように書く.

view : Model -> Browser.Document Msg
view model =
    { title = "WebRTC"
        , body =
        [ Html.h1 [] [ text "WebRTC Sample" ]
         , Html.video [ Html.Attributes.id "localVideo" ] []
         , Html.button [ onClick JoinMeeting ] [ text "Join" ]
         ]
    }

これで,html の title と body タグの中に h1 要素と,video 要素,button 要素を書くことができる.

今日実装できたとことしては,クライアント側のメディア (カメラ) を取得して,video タグに表示するところまで.

  <script>
   const app = Elm.Main.init();

   app.ports.readyForLocalStream.subscribe(async (videoTagId) => {
     const videoTag = document.getElementById(videoTagId);

     const audioConfig = true;
     const videoConfig = { width: 1280, height: 720 };

     let localStream = null;
     try {
       localStream = await navigator.mediaDevices.getUserMedia({ 
         audio: audioConfig,
         video: videoConfig,
       });
     } catch(err) {
       alert(err);
     }

     videoTag.srcObject = localStream;
     videoTag.onloadedmetadata = (e) => {
       videoTag.play();
     }
   });
 </script>

コードは上記のように,WebRTC 周りの実装は,port を通して,JavaScript 側で実装する予定.( port は,JavaScript と,Elm でやり取りするためのInterface )

今日は少ししか実装できなかったが,WebRTCみたいに,実際に動画とか扱うコードを書くのは結構視覚的にも楽しくてよい.

次はPeer同士をマッチングするためのシグナリングサーバーを書いていく予定.

この記事が気に入ったらサポートをしてみませんか?