云网牛站
所在位置:首页 > Linux教程 > 在Ubuntu 18.04.1里编译开源播放器ijkplayer

在Ubuntu 18.04.1里编译开源播放器ijkplayer

2018-10-11 10:53:06作者:云华兄稿源:linux站

本文所需的环境是操作系统为Ubuntu 18.04.1 LTS,NDK为android-ndk-r13b-linux-x86_64,采用ijkplayer k0.8.8版本。使用默认的支持的格式相对较少,测试后大概有mp4、flv、f4v和mkv(0.8.8支持),如果要更多格式需要自己下载源码在Ubuntu中编译。

 

ijkplayer简介

ijkplayer是Bilibili发布的轻量级Android/iOS开源视频播放器。核心代码主要是用C写的,主要由ffmpeg(解码)+openssl(https)+播放器相关组成。编译可裁剪,支持直播、点播(在线播放)、硬件加速解码、弹幕等,完整版支持格式较多,包括且不限于mp4、avi、asf、dat、f4v、flv、mkv、mov、mpg、rmvb、ts、vob、webm、wmv等视频封装格式。

 

快速集成

在Android Studio中加如下依赖即可:

// 必须:足以适应大多数设备

implementation 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'

implementation 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8'

// 可选:其他架构

implementation 'tv.danmaku.ijk.media:ijkplayer-armv5:0.8.8'

implementation 'tv.danmaku.ijk.media:ijkplayer-arm64:0.8.8'

implementation 'tv.danmaku.ijk.media:ijkplayer-x86:0.8.8'

implementation 'tv.danmaku.ijk.media:ijkplayer-x86_64:0.8.8'

// 实验性功能:对ExoPlayer的封装,封装成功IMediaPlayer

implementation 'tv.danmaku.ijk.media:ijkplayer-exo:0.8.8'

 

编译ijkplayer

1.所需环境

系统:Ubuntu 18.04.1 LTS(虚拟机推荐使用VirtualBox,或者VMware也可以)

NDK下载:android-ndk-r13b-linux-x86_64(ijkplayer仅支持r10e以上r14b及以下的NDK版本)

项目下载:ijkplayer k0.8.8

2.安装Ubuntu

参考:Win10使用VMware14安装ubuntu-18.04.1-desktop-amd64.iso系统

3.安装组件

$ sudo apt-get install vim openssh-server git curl wget tar unzip build-essential openjdk-8-jdk yasm python

// 用bash代替dash (不一定需要),弹出窗口选择NO

$ sudo dpkg-reconfigure dash

4.配置环境变量

在开始编译之前需要先配置ANDROID_NDK环境变量。

下载NDK后解压到/opt/Android/目录下:

$ sudo unzip android-ndk_r13b-linux-x86_64.zip

$ sudo mv android-ndk-r13b /opt/Android/

添加环境变量到profile:

$ sudo vim /etc/profile

在文件末尾增加如下内容:

export ANDROID_NDK=/opt/Android/android-ndk-r13b

export PATH=$PATH:$ANDROID_NDK

完成后重启Ubuntu或者在终端中source一下profile:

$ source /etc/profile

5.克隆ijkplayer代码

$ git clone https://github.com/Bilibili/ijkplayer ijkplayer-android

6.编译配置

ijkplayer有三种编译配置:

1).支持较多格式(完全编译,几乎所有格式都支持了),文件较大:

$ cd config

$ rm module.sh

$ ln -s module-default.sh module.sh

2).支持较少格式,包含hevc:

$ cd config

$ rm module.sh

$ ln -s module-lite-hevc.sh module.sh

3).支持较少格式(默认):

$ cd config

$ rm module.sh

$ ln -s module-lite.sh module.sh

7.下载源码

开源项目中并没有直接包含ffmpeg和openssl源码,所以编译前需要先下载:

// 进入工程根目录

$ cd ijkplayer-android

// checkout ffmpeg 源码,ffmpeg有300多M,下载可能会有点慢

$ ./init-android.sh

// checkout openssl android源码

$ ./init-android-openssl.sh

8.编译

// 编译openssl(用于支持https)

$ cd android/contrib

$ ./compile-openssl.sh clean

$ ./compile-openssl.sh all

// 编译 ffmpeg

$ ./compile-ffmpeg.sh clean

$ ./compile-ffmpeg.sh all

// 编译ijkplayer

$ cd ..

$ ./compile-ijk.sh all

注:如果在编译ffmpeg时有报:fatal error: linux/perf_event.h: No such file or directory错误,那么在ijkplayer-android/config/module.sh的末尾增加:

export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-linux-perf"

再重新编译即可。

 

使用方法

ijkplayer-android/android/ijkplayer目录是一个Android Studio工程,经过编译后即是一个完整的工程,可以直接拷贝出来用Android Studio打开使用。

ijkplayer-example:示例

ijkplayer-java:java层的库(必须的)

ijkplayer-xxx:各种架构的so库

ijkplayer-exo:对ExoPlayer的封装

也可以将lib工程中的so拷贝到新建的工程中,只需要依赖对应版本的java层的库即可,这里是k0.8.8:

implementation 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'

 

相关主题

音乐播放器:Quod Libet,Audacious,Lollypop,Gradio,sox,附安装方法

精选文章
热门文章