欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2021-12-30 07:17:33
一、Ijkpkayer Ijkplayer是B站开源的播放器项目,虽然已经有三年没有更新了,但是作为一个比较经典的视屏播放器项目还是很有必要学习的。二、项目结构 以下是IjkPlayer的项目结构,依赖关系从下到上很很明显,另外ffmpeg作为视屏编解码的核心在途中是有意超出了一部分到libijkplayer.so的,因为在ijksdl和ijkplayer中都引用到了ffmpeg。 ffmpeg、libyuv、soundtouch 是三方开源库 libijkj4a......

一、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脚本进行编译

本文地址:https://blog.csdn.net/qq_34950682/article/details/107261580