首页 > 其他分享 >编译ijkplayer

编译ijkplayer

时间:2023-05-12 19:01:20浏览次数:45  
标签:ijkplayer -- cd 编译 sh FF android

https://github.com/bilibili/ijkplayer

默认ndk10

https://dl.google.com/android/repository/android-ndk-r10e-linux-x86_64.zip

编译前环境配置

# install homebrew, git, yasm
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
brew install git
brew install yasm

# add these lines to your ~/.bash_profile or ~/.profile
# export ANDROID_SDK=<your sdk path>
# export ANDROID_NDK=<your ndk path>

# on Cygwin (unmaintained)
# install git, make, yasm
#使修改的配置文件生效
source ~/.profile 

更多的编解码器/格式

cd config
rm module.sh
ln -s module-default.sh module.sh
cd android/contrib
# cd ios
sh compile-ffmpeg.sh clean

支持rtsp可以添加 (参考 ijkplayer编译-RTSP

export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-linux-perf"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bzlib”
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-protocol=rtp"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=rtsp"

更少的编解码器/格式较小的二进制大小(包括hevc函数)

cd config
rm module.sh
ln -s module-lite-hevc.sh module.sh
cd android/contrib
# cd ios
sh compile-ffmpeg.sh clean

更少的编解码器/格式,以较小的二进制大小(默认情况下)

cd config
rm module.sh
ln -s module-lite.sh module.sh
cd android/contrib
# cd ios
sh compile-ffmpeg.sh clean

对于Ubuntu/Debian用户。

# choose [No] to use bash
sudo dpkg-reconfigure dash

初始化

按照官方文档编译 首先修改部分文件

注意修改 : (./init-android.sh 等超时问题)

执行./init-android.sh前先修改
以下文件的 Bilibili -> 改为bilibili
init-android.sh
init-android-openssl.sh
init-android-libyuv.sh
init-android-soundtouch.sh

init-android.sh修改 ijkplayer 依赖的 FFmpeg 的版本(改成 4.0 版本)

参考:https://github.com/alanwang4523/ijkplayer_Build4Android

改成4.0会出现 Unknown option "--disable-ffserver". (4.0删了ffserver)

解决:https://github.com/bilibili/ijkplayer/issues/4690

将config/module.sh中的export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-vda" 和 export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-ffserver"注释了就可以了版本列表:

https://github.com/bilibili/FFmpeg/tags

https://github.com/bilibili/openssl/tags

#IJK_FFMPEG_COMMIT=ff3.4--ijk0.8.7--20180103--001
IJK_FFMPEG_COMMIT=ff4.0--ijk0.8.8--20210426--001

开始初始化

# 下载指定的 ffmpeg 源码 ff4.0--ijk0.8.8--20210426--001
./init-android.sh

# 下载 openssl 源码,用于支持 https 
# 最新OpenSSL_1_0_2u 
./init-android-openssl.sh

./init-android-openssl.sh: 第 35 行: cd: android/contrib/openssl-arm64: 没有那个文件或目录 ()

ijkplayer-android/android/contrib 目录下
参照compile-ffmpeg.sh  给 compile-openssl.sh 添加 FF_TARGET_EXTRA=$2

开始编译

# 在项目根目录下
android/contrib 

# 编译 openssl
./compile-openssl.sh clean  
./compile-openssl.sh all  

# 编译 FFmpeg 
./compile-ffmpeg.sh clean 
./compile-ffmpeg.sh all  

# 编译 ijkplayer
cd ..  
./compile-ijk.sh all

ijkmedia/ijksoundtouch: 没有那个文件或目录

或fatal error: ijksoundtouch/ijksoundtouch_wrap.h: No such file or directory

检查是jkplayer/ijkmedia/ijkplayer/ff_ffplay.c中引入了#include "ijksoundtouch/ijksoundtouch_wrap.h",但是工程中没有这个文件。

https://github.com/bilibili/ijkplayer/issues/5219

参考:https://blog.csdn.net/shulianghan/article/details/123618604

#执行
./init-android-soundtouch.sh

官方文档 ↓↓↓

git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android
cd ijkplayer-android
git checkout -B latest k0.8.8

./init-android.sh

cd android/contrib
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all

cd ..
./compile-ijk.sh all

# Android Studio:
#     Open an existing Android Studio project
#     Select android/ijkplayer/ and import
#
#     define ext block in your root build.gradle
#     ext {
#       compileSdkVersion = 23       // depending on your sdk version
#       buildToolsVersion = "23.0.0" // depending on your build tools version
#
#       targetSdkVersion = 23        // depending on your sdk version
#     }
#
# If you want to enable debugging ijkplayer(native modules) on Android Studio 2.2+: (experimental)
#     sh android/patch-debugging-with-lldb.sh armv7a
#     Install Android Studio 2.2(+)
#     Preference -> Android SDK -> SDK Tools
#     Select (LLDB, NDK, Android SDK Build-tools,Cmake) and install
#     Open an existing Android Studio project
#     Select android/ijkplayer
#     Sync Project with Gradle Files
#     Run -> Edit Configurations -> Debugger -> Symbol Directories
#     Add "ijkplayer-armv7a/.externalNativeBuild/ndkBuild/release/obj/local/armeabi-v7a" to Symbol Directories
#     Run -> Debug 'ijkplayer-example'
#     if you want to reverse patches:
#     sh patch-debugging-with-lldb.sh reverse armv7a
#
# Eclipse: (obselete)
#     File -> New -> Project -> Android Project from Existing Code
#     Select android/ and import all project
#     Import appcompat-v7
#     Import preference-v7
#
# Gradle
#     cd ijkplayer
#     gradle

编译完成

ijkplayer-android/android/contrib/build目录下

  

对应每个目录下 output目录

 

标签:ijkplayer,--,cd,编译,sh,FF,android
From: https://www.cnblogs.com/Jieth/p/17396057.html

相关文章

  • iOS反编译IPA重新签名
    1、获取应用的IPAa、打开爱思助手,链接手机,点击引用游戏,搜索想要的APPb、在下载界面点击打开文件夹,拿到IPA文件c、解压IPA包,将IPA包换成zip包,然后在进行解压。2、开始反编译IPA包a、查看包信息,进入Payload文件目录,比如执行该命令:codesign-d-vWeChat.app或者codesign-......
  • Linux驱动开发笔记(三):基于ubuntu的helloworld驱动源码编写、makefile编写以及驱动编译
    前言  前面学习了驱动的基础框架,上一篇编译了gcc7.3.0,那么为了方便很好的熟悉流程,本篇,将使用ubuntu18.04,直接编译ubuntu18.04的驱动,然后做好本篇文章的相关实战测试。 Ubuntu虚拟机准备步骤一:安装虚拟机  本次使用之前rk3568的ubuntu18.04,笔者没有重新弄了,安装......
  • Angular Iv,下一代编译 & 渲染工具!
     AngularIvy是Angular的下一代编译和渲染工具,它带来了速度和大小方面的改进。Ivy是Angular下一代编译和渲染的代号。它提高了构建代码的速度和大小等。Ivy从Angular框架的第9版就开始使用了。在本文中,我们将看到AngularIvy为Angular项目带来的改进。KendoUIforAngular是......
  • Python学习之三: 编译二进制
    Python学习之三:编译二进制摘要每次使用python执行py文件其实是比较麻烦的主要是还得安装python的虚拟机,以及安装对应的pip包.感觉比较繁杂理论上最快捷的方式是编译成二进制直接运行.所以这里主要是说一下通过pycharm和linux机器进行二进制编译的过程Pycharm的安......
  • CentOS7编译安装OpenSSL3.1
    CentOS7编译安装OpenSSL3.11.下载Openssl源码包官网:https://www.openssl.org/ [root@localhost~]#wgethttps://www.openssl.org/source/openssl-3.1.0.tar.gz 2.解压安装[root@localhost~]#tar-xvfopenssl-3.1.0.tar.gz-C/usr/local/[root@localhost~]#cd......
  • C#windows程序如何静态编译
    先安装Costura.Fody1、项目–>管理Nuget程序包–>“浏览”搜索“Costura.Fody”–>选择低版本1.6.1,安装2、重新生成编译,在项目文件的bin–>debug和release文件夹就有静态.exe针对.NetWinForm窗体常常用到打包安装,但如果是只有几M的小程序,编译后生产的除了EXE执行文件以外......
  • golang在编译测试时使用ldflags动态设置包中变量的值
    Example: mkdir$GOPATH/src/gotest/touchgo_test.go packagegotestimport"testing"vartimestringvarversionstringfuncTestBuild(t*testing.T){t.Log(time)t.Log(version)} ReadMe.txtgotest-ldflags="-X'gotest......
  • Vue2没有`public`文件夹,该怎么建资源文件,编译后不被压缩
    在Vue2项目中,如果没有`public`文件夹,可以在项目根目录下创建一个`static`文件夹来存放静态资源文件,如JS、CSS、图片等。 如果你想在打包后不压缩JS文件,并且这个JS文件是在HTML中通过`script`标签引用的,可以按照以下步骤进行操作: 1.在`static`文件夹下创建一个`js`文件夹,并......
  • Vue2项目中,在编译打包后通过读取配置文件,任意修改接口地址
    可以按照以下步骤进行操作: 1.在项目根目录下创建一个名为`config`的文件夹,并在该文件夹下创建一个名为`index.js`的文件,用来存放配置文件,如: ```javascriptmodule.exports={  apiRoot:'http://api.example.com'}``` 这里定义了一个`apiRoot`属性,用来存放接口地......
  • 双链表和队列-->gcc编译
    双链表队列doublueList.h#include<stdlib.h>#include<stdio.h>#include<assert.h>#include<stdbool.h>typedefintLTDataType;typedefstructDList{ LTDataTypedata; structDList*next; structDList*prev;}LTNode;LTNode*init();......