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 desire 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应用程序和另一边),当flash关闭时它会恢复正常

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

时才会释放它

相机资源一次只能由一个进程持有。这就是为什么会这么冷。我怀疑如果你看看你的系统日志(logcat),你会看到错误,如"无法连接到相机"当你的闪光灯关闭时,你已经运行camera.release(),所以它没有被持有,AS可以获取它。

我不确定在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、0或2个凸轮的设备

最新更新