ijkplayer编译so库真没那么难(下)

简介: 公司现在的电台项目是我第二个接触音频播放项目,Android音视频 播放很多还是使用的MediaPlayer(大中厂除外),但是如果你用过 MediaPlayer的话,很多开发者都会吐槽有多坑,连谷歌官方都推荐 使用ExoPlayer...遇到过最坑的就是播放在线音视频的时候,网络不好 会一直加载,然后点多了还容易ANR...

Step 7:清除一波


cd android/contrib
./compile-openssl.sh clean
./compile-ffmpeg.sh clean


Step 8:编译openssl


./compile-openssl.sh all


Step 9:编译ffmpeg


这里的话看你需要,如果想编译所有版本的so库,就跟all,如果是特定 CPU架构就跟cpu架构,比如:./compile-ffmpeg.sh armv7a编译特定需要的肯定是比全部耗时短~


./compile-ffmpeg.sh all


Step 10:编译ijkplayer


加all默认编译所有架构的so库,不加默认只编译armv7a架构


./compile-ijk.sh all


编译需要漫长的等待,编译成功后,会在目录下生成一个ijkplayer的工程:



到此,编译一个支持HTTPS的ijkplayer就完成了,接着是怎么用这个东西啦:


再吐槽一句:网上很多教编译的,到此就完了,完全不跟别人说怎么用, 我一开始以为只要把so库放到自己项目的libs下就可以了,结果各种编译 报错,我真服了,大佬们写文章别虎头蛇尾啊!!!


最简单的使用方法,就是把这个项目当成一个library导入到项目中, 就是build.gradle里多一个compile project(':ijkplayer'), 然后你就可以用了,记得把你之前写的:


compile 'tv.danmaku.ijk.media:ijkplayer-java:0.8.4'
compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.4'


这些依赖删掉,不然还是会报不支持HTTPS的! 一般到这里引用到项目里就够了,但是小猪不是个容易满足的人! 所以有了下面的折腾!


3.删减无关东西,生成aar依赖库


觉得又很多无关的东西,说下小猪的期望吧:


  • 1.只是用来播放音乐(exo和example部分可以去掉);


  • 2.只需要armv7a架构的(删除其他架构,并把armv7a的so库放到ijkplayer-java);


  • 3.最后只保留一个ijkplayer-java,导出成ijkplayer.aar文件供自己的项目使用;


接着一步步来把实现小猪的期望吧:


Step 1


:右键项目 Open Module Settings,点击减号把除了ijkplayer-example 和ijkplayer-java的依赖都删除:



接着打开ijkplayer-java/src/main/,新建一个libs文件夹, 同时打开ijkplayer-armv7a/main/libs,把里面的armeabi-v7a文件 夹整个拷到ijkplayer-java的libs文件夹下。



然后可以把除了ijkplayer-example和ijkplayer-java的其他都删掉了, 接着修改下ijkplayer-java的build.gradle文件,删掉最后一句,以及 修改下版本信息。



接着编译一波整个工程,运行下,点开simple,随便点首歌看看能否播放, 如果可以正常播放,那么就进入下一步了,导出aar库。


Step 2:编译aar库


这个倒是简单,点击右侧gradle,依次打开,右键run就好



执行完毕,会在build/outputs/aar目录下生成aar文件。



Step 3:把aar文件添加到项目中


这个也很简单,直接丢到app的libs文件夹下,然后build.gradle下添加依赖,(笔者直接把ijkplayer-java-release.aar改名成 ijkplayer.aar)


implementation(name: 'ijkplayer', ext: 'aar')


接着,项目里写个简单的播放音乐的代码试试水,按钮点击播放一个音乐:


public class MusicPlayActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_music_play);
        Button btn = findViewById(R.id.button);
        btn.setOnClickListener(v -> {
            IjkMediaPlayer player = new IjkMediaPlayer();
            player.setAudioStreamType(AudioManager.STREAM_MUSIC);
            player.setScreenOnWhilePlaying(true);
            player.setOnPreparedListener(IMediaPlayer::start);
            try {
                player.setDataSource("https:xxxx.mp3");
                player.prepareAsync();
            } catch (IOException e) {
                e.printStackTrace();
            }
        });
    }
}


