我有一些简单的webRTC代码,使用getUserMedia
来访问用户的麦克风。现在,当我在浏览器中加载该html文件(保存在我的本地主机)时,浏览器不会要求获得麦克风访问权限,因此无法访问。
但是当我在w3schools.com编辑器中运行相同的html时,它要求获得麦克风访问权限,并允许它访问我的麦克风,它工作正常......
为什么这种奇怪的行为?
答案 0 :(得分:5)
当您在文件系统(文件://前缀)下打开html文件时,Chrome会自动阻止getUserMedia权限。您必须在本地运行服务器。
我启动了这样的sinatra服务器:
# server.rb
require 'sinatra'
get '/' do
File.read('index.html')
end
然后放弃它。
$ gem install sinatra
$ ruby server.rb
http://localhost:4567
答案 1 :(得分:2)
由于安全性,Chrome无法打开用户媒体,例如WebCam执行file:/*
文档时。
您可以通过使用--disable-web-security
命令行选项启动chrome来覆盖安全策略。
对于测试,还要检查--use-fake-device-for-media-stream
选项。
N.B。指定命令行选项时,请确保没有运行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
答案 2 :(得分:2)
此行为是由Chrome安全设置引起的。
如果您安装了PHP并且您不想设置Apache或其他更高级的Web服务器,可能最简单的方法是以这种方式运行内部PHP Web服务器(假设您的Web文件位于/ home / user /网/):
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(假设您的测试文件名为webrtc.html):
http://127.0.0.1:3000/webrtc.html
答案 3 :(得分:1)
只是一些故障排除建议:
检查chrome:// settings / content(向下滚动到“Media”),查看您是否意外选择了该网站以始终允许或始终拒绝。 (我在Chrome 26 [dev]上;这可能位于Chrome 24上的其他位置。)
同时尝试重新启动浏览器 - 根据我的经验,这一点Chrome仍然非常错误,有时重启会修复它。
并确保你的getUserMedia()调用中有一个错误处理程序 - 那里可能还有一些额外的信息。
答案 4 :(得分:1)
您是否通过file://加载文件?铬似乎根本无法访问这些文件,完全忽略了请求。只是尝试了自己,并在将文件上传到开发服务器后,它工作正常。
即使将其设置为允许,它仍然无法与file://。
一起使用答案 5 :(得分:1)
如果不使用本地服务器,则无法在本地运行使用getUsermedia API的HTML5。使用WampServer并将HTML5文件放在www文件夹中。
答案 6 :(得分:0)
此答案适用于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)\Google\Chrome\Application\chrome.exe" --allow-file-access-from-files C:\path\to\file.html
希望这个答案有所帮助!