Window下Cygwin编译Android ijkplayer

1.安装Cygwin

按照https://blog.csdn.net/w1072654398/article/details/87369472安装,一步不差,里面就包含了必须的git,make,gcc,ysam,如果在Choess Download Site选择没有地址,可以自己添加阿里的http://mirrors.aliyun.com/cygwin/


2.下载sdk和ndk

Android的sdk,这个都有,NDK按照要求是要r10e的,按照系统下载:
ndk_r10e(Jan 2015)

Windows32-bit : http://dl.google.com/android/ndk/android-ndk-r10e-windows-x86.exe

Windows64-bit : http://dl.google.com/android/ndk/android-ndk-r10e-windows-x86_64.exe


3.修改配置

3.1

打开C:\cygwin64\home\ws\~/.bash_profile 或 ~/.profile文件,在最后添加

export ANDROID_SDK=F:/work/ASSDK/sdk

export ANDROID_NDK=F:/work/ASSDK/android-ndk-r10e

按照自己的sdk和ndk地址,注意斜杠

3.2

删除C:\cygwin64\home\ws\ijkplayer\android\ijkplayer\player-armv7a\src\main\jni下的ijkmedia和android-ndk-prof文件,没有就不用

修改C:\cygwin64\home\ws\ijkplayer\android\compile-ijk.sh文件,找到do_sub_cmd ()方法,注释掉代码


4.打开桌面Cygwin快捷方式,下载ijk,依次输入

#目前b站更新在两年前的0.8.8就不再更新了

git clone https://github.com/Bilibili/ijkplayer.git ijkplayer

cd ijkplayer

git checkout -B latest k0.8.8


5.下载ffmpeg

#回到ijkplayer目录,开始下载ffmpeg源码,300多M看网速

cd ..

./init-android.sh


6.下载完成,如果之后要重新编译或者关闭了Cygwin重开,都不用再下载了从这里开始

cd config

rm module.sh

#可以根据自己需求更改,ln -s module-lite.sh module.sh或者ln -s module-lite-hevc.sh module.sh,这是目录里面给我们提供的,hevc就是H265解码

ln -s module-default.sh module.sh


7.编译ffmpeg

#进入contrib目录先清空一下ffmpeg配置

cd ..

cd android/contrib

./compile-ffmpeg.sh clean

#这里如果要全量就./compile-ffmpeg.sh all,否则就选想要的,这里会很慢,刚开始会停留以为卡死,不用管,然后编译过程中会输出各种错误不用管,等它编译完成,一般最终都会成功大概10多分钟

./compile-ffmpeg.sh armv7a


8.编译ijk

#回到android目录,同理这里用armv7a,全量all

cd ..

./compile-ijk.sh armv7a


9.完成,直接把ijkplayer/android/ijkplayer文件夹导入AS工程,编译问题

默认的gradle版本太低,换成你目前的,会报错

9.1

Error:A problem occurred configuring project ':ijkplayer-example'.

 All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com/r/tools/flavorDimensions-missing-error-message.html

在网上查了查,只要在ijkplayer-example的build.gradle的defaultConfig内添加

#800800是根据project的build.gradle中的ext.verionCode值来定的,保持一致

flavorDimensions "800800"

9.2

Error:error: '@@array/pref_entries_player' is incompatible with attribute android:entries (attr) reference

打开相应文件,去掉一个@,写错了

9.3

要支持硬解码功能,参数设置要改ijkplayer-example\src\main\java\tv\danmaku\ijk\media\example\widget\media\IjkVideoView.java

在方法public IMediaPlayercreatePlayer(int playerType)中的defalut逻辑中:

// 原本逻辑

// ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec", 1);

// 修改逻辑,需要改成mediacodec-hevc这个参数才可以设置硬解码,注意不是下划线,网上很多写配置mediacodec_all_videos或者mediacodec_hevc都是下划线都是错误的

// 参考解答 https://github.com/bilibili/ijkplayer/issues/855 https://github.com/bilibili/ijkplayer/issues/922

ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec-hevc", 1);


10.是否支持265硬编解码

// 是否支持265硬解码

public static boolean isH265DecoderSupport() {

    int count = MediaCodecList.getCodecCount();

        for (int i =0; i < count; i++) {

            MediaCodecInfo info = MediaCodecList.getCodecInfoAt(i);

            if (info.isEncoder()) {

                continue;

            }

            String name = info.getName().toLowerCase();

            if (name.contains("decoder") && name.contains("hevc")) {

               return true;

           }

    }

    return false;

}

// 是否支持265硬编码

public static boolean isH265EncoderSupport() {

        int count = MediaCodecList.getCodecCount();

        for (int i =0; i < count; i++) {

            MediaCodecInfo info = MediaCodecList.getCodecInfoAt(i);

            if (!info.isEncoder()) {

                continue;

            }

            String name = info.getName().toLowerCase();

            if (name.contains("encoder") && name.contains("hevc")) {

                return true;

            }

        }

    return false;

}


11.参考

ijkplayer地址

https://blog.csdn.net/w1072654398/article/details/87369472

https://blog.csdn.net/u010072711/article/details/51354834

https://blog.csdn.net/ytzys/article/details/47302123

https://blog.csdn.net/u010302327/article/details/79168721

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容