text: var pc = null;
  
  function negotiate() {
      pc.addTransceiver('video', {direction: 'recvonly'});
      pc.addTransceiver('audio', {direction: 'recvonly'});
      return pc.createOffer().then(function(offer) {
          return pc.setLocalDescription(offer);
      }).then(function() {
          // wait for ICE gathering to complete
          return new Promise(function(resolve) {
              if (pc.iceGatheringState === 'complete') {
                  resolve();
              } else {
                  function checkState() {
                      if (pc.iceGatheringState === 'complete') {
                          pc.removeEventListener('icegatheringstatechange', checkState);
                          resolve();
                      }
                  }
                  pc.addEventListener('icegatheringstatechange', checkState);
              }
          });
      }).then(function() {
          var offer = pc.localDescription;
          return fetch('/offer', {
              body: JSON.stringify({
                  sdp: offer.sdp,
                  type: offer.type,
              }),
              headers: {
                  'Content-Type': 'application/json'
              },
              method: 'POST'
          });
      }).then(function(response) {
          return response.json();
      }).then(function(answer) {
          return pc.setRemoteDescription(answer);
      }).catch(function(e) {
          alert(e);
      });
  }
  
  function onLoad() {
      //after page loads, wait the kick of the start routine
      // otherwise the video never loads
      setTimeout(function() {     start(); }, 5000);
  }
  
  function start() {
      var config = {
          sdpSemantics: 'unified-plan'
      };
  
  /*     if (document.getElementById('use-stun').checked) {
          config.iceServers = [{urls: ['stun:stun.l.google.com:19302']}];
      } */
      config.iceServers = [{urls: ['stun:stun.l.google.com:19302']}];
  
      pc = new RTCPeerConnection(config);
  
      // connect audio / video
      pc.addEventListener('track', function(evt) {
          if (evt.track.kind == 'video') {
              document.getElementById('video').srcObject = evt.streams[0];
          } else {
              document.getElementById('audio').srcObject = evt.streams[0];
          }
      });
  
      document.getElementById('start').style.display = 'none';
      negotiate();
      document.getElementById('stop').style.display = 'inline-block';
  }
  
  function stop() {
      document.getElementById('stop').style.display = 'none';
      document.getElementById('start').style.display = 'inline-block';
      
      // close peer connection
      setTimeout(function() {
          pc.close();
      }, 500);
  }
  