开源播放器ijkplayer的使用

article/2025/8/24 18:43:25

编译

快速入门:

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

  • 快速集成

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

# required
allprojects {repositories {jcenter()}
}dependencies {# required, enough for most devices.// 必须:足以适应大多数设备compile 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8'# Other ABIs: optional// 可选:其他架构compile 'tv.danmaku.ijk.media:ijkplayer-armv5:0.8.8'compile 'tv.danmaku.ijk.media:ijkplayer-arm64:0.8.8'compile 'tv.danmaku.ijk.media:ijkplayer-x86:0.8.8'compile 'tv.danmaku.ijk.media:ijkplayer-x86_64:0.8.8'# ExoPlayer as IMediaPlayer: optional, experimental
// 实验性功能:对ExoPlayer的封装,封装成功IMediaPlayercompile 'tv.danmaku.ijk.media:ijkplayer-exo:0.8.8'
}

使用默认的支持的格式相对较少,测试后大概有mp4、flv、f4v和mkv(0.8.8支持),如果要更多格式需要自己下载源码在Ubuntu中编译。

编译ijkplayer

  • 所需环境
    系统:Ubuntu 18.04.1 LTS(虚拟机推荐使用VirtualBox)
    NDK:android-ndk-r13b-linux-x86_64(ijkplayer仅支持r10e以上r14b及以下的NDK版本)
    项目:ijkplayer k0.8.8
  • 安装Ubuntu
    (略)
  • 安装组件
$ 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
  • 配置环境变量

在开始编译之前需要先配置ANDROID_NDK环境变量。
下载NDK后解压到/opt/Android/目录下

$ sudo unzip android-ndk_r13b-linux-x86_64.zip
$ sudo mv android-ndk-r13b /opt/Android/    //提前手动创建好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
  • 克隆ijkplayer代码
$ git clone https://github.com/Bilibili/ijkplayer ijkplayer-android
  • 编译配置

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
  • 下载源码

开源项目中并没有直接包含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
// 编译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的使用

ijkplayer-android/android/ijkplayer目录是一个 Android Studio 工程,经过编译后即是一个完整的工程,可以直接拷贝出来用Android Studio打开使用。
ijkplayer-example:示例
ijkplayer-java:java层的库(必须的)
ijkplayer-xxx:各种架构的so库
ijkplayer-exo:对ExoPlayer的封装

  1. 引入.so文件:这里用的是源码编译后,导入so文件的方式,把相应的so文件放在自己工程的libs文件夹中。

在app的build.gradle添加

   sourceSets {main {jniLibs.srcDir 'libs'}}

 

2.把ijkplayer-java项目作为module引入项目

并在app的build.gradle中引入

implementation project(path: ':ijkplayer-java')

或者不引入module只需要依赖对应版本的java层的库即可,这里是k0.8.8

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

至此便完成了ijkplayer的编译和引入。


http://chatgpt.dhexx.cn/article/C0lBEhMZ.shtml

相关文章

ijkplayer笔记

