javascript - 使用 mediarecorder + mediasource 直播时产生的噪音
问题描述
我尝试使用mediarecorder和mediasource进行直播,视频可以正常播放,但是每一秒都会有噪音。
主机将blob发送到服务器,查看器通过ajax请求blob,然后在mediasource中进行拼接。
navigator.mediaDevices.getUserMedia({
video: {
width: 1920,
height: 1080
},
audio: true
})
.then(function (stream) {
const mediaRecorder = new MediaRecorder(stream, {
mimeType: 'video/webm;codecs=vp8,opus'
});
mediaRecorder.addEventListener("dataavailable", handleDataAvailable);
mediaRecorder.start(1000)
})
function handleDataAvailable(event) {
event.data.arrayBuffer().then((buffer) => {
socket.send(buffer)
})
接收端:</p>
const video = document.getElementById("video")
const mediaSource = new MediaSource();
const url = URL.createObjectURL(mediaSource);
video.src = url;
let start = 0
let sourceBuffer;
mediaSource.addEventListener("sourceopen", function () {
sourceBuffer = mediaSource.addSourceBuffer('video/webm;codecs=vp8,opus')
sourceBuffer.mode = 'sequence'
sourceBuffer.addEventListener("updateend", function () {
getBuffer(start, start + 1)
console.log(video.getVideoPlaybackQuality());
})
getBuffer()
});
const arrayOfBlobs = [];
function getBuffer() {
window.axios({
method: 'GET',
url: 'http://127.0.0.1:3000/buffer',
params: {
start: start,
end: start + 1
},
responseType: 'arraybuffer'
}).then((response) => {
arrayOfBlobs.push(response.data)
appendToSourceBuffer()
start += 1
})
}
function appendToSourceBuffer() {
if (
mediaSource.readyState === "open" &&
sourceBuffer &&
sourceBuffer.updating === false
) {
const buf = arrayOfBlobs.shift()
sourceBuffer.appendBuffer(buf);
}
}
我能做些什么来消除噪音?
解决方案
推荐阅读
- html - 如何对齐这样的框?
- ember.js - 在 ember 上创建组件时。跳过 .js 文件?
- tensorflow - 如何使用冻结推理图来检测图像中的对象?
- c++ - MPI_Gather std::vector: 0 在收集的向量处输出
- authentication - 如何为 ejabberd 网站 (Debian) 注册用户
- java - 为什么每次使用 AWS KMS CMK 加密时都会得到不同的字节?
- oop - 使用派生类型在 Fortran 中定义具有多个加数的运算符(+)。可分配数组的问题
- javascript - Jquery access elements under li tag
- reactjs - 如何在 React Native 中构建可由多个组件访问的单个模态组件?
- haskell - 如何在do块中读取文件