天天看點

在Android中通過jni方式使用編譯好的FFmpeg庫-Android中使用FFmpeg媒體庫(二)

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

在繼上篇在32位的ubuntu

11.04中為android ndk r6編譯ffmpeg最新版0.8.1後,本人來給大家展示一下如何在android中使用編譯好的ffmpeg庫。

整體調用邏輯為:

1 編譯完ffmpeg庫

2 使用jni方式撰寫c代碼,其中需要包含相應的ffmpeg的頭檔案

3 撰寫相應的android.mk檔案,裡面指定需要編譯的c代碼以及需要連結的動态庫

4 執行ndk-build生成相應的jni庫

5 建立andorid java程式,代碼中loadlibrary相應ffmpeg庫以及剛才生成的jni庫

6 靜态方法聲明native函數,這些函數在jni寫的c語言中都已經實作過

下面為步驟:

1 将在32位的ubuntu

11.04中為android ndk r6編譯ffmpeg最新版0.8.1文中編譯得到的libffmpeg.so檔案拷貝到/root/develop/android-ndk-r6/platforms/android-8/arch-arm/usr/lib目錄,如果使用的是android2.3的話,還需有拷貝到/root/develop/android-ndk-r6/platforms/android-9/arch-arm/usr/lib目錄。

2 進入android ndk r6的samples目錄,我們基于最簡單的hello-jni來修改。由于我們在調用ffmpeg庫方法時候,需要使用到他的頭檔案。這裡我們将之前編譯libffmpeg.so檔案的所有代碼拷貝到/root/develop/android-ndk-r6/samples/目錄,并改目錄名稱為ffmpeg

3 修改hello-jni.c檔案

4 修改android.mk檔案

注意local_ldlibs := -lffmpeg是編譯添加動态連結庫檔案。

5 進入指令行,在目前目錄執行ndk-build

6 這時候會在/root/develop/android-ndk-r6/samples/hello-jni/libs/armeabi目錄生成一個libhello-jni.so的動态連結庫

7 為了後面的java程式能夠loadlibrary,需要将之前生成的libffmpeg.so檔案也拷貝到這個目錄

8 修改hellojni.java檔案

執行後将看到如下圖檔:

在Android中通過jni方式使用編譯好的FFmpeg庫-Android中使用FFmpeg媒體庫(二)

本文源代碼下載下傳:

hello-jni

對應的編譯完的libffmpeg.so檔案下載下傳

libffmpeg.so

ffmpeg檔案夾比較大,這裡不發了。可以從上篇文章找到。

對tq09931兄的文章表示感謝。

http://tq09931.iteye.com/blog/1011895

http://code.google.com/p/aacplayer-android/

http://www.roman10.net/?p=394

https://github.com/halfninja/android-ffmpeg-x264

https://github.com/mconf/ffmpeg

https://github.com/havlenapetr/ffmpeg

主參考

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