一、结构说明
- 我们可以在GitHub下载或查看ijkplayer项目,地址是https://github.com/Bilibili/ijkplayer ,可看到其主要目录结构如下:
目录名称 | 说明 |
tool | 初始化项目工程脚本 |
config | 编译ffmpeg使用的配置文件 |
extra | 存放编译ijkplayer所需的依赖源文件, 如ffmpeg、openssl等 |
ijkmedia | 核心代码 |
ijkplayer | 播放器数据下载及解码相关 |
ijksdl | 音视频数据渲染相关 |
ios | iOS平台上的上层接口封装以及平台相关方法 |
android | Android平台上的上层接口封装以及平台相关方法 |
- 在android目录中我们看到的目录和说明
目录名称 | 说明 |
ijkplayer-arm64 | arm64下编译出来的.so文件 |
ijkplayer-armv5 | armv5编译出来的.so文件 |
ijkplayer-armv7a | armv7a编译出来的.so文件 |
ijkplayer-x86 | x86编译出来的.so文件 |
ijkplayer-x86_64 | x86_64编译出来的.so文件 |
ijkplayer-exo | google开源的一个新的播放器ExoPlayer,在Demo中和ijkplayer对比用的。通过安装ijkplayer可以发现setting里面可以选择不同player来渲染多媒体显示,该模块下面就是一个MediaPlayer |
ijkplayer-java | ijkplayer的一些操作封装及定义。这里面是通用的API接口,里面最主要的是IMediaPlayer,它是用来渲染显示多媒体的 |
ijkplayer-example | ijkplayer官方提供的示例 |
二、特性列表
特性名称 | 说明 |
Android平台 | 支持API 9?23 |
CPU | ARMv7a,ARM64v8a,x86(ARMv5未在真实设备上测试) |
API | API提供丰富的方法,易于集成 |
视频输出 | NativeWindow,OpenGL ES 2.0 |
音频输出 | AudioTrack,OpenSL ES |
编解码器 | MediaCodec(API 16+,Android 4.1+),支持硬件加速解码,更加省电 |
其他 | 可替代android.media.MediaPlayer,ExoPlayer |
- 在功能的具体实现上,iOS和Android平台的差异主要表现在视频硬件解码以及音视频渲染方面,两者实现的载体区别如下表所示:
Platform | Hardware Codec | Video Render | Audio Output |
iOS | VideoToolBox | OpenGL ES | AudioQueue |
Android | MediaCodec | OpenGL ES、MediaCodec | OpenSL ES、AudioTrack |
三、源码编译
https://www.toutiao.com/article/7323875544759271999/
四、启动及播放流程
https://mp.toutiao.com/profile_v4/graphic/preview?pgc_id=7416160474816987683