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

相关文章

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、程序

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