如果播放正常的话,说明我们的移植非常成功,如果你没有用模块化, 到此就可以结束了,如果你像我一样用了模块化,而且还把音频播放 独立成了一个模块,app -> 音频播放模块 -> ijkplayer.aar, 恭喜你,编译直接报错,找不到aar,2333!解决方法的话,你要 接着看下面的啦~


4.模块化,模块使用aar找不到问题解决


需要修改三个build.gradle文件,依次是音频播放模块,app,以及application层级

音频播放模块的build.gradle



app层级的build.gradle:



application层级的build.gradle



接着build一波项目,就可以啦~


小结


耗时几天,总算是编译成功,而且收获颇多了,也懂了了一个道理: 人难免有畏难情绪,对于学习新的东西总会下意识的抗拒,觉得难, 但是大部分时候只是看上去难,当你去学了,并坚持一段时间,你 会发现,其实并没有你想象中那么难~


最后附上缩减后的ijk-player和aar包,有需要的自取:github.com/coder-pig/i…


相关文章
|
8月前
|
Ubuntu Linux
ffmpeg编译x265
ffmpeg编译x265
260 0
ffmpeg编译x265
|
8月前
|
搜索推荐 Java Linux
记一次编译Android源码
记一次编译Android源码
|
Android开发 C++ 开发者
NDK21编译ffmpeg5.0.1
安卓NDK编译ffmpeg
121 0
|
Windows
ffmpeg不提供自己的编译结果了
ffmpeg不提供自己的编译结果了
94 0
ffmpeg不提供自己的编译结果了
编译ffmpeg没有生成编译后ffplay
编译ffmpeg没有生成编译后ffplay
211 0
|
Java 开发工具 C++
|
编解码 Ubuntu 固态存储
ijkplayer编译so库真没那么难(上)
公司现在的电台项目是我第二个接触音频播放项目,Android音视频 播放很多还是使用的MediaPlayer(大中厂除外),但是如果你用过 MediaPlayer的话,很多开发者都会吐槽有多坑,连谷歌官方都推荐 使用ExoPlayer...遇到过最坑的就是播放在线音视频的时候,网络不好 会一直加载,然后点多了还容易ANR...
398 0
|
Android开发 C++
【Android FFMPEG 开发】Android Studio 工程配置 FFMPEG ( 动态库打包 | 头文件与函数库拷贝 | CMake 脚本配置 )(二)
【Android FFMPEG 开发】Android Studio 工程配置 FFMPEG ( 动态库打包 | 头文件与函数库拷贝 | CMake 脚本配置 )(二)
177 0
【Android FFMPEG 开发】Android Studio 工程配置 FFMPEG ( 动态库打包 | 头文件与函数库拷贝 | CMake 脚本配置 )(二)
|
Ubuntu 编译器 Android开发
【Android FFMPEG 开发】Android Studio 工程配置 FFMPEG ( 动态库打包 | 头文件与函数库拷贝 | CMake 脚本配置 )(一)
【Android FFMPEG 开发】Android Studio 工程配置 FFMPEG ( 动态库打包 | 头文件与函数库拷贝 | CMake 脚本配置 )(一)
192 0
【Android FFMPEG 开发】Android Studio 工程配置 FFMPEG ( 动态库打包 | 头文件与函数库拷贝 | CMake 脚本配置 )(一)
|
编解码 Ubuntu Java
NDK FFmpeg 编译
FFmpeg 全称(First Forward MPEG),是一款领先的开源多媒体框架,采用 LGPL 或 GPL 许可证,除了具有音视频编解码功能外,还有视频格式转换、视频抓图、视频水印、推流等功能。 FFmpeg 在 Linux 平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括 Windows 、Mac OS X 等。
334 0
NDK FFmpeg 编译

热门文章

最新文章