我已经在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个凸轮的设备