androidiosijkplayer编译步骤及相关问题解决(代码片段)

安卓开发-顺 安卓开发-顺     2022-10-23     123

关键词:

一、iOS

     基于B站开源代码编译(https://github.com/bilibili/ijkplayer

  1. :准备一台Mac电脑,本文使用macOS 12.1
  2. :安装XCode开发工具,本文使用xcode 13.4.1
  3. :安装 homebrew、git和yasm软件
  4. :打开终端运行窗口,进入一个自己的开发文件夹,执行:git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-ios
  5. :执行命令:cd ijkplayer-ios
  6. :执行命令:git checkout -B latest k0.8.8 本文是基于k0.8.8分支
  7. :执行命令:./init-ios.sh (这一步会完成一些初始化工作,并去GitHub拉取FFmpeg代码)
    1. 如果操作文件时没有权限,请执行 chmod 777 init-ios.sh 来修改为可读可写权限, 下面遇到类似错误,同样方式处理即可
  8. :执行命令:./init-ios-openssl.sh 初始化https相关内容 

  9. :执行命令:cd ios (进入iOS文件夹)
  10. :执行命令:./compile-openssl.sh all  编译https相关内容
  11. :执行命令:./compile-ffmpeg.sh clean 不必每次都clean 除非有ffmpeg相关修改
  12. :执行命令:./compile-ffmpeg.sh all 编译ffmpeg库,此步骤十分重要,ijkplayer就是基于ffmpeg来封装
    1. 关于遇到module.shmodule-lite.sh 命令行找不到等问题的解决方案
      1. 直接来到和ios平级的config文件夹下,执行rm module.sh 删除module.sh
      2. 然后回到根目录下执行 ./init-config.sh即可(此步骤会自动拷贝module-lite.sh文件内容到module.sh)
    2. 关于遇到:error:unknown derective .arch armv7-a的报错的解决方案
      1. 方案一、删除armv7(32位)相关架构的编译代码,iPhone5s以上的手机都是64位的cup架构了,应用商店也不在支持armv7(32),因此支持删除也是可以的,具体实现如下
        1. 修改 ios文件夹下compile-ffmpeg.sh 

          第24行 改为: FF_ALL_ARCHS_IOS8_SDK="arm64 i386 x86_64"
          第120行 改为: if [ "FFTARGET"="armv7s"−o" FF_TARGET" = "arm64" ]; then
          第159行 改为: echo " compile-ffmpeg.sh arm64|i386|x86_64"

      2. 方案二、兼容armv7
        1. 到ios/tools文件夹下,修改do-compile-ffmpeg.sh文件
        2. 在187行(行数可能会变化,找这行代码为准 :FF_XCRUN_CC="xcrun -sdk $FF_XCRUN_SDK clang")下面添加如下内容:

          echo "----- zhangshun modify for armv7 ---------- begin"
          if [ "$FF_ARCH" = "arm64" ]
          then
              FF_AS="gas-preprocessor.pl -arch aarch64 -- $FF_XCRUN_CC"
          else
              FF_AS="gas-preprocessor.pl -- $FF_XCRUN_CC"
          fi
          echo "----- zhangshun modify for armv7 ---------- end"
    3. 关于缓存问题的解决方案:
      1. 执行./compile-ffmpeg.sh clean 清除之前构建内容即可
  13. :编译完成后 用xcode 打开ios/IJKMediaDemo/IJKMediaDemo.xcoderoj运行看效果
  14. :导出库文件,放到其他项目中使用

二、Android

基于B站开源代码编译(https://github.com/bilibili/ijkplayer

由于Window下直接编译坑太多,建议安装Ubuntu系统进行编译

  1. :安装Ubuntu系统,并进入
  2. :下载Android NDK r10e(官方建议r10e的版本)注意是Linux版本
  3. :配置NDK环境变量,注意在Ubuntu下配置
  4. :安装 git 、AndroidStudio 并配置SDK环境变量 注意是在Ubuntu下面操作
  5. :打开终端运行窗口,进入一个自己的开发文件夹,执行:git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android
  6. :执行命令:cd ijkplayer-android
  7. :执行命令:git checkout -B latest k0.8.8 本文是基于k0.8.8分支
  8. :执行命令:./init-android.sh (这一步会完成一些初始化工作,并去GitHub拉取FFmpeg代码)
    1. 如果操作文件时没有权限,请执行 chmod 777 init-android.sh 来修改为可读可写权限, 下面遇到类似错误,同样方式处理即可
  9. :执行命令:./init-android-openssl.sh 初始化https相关内容 

  10. :执行命令:cd android/contrib
  11. :执行命令:./compile-openssl.sh armv7a 编译https相关内容,指定了armv7a,也可以写all 编译所有的cpu架构
  12. :执行命令:./compile-ffmpeg.sh clean 不必每次都clean 除非有ffmpeg相关修改
  13. :执行命令:./compile-ffmpeg.sh armv7a 编译ffmpeg库,此步骤十分重要,ijkplayer就是基于ffmpeg来封装
    1. 关于遇到module.shmodule-lite.sh 命令行找不到等问题的解决方案
      1. 直接来到和android平级的config文件夹下,执行rm module.sh 删除module.sh
      2. 然后回到根目录下执行 ./init-config.sh即可(此步骤会自动拷贝module-lite.sh文件内容到module.sh)
    2. 关于缓存问题的解决方案:
      1. 执行./compile-ffmpeg.sh clean 清除之前构建内容即可
  14. :执行命令  cd.. 回到 android目录下
  15. :执行./compile-ijk.sh armv7a  也可以选择all  根据需求来定
  16. :拷贝编译生成的so进行使用即可
    1. android--ijkplayer--ijkplayer-armv7a--src--main--libs

androidiosijkplayer编译步骤及相关问题解决(代码片段)

目录一、iOS二、Android三、导出库文件 一、iOS   基于B站开源代码编译(https://github.com/bilibili/ijkplayer):准备一台Mac电脑,本文使用macOS12.1:安装XCode开发工具,本文使用xcode13.4.1:安装homebrew、git和ya... 查看详情

css|框模型-定位及相關屬性

CSS定位(Positioning)属性允许你对元素进行定位。CSS定位和浮动CSS为定位和浮动提供了一些属性,利用这些属性,可以建立列式布局,将布局的一部分与另一部分重叠,还可以完成多年来通常需要使用多个表格才能完成的任务。定... 查看详情

查找数组中的最大值(最小值)及相对应的下标(代码片段)

简单的封装一个方法假设数组arr中的最大值max或最小值min为arr[0],通过max或min与数组arr的值进行比较,得到想要的结果(1)获取数组最大值(最小值)//获取最大值1functiongetMax(arr)2//假设最大值max为arr[0]3varmax=arr[0];4//遍历对比5for(v... 查看详情

Janino 编译异常:UDJC 步骤

】Janino编译异常:UDJC步骤【英文标题】:JaninoCompileException:UDJCstep【发布时间】:2015-12-1020:34:06【问题描述】:提前感谢您的支持。在UDJC步骤中,以下代码给了我Janino异常,在processRow方法中Hashtablehastable=getConfigData()//Thismethodretur... 查看详情

java程序编写编译运行步骤

...ticvoidmain(String[]args){System.out.println("Hello,World!");}}第三步:编译程序源代码打开命令行,进入存放java 查看详情

如何在使用 Open Modelica 编译器进行展平步骤后停止编译过程?

】如何在使用OpenModelica编译器进行展平步骤后停止编译过程?【英文标题】:HowtostopcompilationprocessaftertheflatteningstepwiththeOpenModelicaCompiler?【发布时间】:2020-01-2816:46:37【问题描述】:我想看看Modelica模型的扁平化版本。传递给Model... 查看详情

编译chrome详细步骤

 文章来源:http://blog.csdn.net/allendale/article/details/9262833参考:http://dev.chromium.org/developers/how-tos/build-instructions-windows 1    Chrome的代码量巨大,下载编译的过程一出错,可能就需要回头从 查看详情

带有 Rcpp 头文件的 c++ 文件的编译步骤

】带有Rcpp头文件的c++文件的编译步骤【英文标题】:Compilationstepsforac++filewithRcppheaderfile【发布时间】:2018-06-2904:20:07【问题描述】:我正在gedit上尝试此代码,并在终端上通过g++编译器进行编译。#include<Rcpp.h>usingnamespaceRcpp;/... 查看详情

lnmp-详细编译安装步骤

                              CentOS7.0编译安装Nginx1. 查看详情

flutter进行自动编译操作步骤

环境:macos操作系统xcode最新版本10.2.1flutter进行编译报错解决方案:(null):warning:(armv7)/Users/tommy/Desktop/Project/AliPay/SourceTree/ios-msdk-git/AlipaySDK4Standard/AlipaySDK/Library/UTDID.framework/UTDID(AidManager.o)u 查看详情

源码安装步骤

把源码编译成二进制的可执行文件(自定义修改源代码,定制相关功能,附加额外选项)编译器(gcc):安装yuminstall-ygcc echo$?验证是否安装成功成功输出为0源码安装步骤1)./configure可定制相关功能(./configure-help)如果缺少相... 查看详情

尝试在 C# 中简化条件编译的步骤

】尝试在C#中简化条件编译的步骤【英文标题】:TryingtosimplifythestepsforConditionalCompilationinC#【发布时间】:2012-04-0315:37:59【问题描述】:背景:我要做的是根据我在给定时间点所需的配置集在VS2008IDE中为我的项目自定义构建过程... 查看详情

Chef 失败了我的资产:Opsworks 上的预编译步骤

】Chef失败了我的资产:Opsworks上的预编译步骤【英文标题】:Cheffailsmyassets:precompilesteponOpsworks【发布时间】:2014-09-0507:26:40【问题描述】:将我的应用部署到Amazon的Opsworks,我的资产预编译步骤经常失败。主厨食谱如下所示:node... 查看详情

mesos编译步骤及注意事项(ubuntu)

注意事项:编译过程如果有错误提示少什么库,则相应的安装库即可在编译中出现g++:internalcompilererror:Killed(programcc1plus)的错误是因为内存不足,我在虚拟机中编译的,所以把内存提升到3G,然后在make的时候-j1即可,或者不用-j参... 查看详情

内核编译步骤

  第一步:arm开发版,按reset键并在在1秒后按control+c进入模式  第二步:也是arm开发版,执行指令fastboot   第三:win烧写好内核,并准备文件    ->AdbWinApi.dll    ->AdbWinUsbApi.dll    ->boot.img(需要自... 查看详情

gcc编译器原理------编译原理三:编译过程(2-1)---编译之词法分析

二、编译引用文档:https://blog.csdn.net/chdhust/article/details/9040647编译过程就是把预处理完的文件进行一系列词法分析、语法分析、语义分析及优化后生成相应的汇编代码文件,这个过程是整个程序构建的核心部分,也是最复杂的部... 查看详情

一文带你梳理clang编译步骤及命令(代码片段)

摘要: 本文简单介绍了Clang编译过程中涉及到的步骤和每个步骤的产物,并简单分析了部分影响预处理和编译成功的部分因素。本文分享自华为云社区《Clang编译步骤及命令梳理》,作者:maijun。本文简单介绍部... 查看详情

编译原理--引论(代码片段)

一个编译器的结构把编译器看作一个黑盒子,能够把源程序映射为在语义上等价的目标程序映射过程,分成两部分,分析部分和综合部分分析(analysis)把源程序分解成为多个组成要素,在这些要素之上加上语法结构使用这个结... 查看详情