2011-11-14 67 views
2

我已經在Adobe預發佈論壇上提過此問題,但他們保持沉默,所以我需要您的幫助!Flex手機攝像頭+原生擴展

我需要製作一個應用程序,該應用程序應能夠在實時視頻流傳輸到服務器期間打開/關閉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應用程序,並在另一側),當閃光燈關閉

回答

1

它會正常的,我認爲這是因爲你仍然有相機在本機擴展中打開。只有在運行nativeExtension.turnFlashOn(false)時纔會釋放它。

相機資源一次只能由一個進程保存。這就是它凍結的原因。我懷疑如果你看看你的系統日誌(logcat),你會看到像「無法連接到相機」的錯誤當你的閃光燈關閉,你已經運行camera.release(),因此它不被持有,AS可以獲得它。

我不知道什麼是在你要求前置攝像頭但使用回來的地方。你不是很清楚。無論哪種方式,不要這樣做,因爲您所需的結果無法完成,因爲它需要兩個進程同時持有相機資源。

爲什麼不從自己的本地擴展中進行流式傳輸?這樣,您可以同時使用相機和閃光燈,並且性能可能會更好,因爲它本身運行。 Flex對相機和錄製視頻的支持非常差。我打算使用它,並最終決定將我所有的相機進程都移動到NE。

希望這有助於

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個凸輪