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

相关文章

解决1093 - You can‘t specify target table报错问题及原因分析

《解决1093-Youcan‘tspecifytargettable报错问题及原因分析》MySQL1093错误因UPDATE/DELETE语句的FROM子句直接引用目标表或嵌套子查询导致,... 目录报js错原因分析具体原因解决办法方法一:使用临时表方法二:使用JOIN方法三:使用EXISTS示例总结报错原

SpringSecurity显示用户账号已被锁定的原因及解决方案

《SpringSecurity显示用户账号已被锁定的原因及解决方案》SpringSecurity中用户账号被锁定问题源于UserDetails接口方法返回值错误,解决方案是修正isAccountNon... 目录SpringSecurity显示用户账号已被锁定的解决方案1.问题出现前的工作2.问题出现原因各

javax.net.ssl.SSLHandshakeException:异常原因及解决方案

《javax.net.ssl.SSLHandshakeException:异常原因及解决方案》javax.net.ssl.SSLHandshakeException是一个SSL握手异常,通常在建立SS... 目录报错原因在程序中绕过服务器的安全验证注意点最后多说一句报错原因一般出现这种问题是因为目标服务器

HTML5 getUserMedia API网页录音实现指南示例小结

《HTML5getUserMediaAPI网页录音实现指南示例小结》本教程将指导你如何利用这一API,结合WebAudioAPI,实现网页录音功能,从获取音频流到处理和保存录音,整个过程将逐步... 目录1. html5 getUserMedia API简介1.1 API概念与历史1.2 功能与优势1.3

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

IDEA中Maven Dependencies出现红色波浪线的原因及解决方法

《IDEA中MavenDependencies出现红色波浪线的原因及解决方法》在使用IntelliJIDEA开发Java项目时,尤其是基于Maven的项目,您可能会遇到MavenDependenci... 目录一、问题概述二、解决步骤2.1 检查 Maven 配置2.2 更新 Maven 项目2.3 清理本

Java空指针异常NullPointerException的原因与解决方案

《Java空指针异常NullPointerException的原因与解决方案》在Java开发中,NullPointerException(空指针异常)是最常见的运行时异常之一,通常发生在程序尝试访问或... 目录一、空指针异常产生的原因1. 变量未初始化2. 对象引用被显式置为null3. 方法返回null

IDEA下"File is read-only"可能原因分析及"找不到或无法加载主类"的问题

《IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题》:本文主要介绍IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题,具有很好的参... 目录1.File is read-only”可能原因2.“找不到或无法加载主类”问题的解决总结1.File

使用@Cacheable注解Redis时Redis宕机或其他原因连不上继续调用原方法的解决方案

《使用@Cacheable注解Redis时Redis宕机或其他原因连不上继续调用原方法的解决方案》在SpringBoot应用中,我们经常使用​​@Cacheable​​注解来缓存数据,以提高应用的性能... 目录@Cacheable注解Redis时,Redis宕机或其他原因连不上,继续调用原方法的解决方案1

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序