检测相机是否在Flash中捕获

时间:2010-06-15 03:08:24

标签: flash actionscript-3 webcam

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

3 个答案:

答案 0 :(得分:7)

我知道这是一个已被回答的旧问题,但看到这个链接是我帖子中最强的推荐者,我认为有必要做出更明智的答案,并解释CameraDetection的新更新库。

  

导致:

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

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

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

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

  4.   

    为什么这个问题很糟糕:

    确定相机是否实际正在工作是一件痛苦的事。我们最好的选择是监控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
    

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

    当它不起作用时你会得到什么

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

    你永远得到这个,

    fps:0 activity:-1
    fps:0 activity:-1
    fps:0 activity:-1
    

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

      

    CameraDetection

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

    更新2012.10.06 ,现在有:

    • MediaPermissions - 处理相机最糟糕部分的类。它将获得许可,告诉您是否允许或拒绝,甚至告诉您用户是否选择了“记住”复选框
    • CameraChecker - 清理图书馆的抽象。
    • CameraDetection - 使用起来更简单,并告诉您更多!当权限对话框打开和关闭时,当用户授予权限,找到相机时,没有相机可供使用,甚至当有相机但没有一个工作时,获取事件
    • 日志记录! - 差不多完成了,我将支持记录CameraDetection使用的所有数据,所以也许我们可以获得足够的数据来推动Adobe修复某些内容......

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

    获取代码,您可以直接转到github

答案 1 :(得分:1)

查看此blog post,它可能会用于您要做的事情。

我记得我刚才使用过这个课程,因为在我正在处理的应用程序中检测Mac中的正确网络摄像头时出现问题。但是,从未在Windows或Linux上遇到过这个问题。

那时我的截止日期相当紧张,所以我对这个问题的调查并不多。我记得这个代码在运行Windows的笔记本电脑中有一些内置摄像头存在问题。我最后只是检查flash.system.Capabilities.os以检测客户端是否是Mac。对于Mac,我使用了这个类中的代码。对于其他一切,我只是检测到相机“常规方式”(即获得默认相机)。它在我们所有的测试中都运行良好,而且由于时间很短,因此解决了这个问题。

说实话,不过,我不确定它是否涵盖了一些角落案件。您可能想要检查一下,但希望这至少会给您一些指示 - 如果不是解决方案。

希望这有帮助。

答案 2 :(得分:0)

你想要的东西可能是activityLevel http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/media/Camera.html#activityLevel 但如果您在OSX中选择“正确”的相机时遇到问题,我建议您使用下拉菜单并让用户选择。使用Camera.names填充选择下拉列表并使用所选索引进行实际选择。一个主要问题是确保使用字符串来选择摄像机,它与麦克风选择相反,其中使用了一个数字。

//camera uses string
var camera:Camera = Camera.getCamera("0");

//microphone uses number
var mic:Microphone = Microphone.getMicrophone(0);

//method to handle the selection of a new camera
private function changeCamera(evt:ListEvent):void {
    camera = Camera.getCamera(evt.currentTarget.selectedIndex.toString());
}

我自己看到了与windows和osx的区别,但我不记得确切的问题。