Javascript 为什么是';mediaDevices.getUserMedia';与其他浏览器相比,ios safari的速度慢吗?

Javascript 为什么是';mediaDevices.getUserMedia';与其他浏览器相比,ios safari的速度慢吗?,javascript,html,mobile-safari,getusermedia,mediadevices,Javascript,Html,Mobile Safari,Getusermedia,Mediadevices,我正在开发一个web应用程序,它记录用户的语音输入。出于某些原因,在ios safari上,通过mediaDevices.getUsearMedia获取用于录制的媒体流需要花费很多时间。我创建了以下测试页面来测量不同浏览器之间的时间延迟。如果有人能深入了解这一点,我将不胜感激 IOS safari-600至800毫秒 Chrome桌面-4毫秒 Chrome Android-40到60毫秒 <!DOCTYPE html> <html> <body> <

我正在开发一个web应用程序,它记录用户的语音输入。出于某些原因,在ios safari上,通过mediaDevices.getUsearMedia获取用于录制的媒体流需要花费很多时间。我创建了以下测试页面来测量不同浏览器之间的时间延迟。如果有人能深入了解这一点,我将不胜感激

IOS safari-600至800毫秒

Chrome桌面-4毫秒

Chrome Android-40到60毫秒

<!DOCTYPE html>
<html>
<body>

 <h1 style="margin: 100px">get user media time test</h1>
 <div width="300px" height="300px" style="margin: 100px">
     <button id="btn" style="height:100px; width:250px; font-size:25px;">call getUserMedia</button>
 </div>

 <script>
    var btn = document.getElementById("btn");
    btn.onclick = myFunction;                

    function myFunction() {
    var time1 = new Date().getTime();
    navigator.mediaDevices.getUserMedia({ video:false ,audio: true})
        .then(function(stream) {
            var time2 = new Date().getTime();
            var diff = time2-time1;
            console.log("delay "+ diff + "ms") 
        })
        .catch(function(err) {
            console.log('Error gettingUserMedia: %s', err);
        });
    }   
 </script>

</body>
</html>

获取用户媒体时间测试
调用getUserMedia
var btn=document.getElementById(“btn”);
btn.onclick=myFunction;
函数myFunction(){
var time1=新日期().getTime();
navigator.mediaDevices.getUserMedia({video:false,audio:true})
.then(函数(流){
var time2=新日期().getTime();
var diff=时间2-1;
控制台日志(“延迟”+diff+“毫秒”)
})
.catch(函数(err){
console.log('Error gettingUserMedia:%s',err);
});
}   

每个浏览器以完全不同的方式实现
getUserMedia
。请记住,
getUserMedia
是一个非常复杂的操作,但在比较每个浏览器的响应时间时,存在细微的时间差异是可以理解的

getUserMedia
实际上做的是:

访问权限设置► 检查特定站点的权限► 提示用户批准(如有必要)► 访问硬件► 建模
元素► 回拨

这些步骤中的每一个都是由每个浏览器的开发人员实现的。微小的实施更改可能会导致较小的响应时间间隔


同时请记住,虽然谷歌Chrome更宽容,但iOS在用户隐私方面有严格的政策,这会导致更高的响应时间。

感谢Koby的回复。我们是否需要在每次录制时调用getUserMedia?。我的意思是,我们可以第一次将音频流保存在一个对象中,然后在下次使用它,而不调用getUserMedia吗?…是的。您可以将流设置为变量。