检测相机是否在Flash中捕获

Ben*_*Ben 1 flash webcam actionscript-3

我在Flash AS3中使用Camera.getCamera()时遇到问题.如果有多个摄像头驱动程序,则不一定选择正确的摄像头驱动程序.如果默认是正确的,程序运行正常; 但是,如果选择其他驱动程序作为默认驱动程序,则网络摄像头上的LED不会亮起,也不会捕获任何视频.我可以循环浏览可用的凸轮并选择任意一个.但是,我不知道如何确定所选摄像机是否正确.它不会返回null.我考虑过使用camera.currentFPS,但目前还不清楚何时更新.我真的很难动态确定哪个相机可以做到这一点!

ktu*_*ktu 7

我认识到这是一个已经回答的旧问题,但看到这个链接是我帖子中最强的推荐人,我觉得有必要做出更明智的答案,并解释CameraDetection库的新更新.

原因:

有一些众所周知的原因可能会导致Camera.getCamera()返回一个有效的Camera对象,但Camera实际上不会工作.

  1. 如果相机已经在使用中.如果您的计算机上运行了Skype,这种情况最常见.你甚至不必在那一刻使用相机,但最后我检查过,如果skype打开,它是偷你的相机.

  2. mac笔记本电脑已经/曾经有多个摄像头列出,即使他们没有连接.这经常出现在DVI相机和其他东西(抱歉记忆力差).如果出于某种原因选择其中一个"断开连接"的摄像机作为默认设置,那么您将遇到问题.

  3. 谷歌聊天/视频适配器过去曾造成问题.简单地安装它会给人们带来很多问题(这可能已经开始~2011?),因为你永远不知道你会得到哪个操作系统或播放器版本这可能仍然是一个问题

为什么这个问题很糟糕:

确定相机是否实际工作是一种痛苦.我们最好的选择是监控Camera的活动和fps以查看它是否正常工作.

你应该期待什么

为了确定工作相机的行为,我使用计时器来检查相机的fps和活动水平.这是一个常见的结果:(此计时器设置为100毫秒)

fps:0   activity:-1
 ...  x20  ...
fps:0   activity:100
fps:0   activity:100
fps:8.1 activity:5
fps:8.5 activity:46
fps:8.2 activity:3
fps:8.4 activity:3
Run Code Online (Sandbox Code Playgroud)

所以,相机似乎没有响应2.1整秒!什么!?!?!?我知道.但随后它终于开始了.这是常见的行为,即使我在6核3.3GHz机器上测试这个很少运行.我的图书馆一直在检查相机等待这些活动和fps水平的变化.

当它不起作用你得到什么

你能猜出当相机不工作时会发生什么吗?你猜到了!

你会永远得到这个

fps:0 activity:-1
fps:0 activity:-1
fps:0 activity:-1
Run Code Online (Sandbox Code Playgroud)

所以我的代码会默认检查一台摄像机3整秒,等待一些活动,然后退出.这是不好的部分,也许所有的硬件很糟糕,而且CPU已经超载了,这需要超过3秒才能得到响应?祸患就是我们的行动人.

CameraDetection

我的图书馆做了这一切以及更多!它甚至可以处理获得用户使用媒体设备的许可!

更新2012.10.06,它现在有:

  • MediaPermissions - 一个处理Cameras最糟糕部分的类.它将获得许可,告诉您是否允许或拒绝,甚至告诉您用户是否选中了"记住"复选框
  • CameraChecker - 清理库的抽象.
  • CameraDetection - 使用起来更简单,并告诉你更多!在权限对话框打开和关闭时获取事件,当用户授予权限时,以及何时找到相机,没有相机可以使用,甚至当有相机但没有一个工作时
  • 记录! - 几乎完成了,我将支持记录CameraDetection使用的所有数据,所以也许我们可以获得足够的数据来推动Adobe修复某些东西......

请访问CameraDetection主页,不要忘记查看有关它的其他帖子!

获取代码,你可以直接去github