Html5中的 video标签 无法关闭摄像头

html5中的video这个标签是引入视频的,通过navigator.getUserMedia去获取摄像头的视频流

所以在事件里用关闭的代码都不能执行关闭摄像头,只有关闭网页,摄像头才关闭。


需求:不关闭网页,实现摄像头关闭

暂时的解决办法:

beforeRouteLeave (to, from, next) {
    this.$router.go(-1);  //刷新路由
}

第二种解决办法:

this.mediaStreamTrack && this.mediaStreamTrack.stop();

http://www.cnblogs.com/imwtr/p/6413595.html

 


调用摄像头,拍照代码:

<!DOCTYPE html> 
<html>  
  <head>  
    <meta charset="UTF-8">  
    <title></title>  
    <style>
      #canvas,#video {
        float: left;  
        margin-right: 10px;  
        background: #fff;  
      }      
      .box {  
        overflow: hidden;  
        margin-bottom: 10px;  
      }
    </style>
  </head>  
  <body>  
    <!--video用于显示媒体设备的视频流,自动播放-->
<video id="video"  controls="controls" autoplay style="width: 480px;height: 320px"></video>
<!--拍照按钮-->
<div>
<button id="capture">拍照</button>
<button id="guanbi">拍照</button>
</div>
<!--描绘video截图-->
<canvas id="canvas" width="480" height="320"></canvas>

    <script>  
  //访问用户媒体设备的兼容方法
    function getUserMedia(constrains,success,error){
	  //debugger
        if(navigator.mediaDevices.getUserMedia){
            //最新标准API
            navigator.mediaDevices.getUserMedia(constrains).then(success);
        } else if (navigator.webkitGetUserMedia){
            //webkit内核浏览器
            navigator.webkitGetUserMedia(constrains).then(success);
        } else if (navigator.mozGetUserMedia){
            //Firefox浏览器
            navagator.mozGetUserMedia(constrains).then(success);
        } else if (navigator.getUserMedia){
            //旧版API
            navigator.getUserMedia(constrains).then(success);
        }
    }

    var video = document.getElementById("video");
    var canvas = document.getElementById("canvas");
    var context = canvas.getContext("2d");

    //成功的回调函数
    function success(stream){
    	//debugger
        //兼容webkit内核浏览器
        var CompatibleURL = window.URL || window.webkitURL;
        //将视频流设置为video元素的源
        video.src = CompatibleURL.createObjectURL(stream);
        //播放视频
        video.play();
    }

    //异常的回调函数
    function error(error){
    	//debugger
        console.log("访问用户媒体设备失败:",error.name,error.message);
    }
    if (navigator.mediaDevices.getUserMedia || navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia){
        //调用用户媒体设备,访问摄像头
        //debugger
        getUserMedia({
            video:{width:480,height:320}
        },success,error);
    } else {
        alert("你的浏览器不支持访问用户媒体设备");
    }

    //注册拍照按钮的单击事件
    document.getElementById("capture").addEventListener("click",function(){
        //绘制画面
        context.drawImage(video,0,0,480,320);
    });
  //注册关闭按钮的单击事件
    document.getElementById("guanbi").addEventListener("click",function(){
    	debugger
    	//实测无法关闭
    });

    </script>  
  </body> 
</html>

 


参考来源:

https://segmentfault.com/a/1190000011793960

https://www.vue-js.com/topic/594ca7db5b32133659c2cd11

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值