2011-12-23 69 views
10

我在Eclipse中使用了Android 2.2。Android中的視頻處理

我想製作一個捕獲視頻的應用程序,並將其作爲位圖發送給處理它的方法,並返回一個新的位圖並顯示處理後的位圖。

我對Android並不是很熟悉,所以請大家給我一些資源,我需要看看做這樣的事情嗎?

回答

20

這是很簡單的完成使用Android SDK以下步驟:

  • 捕獲從預覽框相機作爲位圖數據。 Camera.PreviewCallback將返回表示以許多可能的圖像格式的幀的數據的byte[]
  • 修改像素數據。由於數據以原始字節形式返回,因此對數據進行調整相對比較容易......這裏的難點在於針對您要執行的特定圖像處理應用算法。沒有任何可以簡單應用於圖像的內置效果(4.0之前版本),因此您必須自己編寫。
  • 也可以將數據解碼爲Bitmap對象,以便更容易地處理像素。在2.2中,您可以選擇使用NDK和jnigraphics在本地代碼中使用Bitmap的像素,這比Java層快得多。
  • 把你的結果Bitmap的內容顯示出來。對於快速移動的數據,您需要在SurfaceView上顯示此信息;使用該視圖包含的SurfaceHolder中可用的lockCanvas()unlockCanvasAndPost()方法。

如果這就是你想要做的一切,那麼你可以輕鬆完成這一點。但是,這與捕捉視頻不一樣。 Android目前不提供鉤子以實時將幀流式傳輸到編碼視頻容器(MPEG4,3GP等)中。它的視頻捕捉功能緊密包裹在MediaRecorder中,該控件可以控制從幀捕捉一直到編碼編碼視頻的過程。您需要第三部分庫,例如FFMPEG(已在Android應用程序中多次使用NDK層構建並運行)來協助您修改幀的編碼過程。

我知道你有一個2.2的目標,但Android 4.0在這裏提供了一些解決方法,因爲他們已經發布了NDK的新版本,它允許在交付之前從流中讀取圖像數據時會發生什麼到表示層。但是,我沒有花足夠的時間知道它是否可以推薦用於您的情況。

+0

我真的不想看一個視頻,使用預覽對我來說很棒。謝謝! – 2011-12-24 13:46:11

+0

嗨,我如何使用一系列位圖圖像創建視頻?我如何渲染它? – 2012-08-13 16:22:48

5

您可以使用Camera.setPreviewCallbackCamera.PreviewCallback#onPreviewFrame來偵聽來自相機的預覽幀。

代碼二維條碼掃描儀可能是一個有用的起點: ZXing

7

如果你想做更復雜的實時視頻處理,我會強烈推薦OpenCV for Android

OpenCV是一個計算機視覺庫,使您能夠實時處理視頻,並且它具有執行簡單任務的庫,例如檢測邊緣或檢測面和匹配特徵等更復雜的任務。

您可以在一天內使OpenCV在您的Android手機上工作,特別是因爲它包含大量文檔和示例。