Upgrade to Pro — share decks privately, control downloads, hide ads and more …

細かくて伝わらないWebRTC(APIとか) / Tip for WebRTC (APIs)

iwashi
November 26, 2022

細かくて伝わらないWebRTC(APIとか) / Tip for WebRTC (APIs)

NTT Tech Conference #3(https://ntt-developers.github.io/ntt-tech-conference/03/) にて講演した資料です。

訂正: P.37-39 の見出しは、"DTLSの上"ではなく"SCTPの上"が正解です。

iwashi

November 26, 2022
Tweet

More Decks by iwashi

Other Decks in Technology

Transcript

  1. Copyright © NTT Communications Corporation. All rights reserved. 細かくて伝わらない WebRTC

    (APIとか) NTT Tech Conference #3 NTTコミュニケーションズ 岩瀬 義昌 / @iwashi86 2018.8.31
  2. $ cat chrome_debug.log | grep "AddIceCandidate” [2208:32027:0830/140419.827743: ERROR:peerconnection.cc(2940)] AddIceCandidate: ICE

    candidates can't be added without any remote session description. $ open /Applications/Google\ Chrome.app --args --enable-logging --args --v=1 しておくと、 /Users/XXX/Library/Application Support/Google/Chrome/chrome_debug.log が出力されるので、そこで見れる デバッグログからも見れる
  3. すなわち pc.addIceCandidate()    .then()  .catch() // こっちのルート の後に pc.setRemoteDescription(sdp) すると、ICEが疎通してメディアも通る

    (ちなみに、Firefoxは通らないので正しい。  この実装に依存すると、一方だけ動く辛い戦いに)
  4. DTLSの上にもう1段ある => DCEP ・DCEP  = Data Channel Establishment Protocol ・軽量ネゴシエーションプロトコル

     ・2 Way Handshake  ・OPEN -> ACK だけ  ・DataChannelのネゴシエーションだけ   ・DTLS-SRTPみたいな感じで    実際には最初だけ使われる    
  5. SDPに変更があるかが全て ・SDP的には確立するDataChannelが  いくつ増えようが、交渉済みのSDPの  m=applicationのブロックに変更がないから ・JSEPのI-Dにも規定されている ”All data channels on a

    given PeerConnection share the same SCTP/DTLS association and therefore the same m= section, so subsequent creation of data channels does not have any impact on the JSEP state” 引用: https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-24#section-4.1.5 ・無駄に onnegotiationneeded を期待しないこと
  6. DNS64 + NAT64 の欠点 ・DNS と密結合している仕組み  ・Webブラウジング / EメールはOK ・WebRTCはそうじゃない世界

     ・SDPにのってくる   トランスポートアドレスは   FQDNじゃない(DNSを引かない) a=candidate:1 1 UDP 2130706431 2402:c800:略:fc13:1c8b 実例:
  7. DNS64 + NAT64 の欠点 ・DNS と密結合している仕組み  ・Webブラウジング / EメールはOK ・WebRTCはそうじゃない世界

     ・SDPにのってくる   トランスポートアドレスは   FQDNじゃない(DNSを引かない)  ⇒ DNS64 + NAT64 と WebRTC は    究極的に相性が良いわけじゃない
  8. 参考: https://www.w3.org/2011/04/webrtc/wiki/images/5/5c/WebRTCWG-2018-06-19.pdf Pros / Cons から落とし所を探る ・WebRTC-ICE  ・SDPおよびTransportを分離する  ・DTLS/SRTP じゃなくて

    QUIC も対応 ・ORTC  ・Forkingをサポートしているけど、   まぁ…見なかったことにする ・FlexibleICE / FlexICE  ・UDPホールパンチングも制御できるように  ・実装はかなり大変になるが、デフォルト動作も
  9. 参考: https://www.w3.org/2011/04/webrtc/wiki/images/5/5c/WebRTCWG-2018-06-19.pdf Pros / Cons から落とし所を探る ・WebRTC-ICE  ・SDPおよびTransportを分離する  ・DTLS/SRTP じゃなくて

    QUIC も対応 ・ORTC  ・Forkingをサポートしているけど、   まぁ…見なかったことにする ・FlexibleICE / FlexICE  ・UDPホールパンチングも制御できるように  ・実装はかなり大変になるが、デフォルト動作も ・SLICE  ・ICE自体を全部実装 => 常識的に考えて地獄  ・普通の開発者はライブラリを使う
  10. 参考: https://www.w3.org/2011/04/webrtc/wiki/images/5/5c/WebRTCWG-2018-06-19.pdf Pros / Cons から落とし所を探る ・WebRTC-ICE  ・SDPおよびTransportを分離する  ・DTLS/SRTP じゃなくて

    QUIC も対応 ・ORTC  ・Forkingをサポートしているけど、   まぁ…見なかったことにする ・FlexibleICE / FlexICE  ・UDPホールパンチングも制御できるように  ・実装はかなり大変になるが、デフォルト動作も ・SLICE  ・ICE自体を全部実装 => 常識的に考えて地獄  ・普通の開発者はライブラリを使う