Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript stream.addTrack在Firefox中工作,但在Chrome中不工作_Javascript_Html5 Canvas_Webrtc_Web Audio Api_Mediastream - Fatal编程技术网

Javascript stream.addTrack在Firefox中工作,但在Chrome中不工作

Javascript stream.addTrack在Firefox中工作,但在Chrome中不工作,javascript,html5-canvas,webrtc,web-audio-api,mediastream,Javascript,Html5 Canvas,Webrtc,Web Audio Api,Mediastream,我在为我兄弟的公司做一个项目,我遇到了一个问题,我想看看有没有人对如何解决这个问题有什么想法 该公司为公司活动、非营利组织等举办虚拟会议,人们需要用powerpoint幻灯片预先录制演示文稿,这与这些会议很相似。对于不懂技术的客户(大多数是他们的客户),实现这一点的唯一方法是雇佣一名承包商与客户一对一合作,录制他们的视频。我的目标是建立一个客户可以自己轻松录制视频和幻灯片的网站,这将大大降低他们的成本 这仍然是一项正在进行的工作,但到目前为止,我一直住在这里: 问题是,虽然录制功能在Firefo

我在为我兄弟的公司做一个项目,我遇到了一个问题,我想看看有没有人对如何解决这个问题有什么想法

该公司为公司活动、非营利组织等举办虚拟会议,人们需要用powerpoint幻灯片预先录制演示文稿,这与这些会议很相似。对于不懂技术的客户(大多数是他们的客户),实现这一点的唯一方法是雇佣一名承包商与客户一对一合作,录制他们的视频。我的目标是建立一个客户可以自己轻松录制视频和幻灯片的网站,这将大大降低他们的成本

这仍然是一项正在进行的工作,但到目前为止,我一直住在这里:

问题是,虽然录制功能在Firefox上运行得很好,但在Chrome上它总是没有音频。您可以在live站点上看到完整的源代码,但以下是我认为应该是相关部分的内容:

const video = document.createElement("video");
video.muted = true;
video.srcObject = stream;
video.play();
function update() {
ctx.drawImage(video, 300, 0, 720, 720, 1547, 297, 357, 355);
ctx.drawImage(
presentationCanvas,
0,
0,
presentationCanvas.width,
presentationCanvas.height,
20,
125,
presentationCanvas.width * 0.754,
presentationCanvas.height * 0.745
);
requestAnimationFrame(update); // wait for the browser to be ready to present another animation fram.
}
video.addEventListener("loadeddata", function () {
update(); //Start rendering
});
/* RECORDING */
const recStream = canvas.captureStream(30);
var audioCtx = new AudioContext();
// create a stream from our AudioContext
var dest = audioCtx.createMediaStreamDestination();
audioStream = dest.stream;
// connect our video element's output to the stream
var sourceNode = audioCtx.createMediaElementSource(video);
sourceNode.connect(dest);
recStream.addTrack(audioStream.getAudioTracks()[0]);

周末的大部分时间,我都在谷歌上搜索和修补,试图修复这个问题,并在3台不同的机器上进行了测试,但我似乎什么也做不到。我不知道如何准确地指出哪里出了问题,因为控制台没有显示任何错误。任何想法都将不胜感激。谢谢

这是Chrome中的一个已知缺陷/限制,它们不再将静音媒体元素的音频流传递给图形

幸运的是,在您的情况下,您似乎完全不需要通过MediaElement,因为您可以访问原始MediaStream。所以,你所要做的就是完全摆脱AudioContext部分,然后

stream.getAudioTracks().forEach( (track) => recStream.addTrack( track ) );

成功了!非常感谢。我希望我遇到的每一个bug都能这么容易修复,哈哈。再次感谢!