首页 > 其他分享 >html调取摄像头(来源忘记了,还望原作者见谅)

html调取摄像头(来源忘记了,还望原作者见谅)

时间:2024-08-21 14:48:31浏览次数:6  
标签:canvas videoElement 原作者 視訊 html let 串流 瀏覽器 调取

<html>     <body>         <!-- 視訊串流顯示位置 -->         <video id="videoElement" class="videoElement" autoplay muted playsinline></video>
        <!-- 繪製截圖 -->         <div id="imageContainer"></div>
        <!-- 切換鏡頭按鈕 -->         <div>             <button onclick="switchCamera()">切換鏡頭</button>         </div>     </body>     <script>         const videoElement = document.getElementById("videoElement");                 // 切換鏡頭         function switchCamera() {           if (videoElement.srcObject) {             let videoTracks = videoElement.srcObject.getVideoTracks();             if (videoTracks.length > 0) {               let currentTrack = videoTracks[0];               let facingMode = currentTrack.getSettings().facingMode;                       const constraints = { video: {} };               if (facingMode === "user") {                 constraints.video.facingMode = "environment"; // 切換到後鏡頭               } else {                 constraints.video.facingMode = "user"; // 切換到前鏡頭               }                       // 停止原本的視訊串流               videoTracks.forEach(function (track) {                 track.stop();               });                       // 確保瀏覽器支援 MediaDevices API               if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {                 // 取得新的視訊串流                 navigator.mediaDevices                   .getUserMedia(constraints)                   .then(function (stream) {                     videoElement.srcObject = stream;                   })                   .catch(function (error) {                     console.error("無法取得視訊串流:", error);                     alert(                       "您使用的瀏覽器不支援視訊串流,請使用其他瀏覽器,再重新開啟頁面!"                     );                   });               } else {                 alert(                   "您使用的瀏覽器不支援視訊串流,請使用其他瀏覽器,再重新開啟頁面!"                 );               }             }           }         }                 function startCam() {           // 手機前後鏡頭切換 前鏡頭為 'user',後鏡頭為 'environment'           const constraints = { video: { facingMode: "user" } };           // 確保瀏覽器支援MediaDevices API           if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {             // 取得視訊串流             navigator.mediaDevices               .getUserMedia(constraints)               .then(function (stream) {                 // iOS 手機使用時,必須增加的屬性                 videoElement.setAttribute("autoplay", "");                 videoElement.setAttribute("muted", "");                 videoElement.setAttribute("playsinline", "");                         videoElement.srcObject = stream;                         // 每秒繪製一格畫面                 setInterval(function () {                   let canvas = document.createElement("canvas");                   canvas.width = videoElement.videoWidth;                   canvas.height = videoElement.videoHeight;                   canvas                     .getContext("2d")                     .drawImage(videoElement, 0, 0, canvas.width, canvas.height);                           // 改變圖片解析度                   let scaleFactor = 2; // 調整這個數值以增加解析度                           let offscreenCanvas = document.createElement("canvas");                   offscreenCanvas.width = canvas.width * scaleFactor;                   offscreenCanvas.height = canvas.height * scaleFactor;                   let offscreenCtx = offscreenCanvas.getContext("2d");                   offscreenCtx.drawImage(                     canvas,                     0,                     0,                     offscreenCanvas.width,                     offscreenCanvas.height                   );                           // 直接顯示在前端                   // 需要動態創建 <img> 元素,因為手機版可能會無法讀取                   let imageElement = document.createElement("img");                           // 將 <img> 元素添加到 HTML 中的指定元素上                   let containerElement = document.getElementById("imageContainer");                   containerElement.innerHTML = "";                   imageElement.setAttribute("style", "width:100%");                   containerElement.appendChild(imageElement);                   imageElement.src = offscreenCanvas.toDataURL("image/jpeg", 1);                 }, 1000); // 每秒繪製一次畫面               })               .catch(function (error) {                 console.log("無法取得視訊串流:", error);                 alert(                   "您使用的瀏覽器不支援視訊串流,請使用其他瀏覽器,再重新開啟頁面!"                 );               });           } else {             alert("您使用的瀏覽器不支援視訊串流,請使用其他瀏覽器,再重新開啟頁面!");           }         }         // 初始執行函式         startCam();         </script> </html>

