2

我已经在 Adob​​e 预发布论坛上问过这个问题,但他们保持沉默,所以我需要你的帮助!

我需要制作一个应用程序,该应用程序应该能够在实时视频流式传输到服务器期间打开/关闭 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())进行流式传输并尝试使用此扩展程序时,它根本没有响应

所以我找到了解决方法:在闪存中,我将代码更改为:

 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 应用程序和另一侧)都冻结,当闪光灯关闭时它会正常

4

2 回答 2

1

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

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

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

你为什么不从你的原生扩展做你的流媒体?这样你就可以同时使用相机和闪光灯,而且性能可能会好很多,因为它是本地运行的。Flex 对相机和录制视频的支持真的很差。我打算使用它并最终决定将我所有的相机进程移动到一个 NE。

希望这可以帮助

于 2011-12-09T08:56:14.093 回答
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 个凸轮的设备

于 2013-02-25T17:55:36.577 回答