rtc-examples 0.9.0

Examples of WebRTC.rs stack with SansIO RTC API
Documentation
<html>
  <!--
		SPDX-FileCopyrightText: 2023 The Pion community <https://pion.ly>
		SPDX-License-Identifier: MIT
	-->
  <head>
    <title>ice-tcp</title>
  </head>

  <body>
    <h1>ICE TCP</h1>

    <h3> ICE Connection States </h3>
    <div id="iceConnectionStates"></div> <br />

    <h3> Inbound DataChannel Messages </h3>
    <div id="inboundDataChannelMessages"></div>
  </body>

  <script>
    let pc = new RTCPeerConnection()
    let dc = pc.createDataChannel('data')

    dc.onmessage = event => {
      let el = document.createElement('p')
      el.appendChild(document.createTextNode(event.data))

      document.getElementById('inboundDataChannelMessages').appendChild(el);
    }

    pc.oniceconnectionstatechange = () => {
      let el = document.createElement('p')
      el.appendChild(document.createTextNode(pc.iceConnectionState))

      document.getElementById('iceConnectionStates').appendChild(el);
    }

    // Wait for ICE gathering to complete before sending offer (non-trickle ICE)
    // Use onicecandidate with null to detect gathering complete
    pc.onicecandidate = event => {
      if (event.candidate === null) {
        // ICE gathering complete - send the offer with all candidates
        console.log('ICE gathering complete, sending offer:', pc.localDescription.sdp);

        fetch(`/doSignaling`, {
          method: 'post',
          headers: {
            'Accept': 'application/json, text/plain, */*',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify(pc.localDescription)
        })
        .then(res => res.json())
        .then(res => {
          console.log('Received answer:', res.sdp);
          pc.setRemoteDescription(res)
        })
        .catch(alert)
      } else {
        console.log('ICE candidate gathered:', event.candidate.candidate);
      }
    }

    pc.createOffer()
      .then(offer => pc.setLocalDescription(offer))
      .catch(alert)
  </script>
</html>