我有一些简单的webRTC代码,它使用getUserMedia
来访问用户的麦克风。现在,当我在浏览器中加载html文件(保存在我的localhost)时,浏览器不要求mic访问权限,因此无法访问。
但是当我在w3schools.com编辑器中运行相同的html时,它要求麦克风访问权限,并允许它访问我的麦克风,它工作得很好…
为什么这种奇怪的行为?
当你打开一个html文件right off文件系统(file://prefix), Chrome将自动阻止getUserMedia权限。你必须在本地运行服务器。
我启动了一个sinatra服务器,像这样:
# server.rb
require 'sinatra'
get '/' do
File.read('index.html')
end
那就给我吧。
$ gem install sinatra
$ ruby server.rb
http://localhost:4567
由于安全原因,Chrome在执行file:/*
文档时不会打开用户媒体,例如WebCam。
您可以通过使用--disable-web-security
命令行选项启动chrome来覆盖安全策略。
对于测试,也检查--use-fake-device-for-media-stream
选项。
注意:当指定命令行选项时,确保没有chrome/chromium进程正在运行。 P。S试着创建一个包含
的文件test.html
<!DOCTYPE HTML>
<video autoplay/>
<script>
navigator.webkitGetUserMedia({audio:true,video:true},
function(stream){
document.querySelector('video').src =
URL.createObjectURL(stream);
});
</script>
然后杀死所有的chrome实例,然后像这样启动chrome:
chrome.exe --use-fake-device-for-media-stream --disable-web-security test.html
此行为是由Chrome浏览器的安全设置引起的。
如果你已经安装了PHP,你不想安装Apache或其他更高级的web服务器,可能最简单的方法是这样运行内部PHP web服务器(假设你的web文件在/home/user/web/):
php -S 127.0.0.1:3000 -t /home/user/web/
下面是参数的描述:
-S <addr>:<port> Run with built-in web server.
-t <docroot> Specify document root <docroot> for built-in web server.
运行服务器后,启动浏览器并打开此URL(假设您的测试文件名为webtc .html):
http://127.0.0.1:3000/webrtc.html
只是一些故障排除建议:
-
检查chrome://设置/内容(向下滚动到"媒体"),看看你是否不小心选择了该网站始终允许或始终拒绝。(我在Chrome 26[dev];这可能位于Chrome 24的其他地方)
-
也尝试重新启动浏览器-这一点Chrome仍然是相当多的错误,在我的经验,有时重新启动修复它。
-
并且确保在getUserMedia()调用中有一个错误处理程序-那里可能有一些额外的信息。
是否通过file://加载文件?似乎chromium根本不允许访问这些文件,并且完全忽略了请求。我自己试了一下,上传文件到开发服务器后,它工作得很好。
即使将其设置为允许总是它仍然不起作用的文件://
如果不使用本地服务器,就不能在本地运行使用getUsermedia API的HTML5。使用WampServer并将HTML5文件放在www文件夹中。
这个答案是chrome
在Chrome中,您可以使用--allow-file-access-from-files
标志来允许从本地文件访问网络摄像头。
在mac上,你可以打开终端并输入:
/Applications/Google Chrome.app/Contents/MacOS/Google Chrome --allow-file-access-from-files /path/to/file.html
将/path/to/file.html
更改为您的路径
在Windows中,您可以创建快捷方式。右键单击Google Chrome并在菜单中选择:Copy To -> Desktop (shortcut)
,然后右键单击快捷方式并单击properties
添加标志:
"C:Program Files (x86)GoogleChromeApplicationchrome.exe" --allow-file-access-from-files C:pathtofile.html
希望这个答案有帮助!