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

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

引言:


公司现在的电台项目是我第二个接触音频播放项目,Android音视频 播放很多还是使用的MediaPlayer(大中厂除外),但是如果你用过 MediaPlayer的话,很多开发者都会吐槽有多坑,连谷歌官方都推荐 使用ExoPlayer...遇到过最坑的就是播放在线音视频的时候,网络不好 会一直加载,然后点多了还容易ANR...以前就一直想把音频播放这个 换掉,通过自行搜索和问别人,又下面几个方案(小作坊不可能 另外去写个编解码播放库):


  • ExoPlayer:Demo复杂得一匹...而且网上的资料也不是很多,pass;


  • Vitamio:自用免费,商用收费,直接就pass了;


  • 自己编译ffmpeg:一听就很复杂的,同样Pass;


  • ijkplayer:大B站开源的基于FFmpeg的轻量级Android/iOS视频播放器,网上资料挺多的,而且官方 也有维护,虽然还有1600多个issues,和mediaplayer 差不多的接口,学习成本也不高,可以加进来试试水!


最后就决定使用ijkplayer来替换原先的MediaPlayer了!


1.如何使用ijkplayer


官方github.com/Bilibili/ij…


build.gradle添加下述依赖引用即可:


dependencies {
    # 对于大部分的设备来说已经够用了
    compile 'tv.danmaku.ijk.media:ijkplayer-java:0.8.4'
    compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.4'
    # Other ABIs: 可选
    compile 'tv.danmaku.ijk.media:ijkplayer-armv5:0.8.4'
    compile 'tv.danmaku.ijk.media:ijkplayer-arm64:0.8.4'
    compile 'tv.danmaku.ijk.media:ijkplayer-x86:0.8.4'
    compile 'tv.danmaku.ijk.media:ijkplayer-x86_64:0.8.4'
    # ExoPlayer as IMediaPlayer: optional, experimental
    compile 'tv.danmaku.ijk.media:ijkplayer-exo:0.8.4'
}


这里简单说点东西来解除你可能存在的一些疑惑:


armv7aarmv5arm64x86x86_64 这些是对应的CPU架构, 一般来说准备一个armv7a就基本够了,如果系统找不到CPU架构 对应的so库会去找armeabi,多依赖一些架构只是稍微会快一点, 但是这样也伴随着apk体积的增大,这个需要你自行去权衡!!! 反正笔者就只有一个:armv7a,暂时没发现什么不服!


然后使用方法和MediaPlayer大同小异,这就不另外讲述怎么 使用了,网上一搜也很多。接下来要说下笔者遇到的一个问题:


ijkplayer默认不支持HTTPS


是的,不支持,如果你尝试使用ijkplayer播放Https开头的音频,会报这样的错误:



除了去编译ijkplayer的源码,没有其他选择,编译这玩意可把我 坑惨了,各种不懂,碰壁,不过最后所幸还是捣鼓成功了,顺道 记录下,方便后来者(顺道吐槽下网上各种抄的文章,搜到的基本 都是一样的...)


2.编译支持Https的ijkplayer


不要问我Windows上怎么编译,反正我只会Ubuntu和MAC上编译! 笔者在Ubuntu 14.04MAC OS 10.13 上都编译成功了, 在使用Ubuntu编译的时候有个坑要注意:

不要把项目克隆到外部硬盘,比如我电脑120G的SSD 还挂了一个1T的机械硬盘,一开始就clone到机械硬盘上了,然后编译 一堆问题,什么ln无法建立链接,chmod命令无效之类的,没把我给毒死, 后面clone到SSD 上一点毛病也没有,全程绿灯!


Step 1:安装Git与yasm:


sudo apt-get install git
sudo apt-get install yasm


Step 2:下载,配置SDK与NDK


sdk就不说了,你开发安卓肯定会有的,NDK一般是不默认下载的, 这里也不建议你使用SDK Manager下载的NDK,之前试过有些许问题, 建议去官网下载:


developer.android.google.cn/ndk/downloa…NDK的最小版本支持是10e,目前不支持NDK 15!


接着是配置环境变量:


Ubuntu:


设置修改下:.bashrc文件,把SDK和NDK配置上:



然后source .bashrc,键入ndk-build -v 看有没有东西输出 验证配置是否生效。



MAC:


打开终端,cd到根目录(cd ~),然后新建一个**.bash_profile**的文件: 进行如下配置



然后输入source .bash_profile,键入ndk-build -v 验证:



Step 3:拉取ijkplayer源码


git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android
cd ijkplayer-android
git checkout -B latest k0.8.4


Step 4:初始化android


./init-android.sh


Step 5:编译脚本配置


就是自动化编译时的一些配置选项,比如支持什么协议啊,支持什么音视频类型等, 这个配置文件是:config/module.sh,你喜欢可以打开看看这个文件: 比如这里是配置处理什么类型的数据的,enable启用,disable禁用。



另外官方给我们提供了三个模板给我们使用:



module-default.sh:默认,如果你喜欢更多类型可以用这个;module-lite-hevc.sh:如果您更喜欢较小的二进制大小的编解码器/格式(包括hevc功能)module-lite.sh:如果您更喜欢较小的二进制大小的编解码器/格式(默认情况下)

反正体积最小,就用module-lite.sh这个就行了,使用也很简单:


rm module.sh
ln -s module-lite.sh module.sh
source module.sh


到此你还可以打开module.sh自行进行修改,比如我只想它支持mp3, 其他格式都不支持,那么可以把不想支持的格式的enable改成disable。


Step 6:初始化android支持Https


cd ..
./init-android-openssl.sh


注:如果出现NDK或者SDK找不到,可以执行一下source ~/.bash_profile

相关文章
|
NoSQL Java Redis
redis集群拓扑结构自动更新:使用Lettuce连接Cluster集群实例时异常处理(一)
redis集群拓扑结构自动更新:使用Lettuce连接Cluster集群实例时异常处理
2530 0
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
878 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
人工智能 安全 Linux
Linux操作系统的演变与未来趋势###
本文深入探讨了Linux操作系统从诞生至今的发展历程,分析了其开源模式对技术创新和IT行业的影响,并展望了Linux在未来技术生态中的角色。通过历史回顾、现状分析和未来预测,本文旨在为读者提供一个关于Linux操作系统全面而深入的视角。 ###
|
安全 物联网 Unix
什么是安全操作系统?
什么是安全操作系统?
752 2
|
Kubernetes 监控 负载均衡
10个最佳的Kubernetes工具
Kubernetes生态工具整理
1749 0
10个最佳的Kubernetes工具
|
编解码 网络协议 vr&ar
Android平台下VR头显如何低延迟播放4K以上超高分辨率RTSP|RTMP流
这段内容讲述了VR头显中实现高分辨率视频播放的技术背景与实现方法,并强调了其重要性。高分辨率对于提升VR体验至关重要,它能提供更清晰的画面、增强沉浸感、补偿透镜放大效应,并维持宽广视场角下的图像质量。文中提到的大牛直播SDK具备极低的延迟(200-400ms),支持多种协议与格式,并具有丰富的功能特性,如多实例播放、事件回调、视频及音频格式支持等。此外,提供了基于Unity的播放器示例代码,展示了如何配置播放参数并开始播放。最后,作者指出此类技术在远程控制、虚拟仿真等应用场景中的重要意义。
364 3
|
域名解析 弹性计算 Ubuntu
ubuntu 18.04 如何设置开机自动启动脚本
本文主要为大家介绍如何通过systemd来实现ubuntu 18.04系统开机自动运行脚本。
12916 0
ubuntu 18.04 如何设置开机自动启动脚本
|
弹性计算 容灾 定位技术
ECS(Elastic Compute Service)地域和可用区的选择
ECS(Elastic Compute Service)地域和可用区的选择
451 2
|
开发框架 安全 API
【专栏】领略.NET技术的开发优势
【4月更文挑战第29天】本文探讨了.NET技术的三大优势:跨平台、高效率及强大的生态系统。.NET Core支持多平台运行,提升开发灵活性;其面向对象特性和安全机制保证了代码质量和安全性;高效的性能及丰富的类库加速了开发进程。开发工具如Visual Studio、社区资源和企业支持进一步巩固了.NET在软件开发中的地位。随着技术发展,.NET将持续为开发者创造更多价值。
338 0