前段时间接到一个播放视频流的需求,网上找了不少开源框架,最终发现bilibili出的ijkplayer能完美解决我的需求,由于个人是android开发,习惯使用Cywin来编译so库,在使用cywin编译ijkplayer的过程中遇到了不少的问题;于是便有了此文。
一、编译前准备
配置android ndk环境变量
export ANDROID_NDK=/cygdrive/e/ndk-win/android-ndk-r10e
install git
install yasm
install g++
install make
注意:ndk为bilili上的readme提示的r10e;
如果是使用Cywin,ndk需要的是window的ndk
修改Android.mk文件(Cywin编译需要)
如果使用Cywin编译,需要修改ijkplayer\android\ijkplayer\<CPU架构>\src\main\jni\Android.mk
文件,如果不修改该文件,编译过程中使用compile-ijk.sh all
见会出错。
原因是:
ijkplayer\android\ijkplayer\player-armv7a\src\main\jni
下使用了软链接,ijkmedia和android-ndk-prof分别链接到ijkplayer根目录下的/ijkmedia和/ijkprof
,而cygwin和android NDK在处理文件夹软链接时似乎有问题,所以并没有执行ijkmedia和ijkprof的编译。
修改方法:
1.将ijkmedia和ijkprof的makefile文件写在ijkplayer\android\ijkplayer\player-armv7a\src\main\jni\Android.mk
文件的最后,并用include包含进来。
include /home/AriaL/ijkplayer/ijkplayer-android/ijkmedia/*.mk
include /home/AriaL/ijkplayer/ijkplayer-android/ijkprof/android-ndk-profiler-dummy/jni/*.mk
2.删除\ijkplayer\android\ijkplayer\player-armv7a\src\main\jni下的ijkmedia和android-ndk-prof
3.将/android/compile-ijk.sh
中生成android-ndk-prof链接文件的部分注释掉
do_sub_cmd () {
SUB_CMD=$1
# if [ -L "./android-ndk-prof" ]; then
# rm android-ndk-prof
# fi
# if [ "$PARAM_SUB_CMD" = 'prof' ]; then
# echo 'profiler build: YES';
# ln -s ../../../../../../ijkprof/android-