Flex移动相机+原生扩展

时间:2011-11-14 08:12:14

标签: android actionscript-3 flex air air-native-extension

我已经在Adobe预发布论坛上提出了这个问题,但他们保持沉默,所以我需要你的帮助!

我需要制作一个应用程序,能够在实时视频流到服务器的过程中打开/关闭Android设备上的闪光灯。

所以我做了和扩展。 Java函数很简单:

 try{ 
   if (isOn){
     camera = Camera.open();
       Parameters params = camera.getParameters();
       params.setFlashMode(Parameters.FLASH_MODE_TORCH);
       camera.setParameters(params);
     } else {
        camera.release();
     }     
     } catch( Exception e ){
 }

我使用了前后相机的HTC欲望S.  当我从空中应用程序(使用as3 camera = Camera.getCamera())进行流式传输并尝试使用此扩展时,它根本没有响应

所以我找到了解决方法:在flash中我已将代码更改为:

 camera = null;
 nativeExtension.turnFlashOn(true);
 camera = Camera.getCamera("1");

此代码仅在我使用后置摄像头时有效,但我需要传递参数“1”,这实际上是前置摄像头,但在这种情况下使用后置摄像头。  无论如何 - 它运作正常。

但是当我试图在只有后置摄像头的HTC上使用这个应用程序时,我坚持了...我不能使用Camera.getCamera(“1”),因为我只有“0”摄像头,这是后置摄像头。所以当我使用这段代码时:

 camera = null;
 nativeExtension.turnFlashOn(true);
 camera = Camera.getCamera("0");

我的图像冻结了双方(Android应用程序和另一侧)并且当闪光灯关闭时它正常

2 个答案:

答案 0 :(得分:1)

我认为这是因为您仍然在原生扩展中打开相机。您只在运行nativeExtension.turnFlashOn(false)

时才释放它

摄像机资源一次只能由一个进程保存。这就是冻结的原因。我怀疑如果你查看你的系统日志(logcat),你会看到错误,例如"无法连接到摄像机"当你的闪光灯关闭时,你已经运行了camera.release(),因此它没有被保持,AS可以获得它。

我不确定你在请求前置摄像头但是使用后面的AS中发生了什么事。你不是很清楚。无论哪种方式,都不要这样做,因为无法完成所需的结果,因为它需要两个进程同时保存相机资源。

为什么不从原生扩展中进行流式传输?这样你就可以同时使用相机和闪光灯,因为它本机运行,性能可能会更好。 Flex对摄像头和录制视频的支持非常差。我打算使用它并最终决定将我的所有摄像机进程移动到NE。

希望这有帮助

答案 1 :(得分:0)

如果您的设备安装了0,1,2个摄像头,请尝试此逻辑

 camera = null;
 nativeExtension.turnFlashOn(true);
// get front camera
camera = Camera.getCamera("1");
// if no front cam try back
if (camera == null)
 camera = Camera.getCamera("0");
// if no cams try default cam
if (camera == null)
 camera = Camera.getCamera();
else {
  trace("Mobile device has no camera!");
}

此代码适用于具有零,0或2个凸轮的设备