Длительность записанного файла WebRTC - PullRequest
0 голосов
/ 05 сентября 2018

Я реализую сервис потокового видео с WebRTC сигнализацией WebSockets-Server. Это электронное приложение. Я хочу записать несколько видеофрагментов и получить веб-файл для загрузки. Он работает нормально, если я записываю локальный поток (из navigator.mediaDevices.getUserMedia), но если я попытаюсь записать удаленный поток, это будет видеофайл, созданный с длительностью <1 сек, эта проблема только в Chrome (и электронном ) в Firefox работает нормально. Если я вызываю console.log (blob) в stopRecording (), это выглядит примерно так: </p>

Blob(1875185) {size: 1875185, type: "video/webm"}

Таким образом, размер BLOB-объекта является правильным, и после загрузки размер файла также является правильным, что в этом случае?

class WebRTC {

   ...........
  constructor () {
    navigator.mediaDevices.getUserMedia({
      'audio': true,
      'video': false
    }).then(
      (stream) => {
        this.peerConnection = new RTCPeerConnection(peerConnectionConfig)
        this.peerConnection.addEventListener('addstream', event => this.gotRemoteMediaStream(event))
        this.peerConnection.addEventListener('icecandidate', e => this.handleConnection(e))
        this.peerConnection.addStream(stream)
      }
    ).catch(e => console.log('error', e))
  }

  gotRemoteMediaStream (event) {
    console.log(event)
    const mediaStream = event.stream
    this.video.srcObject = mediaStream
    this.video.play()
    this.remoteStream = mediaStream
    console.log('Remote peer connection received remote stream.')
  }


  startRecording () {
    console.log('RECORD')
    this.recorder = new MediaRecorder(this.remoteStream)
    this.recorder.addEventListener('dataavailable', e => this.onRecordingReady(e))
    this.recorder.start(15)
  }

  onRecordingReady (e) {
    console.log(e)
    this.chunks.push(e.data)
  }

  stopRecording () {
    this.recorder.stop()
    var a = document.createElement('a')
    document.body.appendChild(a)
    a.style = 'display: none'
    a.download = 'test.webm'

    setTimeout(() => {
      console.log(this)
      var blob = new Blob(this.chunks, { type: 'video/webm' })
      console.log(this.chunks)
      console.log(blob)
      let url = URL.createObjectURL(blob)
      a.href = url
      a.click()
      window.URL.revokeObjectURL(url)
    }, 500)
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...