Flex手机摄像头+本机扩展

我已经在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.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应用程序和另一侧),并在闪光灯关闭时正常


我认为这是因为您仍然在本机扩展中打开相机。 只有在运行nativeExtension.turnFlashOn(false)时才会释放它

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

我不确定在你要求前置摄像头但是使用后面的情况下会发生什么情况。 你不是很清楚。 无论哪种方式,不要这样做,因为您所需的结果无法完成,因为它需要两个进程同时持有相机资源。

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

希望这可以帮助


如果您的设备安装了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个摄像头的设备

链接地址: http://www.djcxy.com/p/27905.html

上一篇: Flex mobile Camera + Native extension

下一篇: Away3DLite on Android Objects doesn't appear on the screen