H5通过getUserMedia拍照黑屏原因

2024-01-06 02:12

本文主要是介绍H5通过getUserMedia拍照黑屏原因,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

项目需求背景:如同我上篇文章,https://blog.csdn.net/carfge/article/details/135417741

问题场景:

        小米手机中访问H5,网页已获得摄像头授权(左上角相机出现图标),但页面黑屏。

        

原因排查:

        一:怀疑getUserMedia初始化过程中出错,于是在video各个事件(如oncanplay、onplay、onplaying、onabort、onended、onwaiting、onpause、onerror等)中都打印日志,但日志显示video正在播放onplaying,并无异常。

        二:怀疑video元素或其父元素没有宽或高导致样式问题,于是给video加了红色背景,但能明显看到video区域由红色变成了黑色。

        三:从getUserMedia初始化开始查,仅设置必须参数,最终发现问题在navigator.mediaDevices.getUserMedia(constraints)中的constraints对象,由于给video设置了width和height中的ideal属性,可能ideal值过高导致小米手机摄像头无法适配。

        原代码如下:

//调用用户媒体设备,访问摄像头
getUserMedia({video: {facingMode: "environment", // 后置摄像头// 注:仅配置width/height中ideal属性,某些机型(如小米)会出现黑屏width: { ideal: 3024 },height: { ideal: 4032 },},audio: false,},success,error
);

解决方案:

        1、video不配置width和height。默认像素为360*480,但像素过低,拍出来的图模糊。

        2、video配置width时,将min、ideal、max属性同时配置。手机会自动适配最佳像素,拍出来的图也比较清晰。

        新代码如下:

//调用用户媒体设备,访问摄像头
getUserMedia({video: {facingMode: "environment", // 后置摄像头width: { min: 640, ideal: 1280, max: 1920 },},audio: false,},success,error
);

API文档:navigator.getUserMedia - Web API 接口参考 | MDN

这篇关于H5通过getUserMedia拍照黑屏原因的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/574900

相关文章

Linux samba共享慢的原因及解决方案

《Linuxsamba共享慢的原因及解决方案》:本文主要介绍Linuxsamba共享慢的原因及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux samba共享慢原因及解决问题表现原因解决办法总结Linandroidux samba共享慢原因及解决

Spring事务中@Transactional注解不生效的原因分析与解决

《Spring事务中@Transactional注解不生效的原因分析与解决》在Spring框架中,@Transactional注解是管理数据库事务的核心方式,本文将深入分析事务自调用的底层原理,解释为... 目录1. 引言2. 事务自调用问题重现2.1 示例代码2.2 问题现象3. 为什么事务自调用会失效3

找不到Anaconda prompt终端的原因分析及解决方案

《找不到Anacondaprompt终端的原因分析及解决方案》因为anaconda还没有初始化,在安装anaconda的过程中,有一行是否要添加anaconda到菜单目录中,由于没有勾选,导致没有菜... 目录问题原因问http://www.chinasem.cn题解决安装了 Anaconda 却找不到 An

Spring定时任务只执行一次的原因分析与解决方案

《Spring定时任务只执行一次的原因分析与解决方案》在使用Spring的@Scheduled定时任务时,你是否遇到过任务只执行一次,后续不再触发的情况?这种情况可能由多种原因导致,如未启用调度、线程... 目录1. 问题背景2. Spring定时任务的基本用法3. 为什么定时任务只执行一次?3.1 未启用

Java报NoClassDefFoundError异常的原因及解决

《Java报NoClassDefFoundError异常的原因及解决》在Java开发过程中,java.lang.NoClassDefFoundError是一个令人头疼的运行时错误,本文将深入探讨这一问... 目录一、问题分析二、报错原因三、解决思路四、常见场景及原因五、深入解决思路六、预http://www

Android WebView无法加载H5页面的常见问题和解决方法

《AndroidWebView无法加载H5页面的常见问题和解决方法》AndroidWebView是一种视图组件,使得Android应用能够显示网页内容,它基于Chromium,具备现代浏览器的许多功... 目录1. WebView 简介2. 常见问题3. 网络权限设置4. 启用 JavaScript5. D

IDEA编译报错“java: 常量字符串过长”的原因及解决方法

《IDEA编译报错“java:常量字符串过长”的原因及解决方法》今天在开发过程中,由于尝试将一个文件的Base64字符串设置为常量,结果导致IDEA编译的时候出现了如下报错java:常量字符串过长,... 目录一、问题描述二、问题原因2.1 理论角度2.2 源码角度三、解决方案解决方案①:StringBui

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

pip install jupyterlab失败的原因问题及探索

《pipinstalljupyterlab失败的原因问题及探索》在学习Yolo模型时,尝试安装JupyterLab但遇到错误,错误提示缺少Rust和Cargo编译环境,因为pywinpty包需要它... 目录背景问题解决方案总结背景最近在学习Yolo模型,然后其中要下载jupyter(有点LSVmu像一个

SpringBoot中的404错误:原因、影响及解决策略

《SpringBoot中的404错误:原因、影响及解决策略》本文详细介绍了SpringBoot中404错误的出现原因、影响以及处理策略,404错误常见于URL路径错误、控制器配置问题、静态资源配置错误... 目录Spring Boot中的404错误:原因、影响及处理策略404错误的出现原因1. URL路径错