标签:canvas,videoElement,原作者,視訊,html,let,串流,瀏覽器,调取
From: https://www.cnblogs.com/nikyxxx/p/18371608

相关文章

  • 基于html2canvas实现网页保存为图片及图片清晰度优化
    一、实现HTML页面保存为图片1.1已知可行方案现有已知能够实现网页保存为图片的方案包括:方案1:将DOM改写为canvas,然后利用canvas的toDataURL方法实现将DOM输出为包含图片展示的dataURI方案2:使用html2canvas.js实现(可选搭配Canvas2Image.js实现网页保存为图片)方案3:使用raster......
  • HTML5引入element
    <!DOCTYPEhtml><html><head><metacharset="UTF-8"><!--importCSS--><linkrel="stylesheet"href="https://cdn.staticfile.org/element-ui/2.15.9/theme-chalk/index.css"></......
  • 前端开发中的大屏布局方案:使用 rem 单位与动态设置 html 的 font-size
    使用rem单位与动态设置html的font-size前言随着设备尺寸的多样化,网页需要能够在不同大小的屏幕上提供良好的用户体验。传统的布局方式(如使用px)在不同分辨率下可能会导致布局失真。为了解决这个问题,我们可以通过动态设置html元素的font-size并使用rem单位来构......
  • 浅谈HTML
    html是一种标签语言,用来写前端页面的,通常结合CSS和js来写。主要用于web开发,B/S架构的系统,所谓B/S其实也是一种特殊的C/S,只不过此时浏览器变成了客户端。B/S架构:B是browser,S是serverC/S架构:C是client,S是server**什么是HTML?**HTML是用来描述网页的一种语言。HTML指的是超......
  • html+css+js -SE
    前端基础编辑器的vscode插件安装AutoRenameTag自动修改标签对插件ChineseLanguagePack汉化包HTMLCSSSupportHTMLCSS支持IntellijIDEAKeybindingsIDEA快捷键支持LiveServer实时加载功能的小型服务器openinbrowser通过浏览器打开当前文件的插件Prett......
  • 手把手教你用Go开发客户端软件(使用Go + HTML)
    开发桌面客户端软件一直是程序员的常见任务之一,而Go语言凭借其简洁、高效以及丰富的第三方库,越来越多地被用于开发各类应用程序。今天我们将结合Go语言和HTML,使用开源项目Sciter的Go绑定库go-sciter,为大家展示如何用最少的开发精力构建一个跨平台的桌面客户端。什么是......
  • HTML5新增和删减
    html5发展HTML5是HTML最新的修订版本,2014年10月由万维网联盟(W3C)完成标准制定。HTML5仍处于完善之中。然而,大部分现代浏览器已经具备了某些HTML5支持h5添加csshack,csszoom知识点特性新的特殊内容元素,比如header、nav、section、article、footer新的表单控件,比如r......
  • 打砖块小游戏html小游戏
    这里提供一个打砖块小游戏html代码,有需要的小伙伴可以自己试试。body内容点击查看代码<selectid="difficulty"><optionvalue="easy">简单</option><optionvalue="medium">中等</option><optionvalue="hard">困难&l......
  • 学习 node.js 六 Markdown 转为 html,zlib
    目录Markdown转为html安装ejs语法标签含义 1.纯文本标签2.输出经过HTML转义的内容3.输出非转义的内容(原始内容)markedbrowserSynczlibgzipdeflategzip和deflate区别http请求压缩 Markdown转为html什么是markdown?Markdown是一种轻量级标记......
  • [Javascript] HTML Template Interpolation
    Thebasic interpolatefunctionwecancreate:functioninterpolate(str,params){letnames=Object.keys(params);//["title","description"]letvalues=Object.values(params);//["Hello","World"]......