code: function start() {
      if (pc.signalingState === 'closed') {
        callback(
          'The peer connection object is in "closed" state. This is most likely due to an invocation of the dispose method before accepting in the dialogue'
        )
      }
  
      if (videoStream && localVideo) {
        self.showLocalVideo()
      }
  
      if (videoStream) {
        pc.addStream(videoStream)
      }
  
      if (audioStream) {
        pc.addStream(audioStream)
      }
  
      // [Hack] https://code.google.com/p/chromium/issues/detail?id=443558
      var browser = parser.getBrowser()
      if (mode === 'sendonly' &&
        (browser.name === 'Chrome' || browser.name === 'Chromium') &&
        browser.major === 39) {
        mode = 'sendrecv'
      }
  
      callback()
    }
docs: This function creates the RTCPeerConnection object taking into account the
  properties received in the constructor. It starts the SDP negotiation
  process: generates the SDP offer and invokes the onsdpoffer callback. This
  callback is expected to send the SDP offer, in order to obtain an SDP
  answer from another peer.