跨平台——ffmpeg移植android、cocos2dx

來源:互聯網
上載者:User

【版本】

ffmpeg 1.2.6, android ndk r8b,cygwin

【windows下編譯】

這個比想象中的簡單,用MinGW編譯,然後在VS裡用產生的lib庫即可,參照下列網友的部落格:

windows下編譯ffmpeg

【配置編譯】

安裝好cygwin,把android ndk放到cygwin的home目錄下面,路徑是這樣:D:\cocos2dx\cygwin\home\Administrator\android-ndk-r8b

然後解壓ffmpeg到這個地方(jni裡就是內容):D:\cocos2dx\cygwin\home\Administrator\ffmpeg\jni\ffmpeg


然後編寫配置指令碼config.sh,這部分可參考下面的連結:

編寫ffmpeg的config.sh指令碼

內容如下(注意最後把configure的內容放一行,這是一個坑哦!而且如果ndk路徑不一樣的自己改下):

./configure  --disable-asm --disable-static --enable-shared --enable-gpl --enable-version3 --enable-nonfree --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --disable-avdevice --disable-avfilter --disable-postproc --enable-small --cross-prefix=/home/Administrator/android-ndk-r8b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-linux-androideabi- --enable-cross-compile  --target-os=linux --extra-cflags='-I/home/Administrator/android-ndk-r8b/platforms/android-9/arch-arm/usr/include' --extra-ldflags='-L/home/Administrator/android-ndk-r8b/platforms/android-9/arch-arm/usr/lib -nostdlib' --arch=arm --disable-symver --disable-debug --disable-strippingsed -i 's/HAVE_LRINT 0/HAVE_LRINT 1/g' config.hsed -i 's/HAVE_LRINTF 0/HAVE_LRINTF 1/g' config.hsed -i 's/HAVE_ROUND 0/HAVE_ROUND 1/g' config.hsed -i 's/HAVE_ROUNDF 0/HAVE_ROUNDF 1/g' config.hsed -i 's/HAVE_TRUNC 0/HAVE_TRUNC 1/g' config.hsed -i 's/HAVE_TRUNCF 0/HAVE_TRUNCF 1/g' config.h

然後把這個指令碼拷貝到上面的jni目錄下,運行cygwin到jni目錄去執行這個指令碼:

cd /home/Administrator/ffmpeg/jniexport TMPDIR=d:/temp./config.sh

第二句是設定臨時目錄,這也是一個坑,而且這個目錄要存在吧。然後第三句就開始執行配置指令碼,出現下面這樣就對了……


【編寫Android.mk】<喎?http://www.bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+ztK+zbK719DPuMu1wcujrM7S0rLKx7LOv7zG5Mv7sqm/zbXEo6zO0tKyvs2yu8/qz7i9ssHLo6y63Lbgv9PSsrD8uqzU2sDvw+bBy6GjxOPWu9Kqz8LU2LKiv72xtLW9xOO41bLFZmZtcGVnxL/CvM/g06a1xM671sO+zdDQwcujqNei0uLA78PmtcRjb25maWcuc2jT0LXjuMS2r6Os0tTJz8Pmsqm/zbXEzqrXvKOstvjH0snPw+a9ssHLINXiwO+yu9PDudzEx7j2Y29uZmlnLnNoo6mhozwvcD4KPHA+QW5kcm9pZC5ta3M8L3A+CjxwPqG+wv6zpLHg0uvCty212tK7vL6hvzwvcD4KPHA+tO3O87rNv9O2vLHIvc+24KOstPO80tf2usPQxMDt17yxuKGjz8i4xNK70Km12Le9sMmjujwvcD4KPHA+MS7Q3rjEam5pL2ZmbXBlZ8/CtcRjb25maWcuaKOs0N64xNXiwb3Q0LPJ1eLR+aO6PC9wPgo8cD48L3A+CjxwcmUgY2xhc3M9"brush:java;">#define CC_IDENT "gcc 4.4.3(GCC)"#define av_restrict// restrict2.修改libavcode libavformat libavutil libswscale目錄下的Makefile,將其中的include XXXXconfig.mak去掉

3.修改libavutil/libm.h,將其中的static方法都刪除掉

然後就可以把ndk目錄設定到環境變數path裡去,就可在cygwin中cd到最外面的那個ffmpeg目錄開始第一波嘗試了,執行ndk-build

【漫長編譯路-第二季】

1.哦,對了ndk可能還會有些問題,你只要找到ndk裡對應檔案對應的行數,一般是注釋或刪除掉那行就行了。這個我就不去再弄一次了。

本來編譯的坑還是很多的,可能都在上面的設定檔中被我改掉了,所以現在看著很輕鬆的樣子。

2.libavutil下的time.h重名問題,將該目錄的time.h改名為avtime.h,然後將所有用到libavutil/time.h的c檔案都改為libavutil/avtime.h(去目錄設定搜尋條件搜尋檔案修改唄)。

3.連結的時候說ff_log2_tab重定義了,將libavformat和libavcodec下的makefile裡log2_tab.o刪除唄,然後刪除臨時檔案再編譯下。

見到就大功告成了:


如果我描述得不清楚的話,可以參考下這篇部落格,我也是寫這個的時候才發現,真是後悔沒早點找到:

http://blog.csdn.net/xms0xms/article/details/8964999

【在cocos2dx中使用】

這裡只說最簡單的方式啊,把ffmpeg整個拷貝到cocos2d-x-2.2.1\cocos2dx下,因為引擎預設build_native.sh裡配置了這個匯入目錄。然後修改Android.mk加上下面這些話:

LOCAL_WHOLE_STATIC_LIBRARIES += libavformat LOCAL_WHOLE_STATIC_LIBRARIES += libavcodecLOCAL_WHOLE_STATIC_LIBRARIES += libavutilLOCAL_WHOLE_STATIC_LIBRARIES += libswscaleinclude $(BUILD_SHARED_LIBRARY)$(call import-module,cocos2dx)$(call import-module,cocos2dx/platform/third_party/android/prebuilt/libcurl)$(call import-module,CocosDenshion/android)$(call import-module,extensions)$(call import-module,cocos2dx/ffmpeg/jni/ffmpeg/libavformat)$(call import-module,cocos2dx/ffmpeg/jni/ffmpeg/libavcodec)$(call import-module,cocos2dx/ffmpeg/jni/ffmpeg/libavutil)$(call import-module,cocos2dx/ffmpeg/jni/ffmpeg/libswscale)

應該就能用了,而怎麼用的話,可以參考下面這個大大寫的文文,也可用來移植ios:

http://blog.csdn.net/langresser_king/article/details/14516879

注意:在android下要將播放的視頻檔案拷貝到可寫目錄(且目錄必須存在)去,不然會開啟錯誤的,謹記……

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.