Я реализую сервис потокового видео с 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)
}
}