天天看點

一個使用FFmpeg庫讀取3gp視訊的例子-Android中使用FFmpeg媒體庫(三)

原文:http://doandroid.info/?p=497

在續系列文章在32位的ubuntu

11.04中為android ndk r6編譯ffmpeg0.8.1版-android中使用ffmpeg媒體庫(一)和在android中通過jni方式使用編譯好的ffmpeg庫-android中使用ffmpeg媒體庫(二)文章後,本文将根據github中churnlabs的一個開源項目,來深入展開說明如何使用ffmpeg庫進行多媒體的開發。

本文中的代碼來自于https://github.com/churnlabs/android-ffmpeg-sample,更多的可以參考這個項目代碼。我會在代碼中加一些自己的注釋。感謝作者churnlabs給我們提供這麼好的例子以供我們學習。

在android的一些系統層應用開發大多數是采用jni的方式調用,另外對于一些比較吃cpu或者處理邏輯比較複雜的程式,也可以考慮使用jni方式來封裝。可以提高程式的執行效率。

本文涉及到以下幾個方面:

1 将3gp檔案push到模拟機器的sdcard中

2 寫jni代碼,内部調用ffmpeg庫的方法,編譯jni庫

3 loadlibrary生成的庫,然後撰寫相應的java代碼

4 執行程式,并檢視最終運作結果。

最終程式的顯示效果如下:

一個使用FFmpeg庫讀取3gp視訊的例子-Android中使用FFmpeg媒體庫(三)

1 使用eclipse的ddms工具,将vid.3pg push到sdcard中

一個使用FFmpeg庫讀取3gp視訊的例子-Android中使用FFmpeg媒體庫(三)

2 撰寫相應的jni檔案

3 撰寫相應的android.mk檔案

這裡需要注意一下檔案的目錄情況,我截圖說明一下。

一個使用FFmpeg庫讀取3gp視訊的例子-Android中使用FFmpeg媒體庫(三)

在android.mk中有意個local_c_includes :=$(local_path)/include指明了相應的ffmpeg的頭檔案路徑。故在代碼中包含

就可以。

4 調用ndk-build,生成libffmpegutils.so檔案,将這個檔案拷貝到/root/develop/android-ndk-r6/platforms/android-8/arch-arm/usr/lib目錄,使得我們在下面使用android avd2.2的時候,可以加載到這個so檔案。

5 撰寫相應的eclipse項目代碼,由于在native.c檔案中指明了項目的工程名詞以及類名詞還有函數名詞,故我們的項目為com.churnlabs.ffmpegsample下面的mainactivity.java檔案

6 編譯運作即可,最終效果圖

一個使用FFmpeg庫讀取3gp視訊的例子-Android中使用FFmpeg媒體庫(三)

7 項目代碼下載下傳:

https://github.com/churnlabs/android-ffmpeg-sample/zipball/master

參考:

1 https://github.com/churnlabs/android-ffmpeg-sample

2 http://www.360doc.com/content/10/1216/17/474846_78726683.shtml

3 https://github.com/prajnashi

繼續閱讀