2012-03-09 81 views
11

我在用NDK r7b構建FFMPEG的一體化靜態二進制文件,一切正常,直到我嘗試用RTMP支持構建它。用librtmp構建FFMPEG for android

我從https://github.com/guardianproject/android-ffmpeg與librtmp2.4和自定義配置usind源這樣

.configure \ 
--target-os=linux \ 
--cross-prefix=arm-linux-androideabi- \ 
--arch=arm \ 
--sysroot=/home/andrey/android-ndk-r7b/platforms/android-3/arch-arm \ 
--enable-static \ 
--disable-shared \ 
--disable-symver \ 
--enable-small \ 
--disable-devices \ 
--disable-avdevice \ 
--enable-gpl \ 
--enable-librtmp \ 
--prefix=../build/ffmpeg/armeabi \ 
--extra-cflags=-I../rtmpdump/librtmp \ 
--extra-ldflags=-L../rtmpdump/librtmp \ 

和rtmpdump目錄奠定了在同級別的ffmpeg。 據我瞭解,在我的配置中的最後兩個字符串說編譯器可能會找到librtmp的來源。 但我得到的是ERROR: librtmp not found

我沒有exreienced與NDK和明顯我缺少一些重要的部分,但我無法自己找到它。

回答

10

這是具有挑戰性的,但我認爲我有一個解決方案。配置時的問題是FFmpeg希望通過pkg-config管理系統檢測正確的librtmp安裝。

我假設您已成功交叉編譯../rtmpdump引用的目錄中的librtmp。編輯FFmpeg的配置腳本,並搜索行:

enabled librtmp && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket 

評論了這一點(把「#」在該行的前面)。現在,只需進行這些修改,重新運行配置:

--extra-cflags="-I/full/path/to/rtmpdump" 

這可能有助於在此獲得絕對路徑。此外,由於#include指令已將頭文件的前綴添加到librtmp /中,所以最後省略/ librtmp /。下一步:

--extra-ldflags="-L/full/path/to/rtmpdump -lrtmp" 

再次,絕對路徑,並指定庫鏈接,因爲我們通過配置註釋掉邏輯。

現在,配置應該成功,並且交叉編譯也應該很開心。最終的ffmpeg的二進制應在協議報告的RTMP模塊系列:

ffmpeg -protocols 
[...] 
rtmp 
rtmpe 
rtmps 
rtmpt 
rtmpte 

請注意,我沒有一個NDK開發環境來測試這上。但我通過編譯librtmp(不通過pkg-config安裝軟件包),然後執行上述步驟,在我的桌面Ubuntu系統上進行了測試。

+0

寶貴的信息,你可以看看這個:http://stackoverflow.com/questions/9605757/using-ffmpeg-with-android-ndk – iSun 2012-03-11 16:09:58

+0

我看到了這個問題,但我沒有太多的Android經驗NDK或Cygwin。 – 2012-03-11 16:52:43

+0

啊哈,不管怎樣謝謝。 – iSun 2012-03-11 18:27:14