繁体   English   中英

Flex移动相机+本机扩展

[英]Flex mobile Camera + 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 DesireS。 当我从空中应用程序进行流式传输(使用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应用程序和另一面),并且当闪光灯关闭时它恢复正常

我认为这是因为您仍在本机扩展中打开了相机。 您仅在运行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个或2个凸轮的设备

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM