ijkplayer 编译增加支持更多的音视频格式

news/2024/10/31 3:21:08/

ijkplayer是B站开源的一款基于ffmpeg的移动端播放器。但为了减少播放器的体积,很多音视频的格式播放默认都是不支持的,需要自己下载ijkplayer源码进行编译。这里以mac环境下android为例,简述ijkplayer的编译过程,以及为了支持更多音视频编码格式所要做的工作。mac环境下编译要稍微简便点,不需要安装虚拟机和linux操作系统。

一 编译ijkplayer源码

1 下载ijkplayer源码

https://github.com/Bilibili/ijkplayer

2 确保android studio开发环境环境

export ANDROID_NDK=/Users/xxx/Documents/Programs/android-ndk-r10e
export ANDROID_SDK=/Users/xxx/Library/Android/sdk

主要是android sdk和ndk路径要在环境变量中配置,配置的ndk版本最好要低点。

3 执行shell脚本,下载ffmpeg源码

在ijkplayer源码根目录下找到init-android.sh。 终端定位到ijkplayer到源码根目录,执行
./init-android.sh
可以用文本编辑器打开这个shell脚本。
里面到主要内容就是下载ffmpeg源码。执行完成后在ijkplayer源码根目录下extra目录下会多一个ffmpeg目录,

同时在android/contrib会多出如下5个文件夹。

 

jk实际编译libijkffmpeg.so时就是使用到对应架构目录下的ffmpeg源文件。

4 编译配置

在config目录下,共有3个默认的配置编译文件。
module-default.sh:支持的音视频解码器较多(编译出的so文件也比较大)。
module-lite-hevc.sh:支持hevc
module-lite.sh:支持较少的音视频解码器(默认情况下)
一般为了减少so体积,通常选择module-lite.sh。
执行
rm module.sh
ln -s module-lite.sh module.sh
类似于创建了一个快捷键。

5 编译ffmpeg,生成libijkffmpeg.so

进入 android/contrib 目录
5-1 清除ffmpeg的编译文件
执行
./compile-ffmpeg.sh clean

执行此操作后android/contrib/build/ffmpeg-armv7a/output目录下文件以及android/contrib/ffmpeg-armv7a目录中的一些编译中间成果物如.o文件也会删除(此处以armv7a架构为例说明)。

5-2 编译生成libijkffmpeg.so
执行
./compile-ffmpeg.sh armv7a
这里只编译armv7a架构,如果要编译所有架构,那么就把armv7a改为all。
如果出错,看控制台错误分析。
编译成功后会在android/contrib/build/ffmpeg-armv7a/output目录下生成libijkffmpeg.so。

6 编译ijkplayer生成libijkplayer.so libijksdl.so

进入android目录,执行
./compile-ijk.sh
生成libijkplayer.so和libijksdl.so库,至此编译过程全部完成,过程中总共生成3个so库libijkffmpeg.so libijkplayer.so以及libijksdl.so。

二 编译支持更多的音视频格式播放

ijkplayer默认支持的音视频编码格式可能并不一定能满足项目的需求,这时就需要自己去编译ijkplayer来支持更多音视频编码格式的解码播放。一般只需4步即可:

1 修改编译配置文件

进入config目录
以module-lite.sh为例,使用文本编辑器打开。

export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=pcm_alaw"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=pcm_mulaw"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=mpeg4"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=mp2*"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=ac3"

 

根据自己需要增加支持的音频格式,在文件中增加相应配置,例如需要增加MPEG4视频格式和G711音频编码格式的解码播放,则相应地enable-decoder mpeg4和pcm_alaw。

而如何知道需要增加何种的音视频格式支持,可以用ffmpeg的ffplay,直接播放一下视频,播放时会有音视频编码格式等相关信息。也可以用其它播放器在电脑上播放时查看媒体信息获知。

2 执行编译配置

还是在config目录中,执行
rm module.sh
ln -s module-lite.sh module.sh

