ijkPlayer 编译过程记录

环境: ubuntu 20 - x64
源码: ijkPlayer 和 ffmpeg 的源码从 github转移到gitee上.

第一步 安装开发常用工具和库

工具
install git, make, yasm, curl, wget
库内容.
apt-get install libncurses5 libncurses5-dev openssl 
android开发环境
gradle、 java-11、android_sdk、android_ndk

第二步 从gitee.com上克隆 ijkPlayer 源码,修改 init-android.sh 中的github.com下载地址。如下:

IJK_FFMPEG_UPSTREAM=https://gitee.com/ljblqtechcom/FFmpeg.git
IJK_FFMPEG_FORK=https://gitee.com/ljblqtechcom/FFmpeg.git
IJK_FFMPEG_COMMIT=ff3.4--ijk0.8.7--20180103--001
IJK_FFMPEG_LOCAL_REPO=extra/ffmpeg

然后执行 ./init-android.sh 拉取源码比较正常,否则总报 Gnutls 的错误,我尝试过重新编译git-2.7的源码,也没有解决。
采用此方法才把源码拉取okay。

第三步 编译、和 ndk版本选择
我使用的是 android-ndk-r14b-linux-x86_64.zip 版本,使用过几个版本都不编译不通过。
下载地址 https://dl.google.com/android/repository/android-ndk-r14b-linux-x86_64.zip
百度网盘:
链接:https://pan.baidu.com/s/1IuaSirZ4FoGEdkFVeJVykg
提取码:37mq
–来自百度网盘超级会员V1的分享

3.1 导出环境变量

export ANDROID_SDK=~/Android/Sdk
export ANDROID_NDK=~/Android/Sdk/ndk/android-ndk-r14b
export PATH=PATH:$ANDROID_NDK:$ANDROID_SDK:$ANDROID_SDK/platform-tools

3.2 修改 compile_ffmpeg.sh 和 compile_ijk.sh 适配平台。

把此两个脚本中的适适配平台 armv5 给去除了,如下:

#ACT_ABI_64="armv5 armv7a arm64 x86 x86_64"
ACT_ABI_64="armv7a arm64 x86 x86_64"

两个文件修改方法相同。

3.3 编译 ffmpeg依赖库和 ijkplayer 库

robot@ubuntu:~/ljbPlayer/ijkplayer/android/contrib$ ./compile-ffmpeg.sh 
====================
[*] check archs
====================
FF_ALL_ARCHS = armv7a arm64 x86 x86_64
FF_ACT_ARCHS = armv7a

====================
[*] check env armv7a
====================
FF_ARCH=armv7a
FF_BUILD_OPT=

--------------------
[*] make NDK standalone toolchain
--------------------
build on Linux x86_64
ANDROID_NDK=/home/robot/Android/Sdk/ndk/android-ndk-r14b
IJK_NDK_REL=14.1.3816874
NDKr14.1.3816874 detected

--------------------
[*] check ffmpeg env
--------------------

--------------------
[*] configurate ffmpeg
--------------------
reuse configure

--------------------
[*] compile ffmpeg
--------------------
INSTALL	doc/examples/avio_dir_cmd.c
INSTALL	doc/examples/avio_reading.c
INSTALL	doc/examples/decode_audio.c
INSTALL	doc/examples/decode_video.c

...... 省略部分内容

INSTALL	libavutil/libavutil.pc

