当前位置: 代码迷 >> 综合 >> IjkPLayer【3】源码项目结构分析
  详细解决方案

IjkPLayer【3】源码项目结构分析

热度:54   发布时间:2023-10-23 05:11:10.0

一、Ijkpkayer

    Ijkplayer是B站开源的播放器项目,虽然已经有三年没有更新了,但是作为一个比较经典的视屏播放器项目还是很有必要学习的。

   如果对Ijkplayer还不熟悉可以看:

      IjkPlayer【1】 Demo Android的最简单实现

      IjkPlayer【2】 API 查询

二、项目结构

    以下是IjkPlayer的项目结构,依赖关系从下到上很很明显,另外ffmpeg作为视屏编解码的核心在途中是有意超出了一部分到libijkplayer.so的,因为在ijksdl和ijkplayer中都引用到了ffmpeg。

    ffmpeg、libyuv、soundtouch 是三方开源库

    libijkj4a、android-ndk-prof、libijksdl、libijkplayer 是Ijkplayer项目,除了android-ndk-prof,其他三个源码都在项目中的ijkmedia文件夹中。

IjkPLayer【3】源码项目结构分析

三、项目目录 

|ijkplayer
|----android  //Ijkplayer  Android 项目源码
|----config   //ffmpeg的配置脚本
|----|----module.sh            //ffmpeg 当前配置脚本,可用以下三个模板替换当前脚本
|----|----module-default.sh    //默认配置
|----|----module-lite.sh       //最小化配置
|----|----module-lite-hevc.sh  //基于最小化配置添加hevc功能配置
|----doc      //介绍说明
|----extra    //三方依赖库保存的文件夹
|----|----init-extra.sh  // 引用本地存在的库
|----ijkmedia  //IjkPlayer Native部分源码 
|----ijkprof  
|----ios       //IjkPlayer IOS 部分源码
|----tools     //git操作项目的工具脚本
|----|----pull-repo-base.sh  
|----|----pull-repo-ref.sh   
|----|----setup-as-commiter.sh
|----|----sync-mirrors.sh
|----init-android.sh         //Android初始化脚本
|----init-android-exo.sh     //被compile-ijk.sh调用
|----init-android-j4a.sh     //被compile-ijk.sh调用
|----init-android-libsoxr.sh  //被compile-ijk.sh调用
|----init-android-libyuv.sh   //被init脚本调用
|----init-android-openssl.sh  //添加openssl需要在编译ffmpeg之前执行openssl的init和compile
|----init-android-prof.sh     //被compile-ijk.sh调用
|----init-android-soundtouch.sh  //被compile-ijk.sh调用
|----init-config.sh           //被init脚本调用
|----init-ios.sh             //ios初始化脚本
|----init-ios-openssl.sh     //添加openssl需要在编译ffmpeg之前执行openssl的init和compile
|----version.sh               //查看版本的脚本

四、项目的构建流程分析

    1)init

          不管是Android还是IOS都要分别先执行init-android.sh和init-ios.sh。init脚本会按顺序执行以下任务:

           1、 使用git拉ffmpeg取源码到extra文件夹中,并在Android或IOS项目中创建不同CPU架构的分支。

           2、检测ffmpeg在config文件夹中的配置文件。

           3、下载libyuv源码

           4、 下载soundtouch源码

    2)Compile-ffmpeg

         这一步主要是将第一步中下载好的源码进行编译。ffmpeg编译的配置文件是config\module.sh生成的。

         分别在Android和IOS中执行对应的compile-ffmpeg.sh脚本即可,脚本会将ffmpeg的动态链接库合并成为一个动态链接库。

         如果想要ffmpeg添加openssl需要先编译openssl,执行init-android-openssl.sh下载OpenSSL,执行compile-openssl.sh编译openssl,在编译ffmpeg时compile-ffmpeg.sh脚本会根据openssl是否存在自动添加无需其他配置。

    3)compile-ijk

         编译ijkmedia源码,Android使用android\compile-ijk.sh脚本进行编译,编译完ijk后就可以开发项目开始开发了。