在AS3中,如何检测是否有人从USB端口拔出相机?

时间:2012-12-13 14:33:06

标签: actionscript-3 flex air flash

在AS3中,如果SWF成功抓住某人的摄像头,他们开始流式传输视频和所有内容,但是然后在流中,他们不小心将摄像头从USB端口摆动,或者相机有点故障或者类似的东西,你怎么能从那个用户那边检测到它?我已经尝试过使用事件监听器,并且每隔五秒轮询不同的变量,但两者都没有工作;当发生类似这样的事情时,Camera的所有公共属性或其事件似乎都没有任何乐趣。显然你不能只是继续扫描计算机上的设备(我猜这是有充分理由的。)

这里有什么我想念的吗?有没有办法从用户的SWF副本(FP或AIR,但更重要的是FP)中检测到他们的相机由于出错而有效停止,例如他们错误地将其从计算机中摆出来?如果是这样的话?谢谢!

3 个答案:

答案 0 :(得分:1)

我不记得你可以根据需要进行正确的“获取相机状态”电话,但是你可以尝试听the status event,并希望有一个人在断开连接时被解雇。

如果你还没有这样做,请在5秒后检查:if(myCameraObject == null)假设为var myCameraObject = Camera.GetCamera();

如果找不到更好的解决方案,请考虑在相机Feed后面放置一个“检测相机”按钮。如果相机断开连接,则用户会看到该按钮并可以单击它以重新连接。

答案 1 :(得分:1)

虽然您可能无法检测到相机/麦克风何时停止工作或已停用,但如果您要将视频/音频发布到具有NetStream的服务器,则可以看出出现了问题。

NetStream具有info属性,即NetStreamInfo个对象。它将为您提供运行的字节总数以及NetStream发送到服务器的数据的字节/秒速率。

如果您使用的是总计,则需要定期检查byteCount并计算自己的费率。或者您可以让Flash Player完成所有工作并使用它正在计算的费率。在录制的情况下,这些值可以指示NetStream从摄像头/麦克风接收的数据量(并将发送到服务器)。

我们发现,当速率低于5千比特/秒时,我们可以在客户端可靠地确定出现了问题。我们在FMS服务器上使用了相同的阈值和类似的计算(带有自定义服务器端的Actionscript)。

答案 2 :(得分:0)

您可以按照@ToddBFisher的建议检查相机对象是否为空,检查Camera.names.length> 0或相机实例的其他一些属性(请参阅下面的链接)。但是在每个人中你都想定期检查它。

Working with Cameras

Monitoring Camera Status