--------------------
[*] link ffmpeg
--------------------
-Wl,--fix-cortex-a8
link compat/*.o
link libavcodec/*.o
link libavcodec/arm/*.o
link libavfilter/*.o
link libavformat/*.o
link libavutil/*.o
link libavutil/arm/*.o
link libswresample/*.o
link libswresample/arm/*.o
link libswscale/*.o
link libswscale/arm/*.o

--------------------
[*] create files for shared ffmpeg
--------------------

编译ffmpeg动态库成功.


robot@ubuntu:~/ljbPlayer/ijkplayer/android$ ./compile-ijk.sh all
profiler build: NO
[armeabi-v7a] Prebuilt       : libijkffmpeg.so <= /home/robot/ljbPlayer/ijkplayer/android/contrib/build/ffmpeg-armv7a/output/
[armeabi-v7a] Compile thumb  : ijkplayer <= ff_cmdutils.c
[armeabi-v7a] Compile thumb  : ijkplayer <= ff_ffplay.c
[armeabi-v7a] Compile thumb  : ijkplayer <= ff_ffpipeline.c
[armeabi-v7a] Compile thumb  : ijkplayer <= ijkmeta.c
[armeabi-v7a] Compile thumb  : ijkplayer <= ijkplayer.c
[armeabi-v7a] Compile thumb  : ijkplayer <= ffpipeline_ffplay.c
[armeabi-v7a] Compile thumb  : ijkplayer <= ffpipenode_ffplay_vdec.c
[armeabi-v7a] Compile thumb  : ijkplayer <= ffmpeg_api_jni.c
[armeabi-v7a] Compile thumb  : ijkplayer <= ijkplayer_android.c
[armeabi-v7a] Compile thumb  : ijkplayer <= ijkplayer_jni.c
[armeabi-v7a] Compile thumb  : ijkplayer <= ffpipeline_android.c
[armeabi-v7a] Compile thumb  : ijkplayer <= ffpipenode_android_mediacodec_vdec.c
[armeabi-v7a] Compile thumb  : ijkplayer <= allformats.c
[armeabi-v7a] Compile thumb  : ijkplayer <= ijklivehook.c
[armeabi-v7a] Compile thumb  : ijkplayer <= ijkmediadatasource.c
[armeabi-v7a] Compile thumb  : ijkplayer <= ijkio.c
/home/robot/ljbPlayer/ijkplayer/android/ijkplayer/ijkplayer-armv7a/src/main/jni/ijkmedia/ijkplayer/ff_ffplay.c: In function 'convert_image':
/home/robot/ljbPlayer/ijkplayer/android/ijkplayer/ijkplayer-armv7a/src/main/jni/ijkmedia/ijkplayer/ff_ffplay.c:526:5: warning: 'avcodec_encode_video2' is deprecated (declared at /home/robot/ljbPlayer/ijkplayer/android/contrib/build/ffmpeg-armv7a/output/include/libavcodec/avcodec.h:5509) [-Wdeprecated-declarations]
     ret = avcodec_encode_video2(img_info->frame_img_codec_ctx, &avpkt, dst_frame, &got_packet);
     ^
/home/robot/ljbPlayer/ijkplayer/android/ijkplayer/ijkplayer-armv7a/src/main/jni/ijkmedia/ijkplayer/android/pipeline/ffpipenode_android_mediacodec_vdec.c: In function 'feed_input_buffer2':
/home/robot/ljbPlayer/ijkplayer/android/ijkplayer/ijkplayer-armv7a/src/main/jni/ijkmedia/ijkplayer/android/pipeline/ffpipenode_android_mediacodec_vdec.c:509:9: warning: 'av_packet_split_side_data' is deprecated (declared at /home/robot/ljbPlayer/ijkplayer/android/contrib/build/ffmpeg-armv7a/output/include/libavcodec/avcodec.h:4707) [-Wdeprecated-declarations]
         av_packet_split_side_data(&pkt);

....... 省略部分内容

[armeabi-v7a] Compile thumb  : ijksdl <= image_convert.c
[armeabi-v7a] Compile thumb  : ijksdl <= android_nativewindow.c
[armeabi-v7a] Compile thumb  : ijksdl <= ijksdl_vout_android_nativewindow.c
[armeabi-v7a] Compile thumb  : ijksdl <= ijksdl_vout_android_surface.c
[armeabi-v7a] Compile thumb  : ijksdl <= ijksdl_vout_overlay_android_mediacodec.c
[armeabi-v7a] Install        : libijkffmpeg.so => libs/armeabi-v7a/libijkffmpeg.so
[armeabi-v7a] SharedLibrary  : libijksdl.so
[armeabi-v7a] Install        : libijksdl.so => libs/armeabi-v7a/libijksdl.so
[armeabi-v7a] SharedLibrary  : libijkplayer.so
[armeabi-v7a] Install        : libijkplayer.so => libs/armeabi-v7a/libijkplayer.so
/home/robot/ljbPlayer/ijkplayer/android
profiler build: NO

[arm64-v8a] Install        : libijkffmpeg.so => libs/arm64-v8a/libijkffmpeg.so
[arm64-v8a] Install        : libijkplayer.so => libs/arm64-v8a/libijkplayer.so
[arm64-v8a] Install        : libijksdl.so => libs/arm64-v8a/libijksdl.so
/home/robot/ljbPlayer/ijkplayer/android
profiler build: NO

[x86] Install        : libijkffmpeg.so => libs/x86/libijkffmpeg.so
[x86] Install        : libijkplayer.so => libs/x86/libijkplayer.so
[x86] Install        : libijksdl.so => libs/x86/libijksdl.so
/home/robot/ljbPlayer/ijkplayer/android
profiler build: NO

[x86_64] Install        : libijkffmpeg.so => libs/x86_64/libijkffmpeg.so
[x86_64] Install        : libijkplayer.so => libs/x86_64/libijkplayer.so
[x86_64] Install        : libijksdl.so => libs/x86_64/libijksdl.so
/home/robot/ljbPlayer/ijkplayer/android

在编译ijkplayer整个过程,特别需要注意的情况就是ndk 版本,我是使用的ndk14版本。高版本的坑比较多。
接下来会使用 ijkPlayer 编写一个支持H264裸流播放的Demo。

猜你喜欢

转载自blog.csdn.net/weixin_38387929/article/details/121163473