一、初始化 - (id)initWithContentURLString:(NSString *)aUrlStringwithOptions:(IJKFFOptions *)options {if (aUrlString nil)return nil;self [super init];if (self) {ijkmp_global_init();ijkmp_global_set_inject_callback(ijkff_inject_callback);[IJKFFMoviePlayer…

Ijkplayer编译

记录一下编译ijkplayer过程 一、环境 1.1、VMware ubuntu 1.2、安装git、vim sudo apt install git sudo apt install vim二、配置编译环境 2.1、配置AndroidSDK环境 2.1.1、下载AndroidSDK wget http://dl.google.com/android/android-sdk_r24.2-linux.tgz国内下载地址…

ijkplayer播放器剖析(一)让ijkplayer播起来

一、引言: ijkplayer是一款对FFmpeg封装非常好的第三方开源播放器,遗憾的是,ijkplayer2.0似乎不开源,并且1.0版本更新也基本停止了,很多公司都会采用ijkplayer作为其播放应用的内核,这款集合软硬件编解码功…

13_android编译ijkplayer

13_android编译ijkplayer 一.编译环境 macOS Big Sur 11.4NDK r10eHomeBrewgit 二.编译前准备 配置ANDROID_SDK和ANDROID_NDK环境变量 安装git,make, yasm brew install git brew install make brew install yasm三.使用git获取ijkplayer最新源码 g…

ijkplayer项目

ijkplayer项目 环境配置 NDK全称:Native Development Kit。 1、NDK是一系列工具的集合。NDK提供了一系列的工具,帮助开发者快速开发C(或C)的动态库,并能自动将so和java应用一起打包成apk。这些工具对开发者的帮助是巨…

ijkplayer android 内存,IjkPlayer

ijkplayer是b站开源的超级好用的视频播放器,小编这里为大家送上。相信大家都早有耳闻。ijkplayer Android和ios都可用,还支持多种视频的硬解码。人生苦短,不如快点试一试。需要的朋友快来西西下载吧! 应用简介 ijkplayer是Bilibil…

android集成 ijkplayer Ijkplayer集成使用方案 + demo

首先想使用ijkplayer的话,肯定得先编译啦,但是我之前已经编译好了,时间是2018年3月份左右,版本也是当时最新的0.8.8,所以大可放心使用 其实拉到项目中还是很简单的。也就是把要适配的.so库拉到项目中,再把需…

ijkplayer 源码分析(上)

本文基于0.8.8版本的 ijkplayer ,对其源码进行剖析,涉及到不同平台下的封装接口或处理方式时,均以 Android 为例。 ijkplayer 是一款比较出众的开源 Android/IOS 跨平台播放器,基于 ffplay,API 易于集成,可…

ijkplayer播放器剖析(五)视频同步与渲染机制分析

ijkplayer播放器剖析系列文章: kplayer播放器剖析(一)从应用层分析至Jni层的流程分析 ijkplayer播放器剖析(二)消息机制分析 ijkplayer播放器剖析(三)音频解码与音频输出机制分析 ijkplay…

ijkplayer播放器详解使用教程

1.认识ijkplayer 最近公司准备开发一款视频播放及直播的应用,找了许多开源的框架,大部分都是基于ffmpeg开发的。最开始准备用Vitamio框架开发的,相关的文章也比较丰富,结果对于非个人移动应用均需购买Vitamio使用授权。不过B站开…

ijkplayer播放器架构从原型到升级

ijkplayer是一款跨平台的播放器,支持Android与iOS端,核心部分基于ffmpeg,支持Android的mediacodec硬解与iOS的videotoolbox硬解,视频图像采用OpenGL进行渲染。许多主流播放器都使用ijkplayer作为播放方案。接下来我们从核心播放流…

游戏手柄改typec接口

前言 几年前买的杂牌游戏手柄坏了好久,连接十分不稳定,稍微动一下线就会断连,我推断是线的质量不好,理论上将把线换掉应该就好了。一不做二不休,我想直接改成typec接口,手柄与数据线分离,这样就…

nl80211_iftype接口类型详解

NL80211_IFTYPE_UNSPECIFIED 上层协议未指定硬件接口类型,由驱动指定 NL80211_IFTYPE_ADHOC independent BSS member,各个无线主机之间对等交换数据 NL80211_IFTYPE_STATION managed BSS member NL80211_IFTYPE_AP 接入点,通常一端通过有…

android接口和type c对比,USB Type-C究竟比3.5mm音频接口好在哪里?

随着苹果宣布将在iPhone7/7 Plus上取消传统的3.5mm音频接口,不少动作快的手机厂商已经即使跟进了,目前乐视所有新机和摩托罗拉Moto Z均使用USB Type-C接口代替3.5mm音频接口,这样做究竟有什么好处呢? 基础知识 首先我们需要知道,3.5mm接口所传输的是立体声模拟音频,这也就…

TYPE-C接口的定义诠释以及功能参数挖掘

现在的安卓手机大多都采用了Type-C接口,如华为、荣耀、小米、三星、魅族等。对于这个接口,大家不再陌生,但大多数人对它的认识还停留在 “支持正反插”、“用来充电” 的基础层面。今天就来深入挖掘一下TYPE-C发展七年至今,为何能…

Type-C接口原理图,附引脚说明

维基链接:https://zh.wikipedia.org/wiki/USB_Type-C 针名描述针名描述A1GND接地B12GND接地A2SSTXp1SuperSpeed差分信号#1,TX,正B11SSRXp1SuperSpeed差分信号#1,RX,正A3SSTXn1SuperSpeed差分信号#1,TX&…

typec接口知识

typec接口定义(24脚) typec母头 typec公头(一对D,D-,只有一个CC脚,另一个CC脚变成了VCONN) D/D-:当USB3接口不可用的时候,这些引脚为USB2信号提供信号通道。 Vbus/GND:这些引脚能够为上行数据接口提供100W的供电能力,…

深入学习USB(6)USB Type-C接口定义概念解析

文章目录 **一、Usb type c接口定义介绍****二、USB3.1 type-c接口特性****三、USB Type-C接口的优点****四、usb type-c接引脚定义****五、usb type-c接口主要功能****六、usb type-c接口工作流程**七、市场上Type-C/PD有哪几种分类呢? 一、Usb type c接口定义介绍…

lightning接口_苹果Lightning接口与Type-C接口,谁更胜一筹?

曾几何时,在苹果的强势助攻下,Lightning接口在数码界曾一度混得风生水起!然而,近年来随着智能手机的发展,手机接口快速升级,其中Type-C接口凭借更快的数据传输、充电速度等优势,越来越多的出现在大家的视线中,隐隐盖过Lightning接口的风头,就连特立独行的苹果也对其青…

Type-C接口技术(一)

前言 电子产品接口的迅速发展是电子技术迅速发展的一个缩影,随着现在电子产品对数据传输和充电功率要求越来越高的情况下,一些以前常用接口开始慢慢被淘汰,而支持更高速率和充电功率的的Type-C接口慢慢开始大放异彩,此外支持盲插…