github.com/pion/webrtc/v4@v4.0.1/examples/trickle-ice/index.html (about)

     1  <html>
     2    <!--
     3  		SPDX-FileCopyrightText: 2023 The Pion community <https://pion.ly>
     4  		SPDX-License-Identifier: MIT
     5  	-->
     6    <head>
     7      <title>trickle-ice</title>
     8    </head>
     9  
    10    <body>
    11      <h3> ICE Connection States </h3>
    12      <div id="iceConnectionStates"></div> <br />
    13  
    14      <h3> Inbound DataChannel Messages </h3>
    15      <div id="inboundDataChannelMessages"></div>
    16    </body>
    17  
    18    <script>
    19      const socket = new WebSocket(`ws://${window.location.host}/websocket`)
    20      let pc = new RTCPeerConnection({
    21        iceServers: [
    22          {
    23            urls: 'stun:stun.l.google.com:19302'
    24          }
    25        ]
    26      })
    27  
    28      socket.onmessage = e => {
    29        let msg = JSON.parse(e.data)
    30        if (!msg) {
    31          return console.log('failed to parse msg')
    32        }
    33  
    34        if (msg.candidate) {
    35          pc.addIceCandidate(msg)
    36        } else {
    37          pc.setRemoteDescription(msg)
    38        }
    39      }
    40  
    41      let dc = pc.createDataChannel('data')
    42      dc.onmessage = event => {
    43        let el = document.createElement('p')
    44        el.appendChild(document.createTextNode(event.data))
    45  
    46        document.getElementById('inboundDataChannelMessages').appendChild(el);
    47      }
    48  
    49      pc.onicecandidate = e => {
    50        if (e.candidate && e.candidate.candidate !== "") {
    51          socket.send(JSON.stringify(e.candidate))
    52        }
    53      }
    54  
    55      pc.oniceconnectionstatechange = () => {
    56        let el = document.createElement('p')
    57        el.appendChild(document.createTextNode(pc.iceConnectionState))
    58  
    59        document.getElementById('iceConnectionStates').appendChild(el);
    60      }
    61  
    62      socket.onopen = () => {
    63        pc.createOffer().then(offer => {
    64          pc.setLocalDescription(offer)
    65          socket.send(JSON.stringify(offer))
    66        })
    67      }
    68    </script>
    69  </html>