1 环境搭建

1.1 编译环境说明

ijkplayer目前支持linux,mac平台编译。windows平台暂不支持。如果没有linux环境,可以使用win10自带的子系统ubuntu进行编译。win10子系统开启方法参见:https://www.jianshu.com/p/58090215bda8也可自行度娘。

本文档主要以win10子系统ubuntu为编译环境进行说明。其它平台都比win10子系统简单,这里就不做具体说明。

1.2 ijkplayer版本说明

ijkplayer默认版本支持的音视频格式和网络协议有限,基本上不满足产品需要(默认支持:mp4、flv、f4v、mkv等)。对于wav、m3u8、https协议等都不支持。需要自己编译ijkplayer源码。编译后的库的大小会有所增加。请根据自己的需要选择编译。全量支持的库大小大概有30M左右。

1.3 环境准备

NDK:android-ndk-r14b-linux-x86_64(ijkplayer仅支持r10e以上r14b及以下的NDK版本),尽量不要使用最新版本的NDK。本人使用r14b验证通过,其它版本没有验证。

2 编译步骤

2.1 安装组件

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

说明:如果安装失败,请先升级ubuntu:sudo apt-get update

2.2 配置环境变量

2.2.1 NDK环境变量配置

$ sudo unzip android-ndk_r14b-linux-x86_64.zip  //在win10子系统中,先进入到windows环境中的ndk下载目录。cd /mnt/e/XXX    e代表windows盘符

$ sudo mv android-ndk-r13b /opt/Android/    //如果没有Android目录,可以手动创建mkdir Android

添加NDK到环境变量中

$ sudo vim /etc/profile

在文件末尾添加如下内容,并保存退出

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

export PATH=$PATH:$ANDROID_NDK

2.2.2 SDK环境变量配置

android SDK的环境变量配置与NDK配置一样,参见2.2.1

完成后重启Ubuntu或者在终端中source一下profile,建议重启ubuntu,以免source不生效,后面编译报错。

2.3 代码克隆

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

cd ijkplayer-android

git checkout -B local_k0.8.8 k0.8.8 //切换分支,取k0.8.8分支。local_k0.8.8是本地分支,可以自己命名。切记一定要切换到k0.8.8分支,master或其他分支后续的编译会报错

2.4 ijkplayer编译步骤

2.4.1 编译配置

ijkplayer有三种编译配置

1)支持较多格式(完全编译,几乎所有格式都支持了),文件较大。本人使用的此种方式。最终的大小估计有30M左右。

$ 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

2.4.2 ffmpege和openssl编译

下载源码:

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

// 进入工程根目录

$ cd ijkplayer-android

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

$ ./init-android.sh

// checkout openssl android源码

$ ./init-android-openssl.sh

编译

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

$ cd android/contrib

$ ./compile-openssl.sh clean

$ ./compile-openssl.sh all

// 编译 ffmpeg

$ ./compile-ffmpeg.sh clean

$ ./compile-ffmpeg.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"

export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bzlib"

2.4.3 ijkplayer编译

// 编译ijkplayer

$ cd ..

$ ./compile-ijk.sh all

编译完成后的包在:ijkplayer-android/android/ijkplayer目录下。

2.5 集成

集成:

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'    //也可以将ijkplayer-java源码直接拷贝到工程中。

ijkplayer全量包下载地址:https://github.com/whtnlily/MyIjkplayer.git

