服务器项目前端调用摄像头失败,浏览器里摄像头开启失败:failed to allocate videosource...

当在Web浏览器尝试调用摄像头时遇到'NotReadableError: Failed to allocate videosource'错误,通常是因为摄像头已被其他应用程序占用。关闭占用摄像头的应用或进程即可解决问题。此外,也可能是操作系统、浏览器或页面级别的硬件错误导致。在使用高拍仪等设备时,确保正确配置和使用浏览器的媒体访问权限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过程序在Web浏览器里调用摄像头,报错“NotReadableError: Failed to allocate videosource”的原因及解决办法。文末附Web调用摄像头的程序说明。

一开始在360浏览器里调用摄像头,报错“[object NavigatorUserMediaError]”,也没找到相关权限开关的设置!Web程序基本上是没问题的,因为此前成功开启过摄像头。想到可能权限的问题,欲换成在Firefox火狐浏览器运行程序并打开摄像头,错误提示“NotReadableError: Failed to allocate videosource”,百度了一下在stackoverflow找到了答案(英文):

NotReadableError: Failed to allocate videosource

Most commonly this happens on Windows because the webcam is already in use by another app. Firefox will throw this error on both

Windows and Mac even though only on Windows processes get exclusive access to the webcam.

翻译:最常见的是在Windows上发生,因为网络摄像头已经被另一个应用程序使用。Firefox会在Windows和Mac上抛出这个错误,即使只有在Windows进程中对网络摄像头进行独占访问。

Please make sure your camera is not been used by some other application (chrome, ie or any other browser). I wasted have of my day

searching for a solution, and in the end, found out my camera was used by other application...

翻译:请确保您的相机没有被其他应用程序使用(Chrome,即任何其他浏览器)。我浪费了一天的时间寻找一个解决方案,最后,发现我的相机被其他应用程序使用…

The error can happen for other reasons:

Although the user granted permission to use the matching devices, a hardware error occurred at the operating system, browser, or

Web page level which prevented access to the device.

翻译:由于其他原因,错误可能发生:尽管用户授予了使用匹配设备的权限,但是在操作系统、浏览器或网页级别上发生了硬件错误,从而阻止了对设备的访问。

综合以上,原因是摄像头被其它应用占用了,比如通过“我的电脑”面板直接运行了摄像头软件,只要关闭相关应用软件或结束进程即可。

应用场景说明

在软件里(基于火狐浏览器)远程审方,需通过高拍仪扫描处方。

b441e59cb15316ba30964cbb3e67a1a2.png高拍仪:failed to allocate videosource

ce3809f4e9f13394bf48d6b8ed3efae5.png火狐浏览器里对摄像头、麦克风的开启给出安全提醒

6e92b39165f4f3f2a16204a4ad58dd71.png浏览器里成功开启摄像头

相关技术API(参考MDN技术文档)

navigator.getUserMedia()

语法:

navigator.getUserMedia ( constraints, successCallback, errorCallback );

参数:

constraints

MediaStreamConstaints对象指定了请求使用媒体的类型,还有每个类型的所需要的参数。具体细节请参见MediaDevices.getUserMedia() 方法下面的constraints部分。

successCallback

当调用成功后,successCallback中指定的函数就被调用,包含了媒体流的MediaStream对象作为它的参数,你可以把媒体流对象赋值给合适的元素,然后使用它,就像下面的例子一样:

function(stream) {

var video = document.querySelector('video');

video.src = window.URL.createObjectURL(stream);

video.onloadedmetadata = function(e) {

// Do something with the video here. };

}

errorCallback

当调用失败,errorCallback中指定的函数就会被调用,MediaStreamError对象作为它唯一的参数;此对象基于DOMException对象构建。错误码描述见参见以下:

PermissionDeniedError: 使用媒体设备请求被用户或者系统拒绝

NotFoundError:找不到constraints中指定媒体类型

该特性已经从 Web 标准中删除,虽然一些浏览器目前仍然支持它,但也许会在未来的某个时间停止支持,请尽量不要使用该特性。

此API已更名为 MediaDevices.getUserMedia(),这个已废弃的API版本仅为了向后兼容而存在。新代码应当使用Navigator.mediaDevices.getUserMedia() 替代.

io.netty.util.internal.outofdirectmemoryerror: failed to allocate 16777216 b 是一个错误提示,意味着在使用 io.netty 这个库时,尝试分配 16,777,216 字节的直接内存时出现了错误。 出现这个错误通常是由于系统中的直接内存不足导致的。直接内存是一种通过 Native Memory 来直接分配内存的方式,与 Java 堆内存不同。由于直接内存不受 JVM 垃圾回收的控制,因此需要手动释放。 解决这个问题的方法有以下几种: 1. 增加直接内存的容量:可以通过修改 JVM 的启动参数,增加直接内存的最大容量。可以使用 -XX:MaxDirectMemorySize 参数指定最大直接内存大小。例如,可以设置为 -XX:MaxDirectMemorySize=1g 来将最大直接内存大小设置为 1GB。 2. 检查代码中的资源是否正确释放:如果在代码中使用了 io.netty 这个库,需要确保在使用完毕后正确释放资源。可以通过调用相关的 close() 或者 release() 方法来释放所占用的直接内存。 3. 调整程序的设计:如果程序中的网络请求或者数据处理量非常大,考虑对程序进行优化,减少对直接内存的依赖。可以通过合理缓存、分批处理等方式来减少直接内存的使用。 总之,当出现 io.netty.util.internal.outofdirectmemoryerror: failed to allocate 16777216 b 错误时,需要检查直接内存的容量是否足够,释放资源是否正确,以及是否需要对程序进行优化,减少对直接内存的依赖。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值