最近,在开发时,正好遇到了如何在Windows上安装ijkplayer的问题。
ijkplayer是完全基于FFmpeg的
参考这两篇编译安装ffmpeg的文章,也许对我们有一些帮助:
但是,仅仅这两篇文章还不能解决我们的问题,这是因为 ijkplayer的编译环境主要是Mac下的UNIX系统,在Mac环境下很好配置。但是
对于需要在Windows下开发的用户,就需要做一些修改了。
首先安装cygwin 配置Android开发环境等, 下载ndk等细节问题就不说了。
直接上干货:
首先,新建一个文件夹 如Ijkplayer, 用git下载 ijkplayer源码
在Ijkplayer目录下,创建如下sh脚本 build-android.sh(注意,最好用编辑器如 notepad++创建,然后将文件转换为UNIX格式,也可以直接在cygwin的命令行里, 将文件转换为UNIX格式,就不多说了)
build-android.sh如下
#!/bin/bash
#!/bin/bash
cd ijkplayer
#based on the current version
git checkout -B latest k0.5.1
SDK=E:/AS_AndroidSDK/
NDK=E:/Android_NDK/android-ndk-r11c
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/*-x86/bin
echo setting the sdk and/or ndk path
export ANDROID_SDK=$SDK
export ANDROID_NDK=$NDK
export TMPDIR=E:/cygwin64/tmp
echo config for ffmepg module
cd config
rm module.sh
ln -s module-default.sh module.sh
cd ..
echo download ffmpeg source code
./init-android.sh
#cd ijkplayer
echo intall ffmepg
cd android/contrib
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all
echo compile ijkplayer
cd ..
./compile-ijk.sh all
以上就是 基本按照官方的脚本实例来写的
用管理员权限打开cygwin.bat ,
进入创建的 Ijkplayer目录
直接执行 ./build-android.sh
但是,可能遇到注意一下问题:
1 arm-linux-androideabi-gcc cannot create a executable file , gcc test failed
在sh中,添加export TMPDIR=E:/cygwin64/tmp 这一句是需要的,首先创建相应temp文件夹,不然会抱 gcc 无法创建executable文件错误
由于 我们使用cygwin 环境下编译的, 因此ijk的脚本,会将找cygwin-x86或者cygwin-x86_64等文件夹,执行时找不到。就需要我们在相应目录下,复制已有的 windows-x86和 windows-x86_64文件夹,将其命名为cygwin-x86或者cygwin-x86_64。 凡是报这样错的 都做统一修改即可
3 ndk-build 不能找到
这是因为Windows版 NDK目录下没有ndk-build,只有ndk-build.cmd
因此,需要到, ijkplayer/android目录下 修改compile-ijk.sh文件,将 ndk-build改为ndk-build.cmd
4 arm-linux-androideabi-gcc 找不到, 接着出现在ffmpeg-*/output/prebuilt下找不到 libffmpeg.so文件的情况
这个问题很迷惑, 在直接编译FFmpeg时也遇到过了,一般是 arm-linux-androideabi-gcc.exe的路径找不到。 添加到系统环境中即可,即将
NDK 目录toolchains\arm-linux-androideabi-4.9\prebuilt\cygwin-x86\bin添加进去
但是即便是这样添加了 还是无济于事,
因此,可以在ijkplayer/android/contrib/tools里,修改do-compile-ffmpeg.sh
在 284行的./configure下面 添加
--extra-libs=-lgcc \ 即可解决改问题
5 以上编译 ffmpeg成功后, 还是出现,ffmpeg-*/output/prebuilt下找不到 libffmpeg.so文件的情况
这个时候,可以将ijkplayer\android\ijkplayer\ijkplayer-*\src\main\jni\ffmpeg 下的 android.mk文件的 LOCAL_SRC_FILE的$(MY_APP_FFMPEG_OUTPUT_PATH) 路径 改为绝对路径 路径/IjkPlayer/ijkplayer/android/contrib/build/ffmpeg-armv7a/output/即可