win10子系统编译android,基于win10子系统ijkplayer全量编译(支持所有格式)流程相关推荐

  1. java 增量编译_java增量/全量编译接口应用

    JavaCompile Java compile是一个自动增量/全量编译java的api接口应用. 包含以下特性: 全量编译 增量编译 svnkit接口(svn操作web接口) 全流程使用案例 Jav ...

  2. 基于公共信箱的全量消息实现

    作者 | 百度消息中台团队 导读 消息中台为百度App以及厂内百度系产品提供即时通讯的能力,提供包括私聊.群聊.聊天室.直播弹幕等用户沟通场景,并帮助业务通过消息推送触达用户.百度App存在需要以『低 ...

  3. Mac全量编译ijkplayer生成Android库

    ijkplayer编译 Pangu-Immortal (Pangu-Immortal) · GitHub GitHub地址:GitHub - bilibili/ijkplayer: Android/i ...

  4. android 键编译,Android 音视频学习系列 (四) 一键编译 32/64 位 FFmpeg 4.2.2

    前言 2020/5/20 增加了硬件解码编译脚本 编译环境 Centos + NDK20b + FFmpeg4.2.2 + Android-21/16 2020/4/26 更新了编译 64 位脚本 编 ...

  5. win10怎么安装android+sdk,win10系统安装Android sdK的具体步骤

    有关win10系统安装Android sdK的操作方法想必大家有所耳闻.但是能够对win10系统安装Android sdK进行实际操作的人却不多.其实解决win10系统安装Android sdK的问题 ...

  6. android 基于ffmpeg将视频采集的nv21转h264格式数据

    准备工作 android studio 2.2以上 本项目是基于ndk 开发的项目,使用android studio + cmake进行开发 cmake配置详情可参考: http://www.jian ...

  7. 【OBS编译】基于VS2019的W10下的编译

    最近想学习一下开源库的编译,同时又想搞一下音视频,所以选择了OBS,我是想搞一下桌面录制 网络直播,话不多说,操作如下: 官网现在已经更新到28.0.1,支持QT6.0,要求装VS2022,可惜我的电 ...

  8. Android平台GB28181设备接入端语音广播支持PS格式

    技术背景 对接Android平台GB28181设备接入端语音广播的时候,我们有遇到过INVITE SDP需要PCMA格式的audio,对方同时回了PS和PCMA两种,然后,发数据的时候,直接发了PS的 ...

  9. 基于间隔推送全量更新数据状态的设计方法

    2019独角兽企业重金招聘Python工程师标准>>> 假如有个直播间,在数据有更新的时候,能及时反映在客户端上.通信方式来说,有两种: 1.拉取模式. 2.推送+拉取模式(或者纯推 ...

最新文章

  1. linux++tar打包目录,linux中tar命令打包目录与排除目录打包linux操作系统 -电脑资料...
  2. 如何跑通第一个 DataStream 作业?
  3. libevent源码学习-----event_base事件循环
  4. 前端学习(2459):账户设置
  5. RESTful JSON Web服务最佳实践
  6. 软件測试之独步武林系列(一)
  7. Linux下的“句柄”(文件句柄,窗口句柄)
  8. VMware vRealize Operations Manager的内部版本号(2145975)
  9. oracle24801错误,[数据库]oracle错误(ORA
  10. 安装Visual Studio 2008系统要求
  11. 《线性代数》同济六版 总结
  12. python绘制正态分布图像
  13. 不知道是真是假的流量购买---有待考察
  14. 基于MATLAB GUI的指纹识别系统
  15. PSP《大众高尔夫2P》XB资源包算法分析(2)
  16. 川大计算机系1999级高伟,四川大学计算机系主任魏骁勇研发人脸识别无人机课堂点名...
  17. 一个优秀IT专家的成长历程-献给所有的颓废或即将颓废的人们
  18. LVGL打印LOG日志
  19. GitHub 上适合新手的开源项目(Python 篇)
  20. C/C++程序员求职面试指导

热门文章

  1. 每天5分钟玩转kubernetes_DNS 访问 Service 每天5分钟玩转 Docker 容器技术(138)
  2. Python基础 ( 十 ) —— 面向对象(多态、封装、反射、动态导入)
  3. 2011 ACM 0和1思想
  4. 12. Docker修改默认存储位置
  5. Excel表格生成sql语句
  6. 最小生成树prim、
  7. 在C#中用RX库和await来实现直观的状态机
  8. Oracle Hint
  9. JavaScript 特效代码集
  10. npm时需要python