브라우저의 BroadcastChannel을 사용한 시그널링

소개



이것은 WebRTC 입문자 LT회 #2의 발표 자료입니다.

자기소개



  • @massie_g/가네코 마사시
  • 인포콤 주식회사 소속
  • WebRTC Meetup Tokyo 직원
  • WebRTC Beginners Tokyo 직원


  • WebRTC에 필수적인 시그널링


  • WebRTC에서는 SDP 또는 ICE candidate를 교환하는 "시그널링"이 필수적입니다.
  • 실험이나 화면 프로토 타입에서는 가능한 한 쉽게 만들고 싶습니다.
  • 가능하면 시그널링 서버를 설정하지 않고하고 싶습니다


  • 일대일의 경우




  • 핸즈온 Step2과 같이 수동 시그널링 가능

  • 하지만 여러 사람의 경우는?


  • 수동으로 힘들
  • → 보통은 시그널링 서버를 준비


  • 시그널링 서버



    여러 사람, 싱글룸의 경우


  • WebScoket에 의한 시그널링이 정평

  • 핸즈온 Step3




  • 복수인, 복수 룸의 경우(1)





    복수인, 복수 룸의 경우(2)


  • WebSocket에 스스로 룸 기능을 추가하는 것도 하나의 손
  • Socket.io를 사용하면, 복수 룸의 시그널링이 만들기 쉽다
  • 시그널링을 확장하여 여러 사람이 통신하자 - WebRTC 입문 2016


  • FirebaseMilkcocoa과 같은 실시간 통신 서비스를 사용할 수도 있습니다.
  • Firebase로 손쉽게 시그널링──WebRTC 입문 2016번 외편
  • WebRTC 시그널링 over milkcocoa


  • ※하지만 더 쉽게하고 싶다!

    그래서 BroadcastChannel



    BroadcastChannel이란?


  • Chrome, Firefox에서 사용 가능
  • 동일한 컴퓨터의 Window/Tab/Frame/iframe/Web Worker간에 메시지 교환
  • 같은 오리진 동지로, 교환 가능


  • MDN의 Broadcast Channel API 설명 부터 인용



    ※BroadcastChannel에 대해서는 ㅎㅎ씨에게 가르쳐 주셨습니다. 정말 고마워요!

    BroadcastChannel 사용법


    // 接続
    let channelName = 'myroom';
    let broadcast = new BroadcastChannel(channelName);
    
    // メッセージのハンドリング
    broadcast.onmessage = function(evt) {
      let messageObject = JSON.parse(evt.data);
    
      // ... メッセージに応じた処理 ...
    }
    
    // メッセージの送信
    let messageString = JSON.stringify(messageObject);
    broadcast.postMessage(messageString );
    
    // 切断
    broadcast.close();
    

    데모


  • GitHub 페이지에서 사용해보기
  • htps : // m이 고양이. 기주 b. 이오 / ぇ brtse xpjp / 바시 c2016 / 뭉치_bc. HTML? 로오 m1
  • htps : // m이 고양이. 기주 b. 이오 / ぇ brtse xpjp / 바시 c2016 / 뭉치_bc. HTML? 로오 m2

  • GitHub에서 소스 보기
  • htps : // 기주 b. 이 m / m이 고양이 / ぇ brt xpjp / b ぉ b /까지 r / 가시 c2016 / 뭉치_bc. HTML



  • BroadcastChannel을 시그널링에 사용하는 경우의 주의


  • 같은 채널(룸)에 접속하고 있는 상대 모두에게 메세지가 닿는다.
  • 특정 상대에게만 전달할 수 없다

  • 시그널링은, 상대마다 다른 내용의 SDP/ICE Candidate를 교환해야 한다
  • 특정 상대만 구별하여 보내고 싶습니다

  • 대책
  • Window/Tab 마다 독특한 ID를 흔들다
  • 이번에는 uuid 을 이용

  • 메시지에 ID를 포함하여 보내기
  • from (발신자) ... 자신의 ID
  • to (대상) ... 상대방 ID

  • 메시지를 받으면 자신이 아닌 ID로 보내면 무시합니다


  • ※다른 실시간 메시지 서비스를 사용하는 경우에도 같은 대책이 필요

    특정 사용자에게 보내는 메시지





    모두에게 보내는 메시지도 있습니다.





    참고: 여러 상대에게는 여러 PeerConnection







    참고: 여러 상대에게는 개별 SDP





    요약


  • 간편하게 WebRTC 시그널링을 시도하려면 BroadcastChannel이 편리합니다
  • 일대일 뿐만 아니라 점점 여러 명의 앱의 프로토를 만들자
  • 그리고, 이번과 같은 LT에서의 발표를 기다리고 있습니다!

  • 좋은 웹페이지 즐겨찾기