这段代码确实有效。每 300 毫秒就会将一块音频数据发送到服务器并返回到套接字空间中的客户端进行播放。只有一个问题。音频质量极差。每 300 秒的间隔就会有一阵短暂的静电噪音,但几乎立即消失。我相信这是因为音频块发送到服务器和返回到房间中的套接字之间的时间间隔。我没有使用像socket io p2p或peerjs这样的webRTC,因为它们真的很复杂,而且我是初学者,所以在这段代码中我可以做些什么来更流畅地播放音频吗?我尝试过不同的操作,例如将 setInterval 函数中的毫秒数更改为 60 并提高到 5000。间隔越低,播放越不稳定,但播放速度越快,但越高,质量越好,但有 5 秒的延迟。
客户:
var constraints = { audio: true };
navigator.mediaDevices.getUserMedia(constraints).then(function(mediaStream) {
var mediaRecorder = new MediaRecorder(mediaStream);
mediaRecorder.onstart = function(e) {
this.chunks = [];
};
mediaRecorder.ondataavailable = function(e) {
this.chunks.push(e.data);
};
mediaRecorder.onstop = function(e) {
var blob = new Blob(this.chunks);
var url = <%- JSON.stringify(url) %>;
socket.emit('radio', {blob : blob, url : url});
};
mediaRecorder.start();
setInterval(function() {
mediaRecorder.stop()
mediaRecorder.start();
}, 300);
});
socket.on('voice', function(arrayBuffer) {
var blob = …Run Code Online (Sandbox Code Playgroud) 我编写的游戏的性能一直存在很大的问题。出于某种原因,游戏时口吃,似乎要么绘制同一帧两次,要么跳过该帧的绘制。正如您在图像中看到的那样,由于某种原因,当发生这种“抽动/停顿”时,FPS下降到30,帧时间是原来的两倍。这些口吃非常频繁,每1-5秒发生一次。我已经测试了内存泄漏,没有异常,测试了垃圾回收,没有异常。在update()函数中使用requestAnimationFrame调用它们。这是一个jsfiddle我放在一起。只需右键单击输出,转到时间轴和配置文件20秒钟。您会看到FPS随机下降到30。在小提琴上,大多数代码来自我添加的外部文件,因此对该问题并不重要。我在579行添加了一行,以显示重要代码的起始位置。导致此问题的两个函数是moveAllGameRectangles();。renderTheGameObjects(); 在线上,小提琴上是1180和1098。如果您可以看一下这两个功能,并告诉我是否看到可以改善性能的任何东西,那就太好了。我出于测试目的删除了碰撞检测。我几个月来一直遇到这个问题,所以任何帮助都将非常巨大!
(function() {
var c = document.querySelector("canvas");
var ds = c.getContext("2d");
c.width = window.innerWidth;
c.height = window.innerHeight;
var theMaxWidth = c.width / 4.5;
if (c.height === 1743 || c.height === 1744 || c.height === 1740) {
var gameVelocity = 60;
} else {
var gameVelocity = 70;
}
var so = Math.round(c.height / gameVelocity + 65);
var halfVelocity = gameVelocity * 4;
var halfVelocityModulus = gameVelocity * 2;
var modulusNumber = 17;
var OPENING = 0
var …Run Code Online (Sandbox Code Playgroud)