在AngularJs中更改路由后,HTML5摄像头不会关闭
HTML5 camera does not switch off after route change in AngularJs
我正在测试HTML5的视频功能。通过指令userMedia
,我可以通过navigator.getUserMedia()
在MacBook上打开我的相机(实际上是通过适配器使其跨浏览器-至少那些支持它的)。
但是当我换了我的$route
,我再也看不到我自己了(哈),但是相机没有关闭(绿灯一直亮着)。只有刷新页面才会重置所有内容(这是正常的)。
我希望观察$location.path()
的变化会有效果:
link: function(scope, elm, attrs, ctrl) {
...
var path = $location.path();
scope.$watch(function() {
return $location.path();
}, function(value) {
if (value && value !== path) {
$log.info('Location changed, switching off camera');
webRTCAdapter.detachMediaStream(elm[0]);
}
}, true);
}
detachMediaStream(铬):
webRTCAdapter.detachMediaStream = function(element) {
console.log("Detaching media stream");
element.pause();
element.src = '';
element.parentNode.removeChild(element);
};
Html: <video id="localVideo" width="100%" autoplay="autoplay" user-media="user-media"></video>
detachMediaStream
被执行(我在console.log
中看到必要的日志),但相机没有关闭。
知道如何解决这个问题吗?我应该卸载这个元素吗?
我找到了问题的原因。当相机打开时创建的LocalMediaStream
需要使用stop()
功能来停止。
当将创建的LocalMediaStream
对象附加到video元素时,必须保留对它的引用:
controller: function($element) {
var self = this;
self.onUserMediaSuccess = function(stream) {
$log.info("User has granted access to local media.");
webRTCAdapter.attachMediaStream($element[0], stream);
// keep a reference
self.localStream = stream;
};
当$destroy
事件发生时,这个LocalMediaStream
引用必须添加到detachMediaStream
函数中(感谢您,Joseph Silber):
scope.$on('$destroy', function() {
$log.info('Location changed, switching off camera');
webRTCAdapter.detachMediaStream( elm[0], ctrl.localStream);
});
在LocalMediaStream
对象上我需要执行stop()
函数:
webRTCAdapter.detachMediaStream = function(element, stream) {
console.log("Detaching media stream");
element.pause();
element.src = '';
element.parentNode.removeChild(element);
// stopping stream (camera, ...)
stream.stop();
};
在Firefox中,我们已经支持元素。mozSrcObject =流(成为元素)。srcObject,以及Chrome应该很快,虽然我不知道他们是否会前缀它暂时)。这使得它更容易处理,因为您不需要保持对它的第二个引用。(element.mozSrcObject.stop ();元素。mozSrcObject = null)
相关文章:
- HTML5摄像头可以拉伸图片
- 通过HTML5或JavaScript启动Android手机前置摄像头
- 如何使用来自 IP 网络摄像头应用程序的 jpeg 流作为 html5 视频标签中的 src
- HTML5 localMediaStream停止功能未释放网络摄像头/硬件
- HTML5视频摄像头匹配分辨率
- 没有Flash或Silverlight的HTML5网络摄像头
- 我如何保持HTML5摄像头旋转直立在网站上的平板电脑
- HTML5镜像网络摄像头画布
- html5 getUserMedia Api停止摄像头按钮不工作
- 如何从HTML5访问网络摄像头
- HTML5网络摄像头流不知怎么的坏了
- 在 iOS 和 Android 上对视频严格使用 HTML5 输入字段时,如何默认使用前置摄像头
- 使用html5的网络摄像头拍摄一张照片
- ([javaScript]在iOS中通过HTML5浏览器访问摄像头
- 我如何在html5的设备上呈现摄像头和麦克风
- 尝试在html5中访问网络摄像头:Firefox工作,Chrome和Opera don't
- 无法在第一页加载时使用HTML5和Google Chrome中的getUserMedia()从网络摄像头拍摄照片
- HTML5网络摄像头捕获显示图片
- 仅使用 javascript/html5 获取麦克风/网络摄像头记录流
- 在AngularJs中更改路由后,HTML5摄像头不会关闭