HTML5相机不能在Tomcat7中工作
问题描述:
我有一个angular2项目,我添加了一个html5相机访问。 我开始使用角度CLI(ng服务)我的angular2项目 这将以“ng服务”Web容器在测试开始。 当我访问摄像机时,浏览器询问我是否要访问摄像机。 允许浏览器访问摄像机后一切正常。HTML5相机不能在Tomcat7中工作
private showCam() {
this.showCamScreen = true;
// 1. Casting necessary because TypeScript doesn't
// know object Type 'navigator';
const nav = <any>navigator;
// 2. Adjust for all browsers
nav.getUserMedia = nav.getUserMedia || nav.mozGetUserMedia || nav.webkitGetUserMedia;
// 3. Trigger lifecycle tick (ugly, but works - see (better) Promise example below)
setTimeout(() => { }, 100);
// 4. Get stream from webcam
nav.getUserMedia(
{ video: { width: 1280, height: 720 } },
(stream) => {
const webcamUrl = URL.createObjectURL(stream);
// 4a. Tell Angular the stream comes from a trusted source
this.videosrc = this.sanitizer.bypassSecurityTrustUrl(webcamUrl);
// 4b. Start video element to stream automatically from webcam.
this.element.nativeElement.querySelector('video').autoplay = true;
},
(err) => console.log(err));
// OR: other method, see http://stackoverflow.com/questions/32645724/angular2-cant-set-video-src-from-navigator-getusermedia for credits
const promise = new Promise<string>((resolve, reject) => {
nav.getUserMedia({ video: true }, (stream) => {
resolve(stream);
}, (err) => reject(err));
}).then((stream) => {
const webcamUrl = URL.createObjectURL(stream);
this.videosrc = this.sanitizer.bypassSecurityTrustResourceUrl(webcamUrl);
// for example: type logic here to send stream to your server and (re)distribute to
// other connected clients.
}).catch((error) => {
console.log(error);
});
}
如果我的代码复制到我们使用的是Tomcat7 Web容器的目标enviorment,web浏览器是不是问我访问摄像机?在那里我用“t00-lhoist01:8083/GF”访问应用程序。为什么相机不能在tomcat上工作,但如果我使用的是AngularCLI容器,它工作正常吗?
任何人都可以帮助我们解决这个问题吗?我错过了什么吗?
答
我找到了解决方案。问题是,如果chrome不是https连接,它不会要求访问摄像机。如果您使用本地主机进行操作,则浏览器会要求访问摄像机,即使它不是https连接。
请记住,IE,Chrome或Firefox的行为有所不同。
例如,Firefox会要求通过http连接访问摄像机,但是无法保存您的决定。
Regards
此代码将在浏览器中运行,所以我不认为我应该受到你用来提供文件的服务器的影响。尝试查看在tomcat容器中运行时您在浏览器中获得的代码 – ricky
您没错,我找到了解决方案 –