3 编译ffmpeg,生成libijkffmpeg.so

进入android/contrib目录
先执行,如下命令,清除ffmpeg的编译文件
./compile-ffmpeg.sh clean
再执行
./compile-ffmpeg.sh armv7a
有前面可知,在android/contrib/build/ffmpeg-armv7a/output目录下会生成libijkffmpeg.so。这里只编译armv7a架构,如果要编译所有架构则将armv7a改成all,要编译其它架构则自己修改成对应的架构。

4 替换libffmpeg.so

libijkplayer.so及libijksdl.so这2个库可以不用重新编译。前者的功能主要是播放控制,以及调用ffmpeg库进行解码等,后者主要作用是视频渲染等。使用时不管是aar依赖还是gradle依赖,只要将libffmpeg.so库替换成自己编译生成的这个libffmpeg.so库就可以了。


http://www.ppmy.cn/news/48067.html

相关文章

好兄弟离职了,一周面试了20多场,我直呼内行

好兄弟离职之后,一周面试了20多场,最后进了阿里,分享一些面试经历,希望能对大家有帮助! 我的面试感受 先说一个字 是真的 “ 累 ” 安排的太满的后果可能就是经常一天只吃一顿饭,一直奔波在路上 不扯这个…

4. VBA宏注释

完整版下载链接: https://download.csdn.net/download/xijinno1/87716168 注释用于记录程序逻辑和用户信息,其他程序员将来可以阅读并理解相同的代码无缝工作。 它包括由开发者,修改者以及还可以包括合并逻辑的信息。 解释器在执行时忽略注释…

python数据结构与算法-动态规划(最长公共子序列)

一、最长公共子序列问题 1、问题概念 一个序列的子序列是在该序列中删去若干元素后得 到的序列。 例如:"ABCD”和“BDF”都是“ABCDEFG”的子序列。 最长公共子序列(LCS) 问题: 给定两个序列X和Y,求X和Y长度最大的公共子字列。 例:X"ABBCBDE”…

第05讲:OpenTracing 简介,先有标准后有天

自从 Google Dapper 的论文发布之后,各大互联网公司和开源社区开发的分布式链路追踪产品百花齐放,同时也给使用者带来了一个问题,各个分布式链路追踪产品的 API 并不兼容,如果用户在各个产品之间进行切换,成本非常高。…

【SQL 必知必会】- 第十九课 使用存储过程

目录 写在前面 19.1 存储过程 19.2 为什么要使用存储过程 19.3 执行存储过程 19.4 创建存储过程 注释代码 这一课介绍什么是存储过程,为什么要使用存储过程,如何使用存储过程,以及创建和使用存储过程的基本语法。 写在前面 本课的内容主…

5.2、Unix/Linux上的五种IO模型

5.2、Unix/Linux上的五种IO模型 1.阻塞blocking2.非阻塞non-blocking(NIO)3.IO复用(IO_multiplexing)4.信号驱动(signal-driven)5.异步(asynchronous)①异步函数介绍 1.阻塞blocking…

领跑行泊一体,纵目科技剑指自动驾驶L2到L4的规模化商业落地机遇

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 2019年,通用、丰田、特斯拉等11家车企承诺自动驾驶时间表,他们大都表示在2020年底实现高级别自动驾驶。以特斯拉为例,其CEO埃隆马斯克曾承诺在2020年实现自动驾驶食言后,随后在…

295-光纤数据收发 隔离卡 加速计算卡 基于 Kintex-7 XC7K325T的半高PCIe x4双路万兆光纤收发卡

基于 Kintex-7 XC7K325T的半高PCIe x4双路万兆光纤收发卡 一、板卡概述 板卡采用Xilinx公司的XC7K325T-2FFG900I芯片作为主处理器,可应用于万兆网络、高速数据采集、存储;光纤隔离网闸等领域。 二、功能和技术指标: 板卡功能 参…