我使用以下JavaScript代码打开了一个网络摄像头: navigator.getUserMedia
是否有任何JavaScript代码可以停止或关闭网络摄像头?感谢大家.
我正在开发一个实时媒体浏览/回放应用程序,它使用<video>浏览器中的对象进行回放(如果可用).
我正在使用直接javascript和jQuery的混合,
我关心的是记忆.应用程序永远不会在窗口中重新加载,并且用户可以观看许多视频,因此随着时间的推移,内存管理成为一个大问题.在今天的测试中,我看到内存配置文件按照每个后续加载流式传输的视频大小跳跃,并且永远不会回落到基线.
我尝试了以下相同的结果:
1 - 清空包含已创建元素的父容器,例如:
$(container_selector).empty();
Run Code Online (Sandbox Code Playgroud)
2 - 暂停并删除匹配"视频"的子项,然后清空父容器:
$(container_selector).children().filter("video").each(function(){
this.pause();
$(this).remove();
});
$(container_selector).empty();
Run Code Online (Sandbox Code Playgroud)
有没有其他人遇到这个问题,有没有更好的方法来做到这一点?
我正在测试HTML5的视频功能.通过指令userMedia,我可以通过我的MacBook上的相机开启navigator.getUserMedia()(实际上通过适配器使其跨浏览器 - 至少是那些支持它的人).
但是当我改变我的时候$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);
}
Run Code Online (Sandbox Code Playgroud)
detachMediaStream(Chrome):
webRTCAdapter.detachMediaStream = function(element) {
console.log("Detaching media stream");
element.pause();
element.src = '';
element.parentNode.removeChild(element);
};
Run Code Online (Sandbox Code Playgroud)
HTML:
<video id="localVideo" width="100%" autoplay="autoplay" user-media="user-media"></video>
Run Code Online (Sandbox Code Playgroud)
detachMediaStream执行(我看到必要的登录console.log),但相机没有关闭.
不知道怎么解决这个问题?我应该以某种方式卸载元素吗?
html5 ×3
javascript ×3
angularjs ×1
camera ×1
dom ×1
html5-video ×1
jquery ×1
video ×1
webrtc ×1