FFMEPG 平台移植,接口简化和外部模块接入 (一)ffmpeg android移植(ndk 编译)

Mac 下为将ffmepg +x264移植到android中,解决libx264.so.148 库cannot find问题 本人最近在研究音频视频这一块,考虑到后期开发要加很多功能,决定使用ffmepg去做,看的网上的东西都是比较陈旧,新版的工具编译会存在不少问题,于是本人决定自己挖坑 首先下载源码,这个没什么好讲,ffmepg源码下载地址http://ffmpeg.org/download.html x264下载地址:http://www.videolan.org/developers/x264.html(有墙, 阅读详情

Car-eye-FFMPEG项目是Car-eye 开源平台的一个新项目,目的是在FFMPEG项目和其外部模块,如freetype,X264的基础上建立一个多平台编译,接口调用简单的工具集。

本博客是一个连载,首先从android开始写吧。因为FFMPEG本身对android编译的支持就不是特别好。

本文开发环境是ubuntu

分步来做:

1. 建立NDK编译环境,请参考外面的博客讲ndk安装到ubuntu下,在此不多啰嗦,注意需要将本例子程序用到的环境变量设置好,如在/etc/profile 最后加上 export ANDROID_NDK=/home/NDK/android-ndk-r10e 同时让其立即生效。

2. 下载FFMPEG,X264,freetype,png等等目录结构保持跟FFMPEG平行,同时在这里指出的是,别用过于新的版本

一般最新版本NDK很难编译。笔者用的是版本是n3.3.7. 根据我编译的经历4.0很难编译通过

下载后

目录结构大致如下:




3. 安装一些工具

在我们的脚本和编译的时候需要用到如正则表达式,autoconfig等

apt-get --quiet --yes install build-essential git autoconf libtool pkg-config gperf gettext yasm python-lxml 

4. 编译脚本

设计一个好的脚本太重要。否则编译会变得十分困难。

脚本需要考虑一下一些问题:环境变量,如NDK编译器件位置,库放的位置,源码编译顺序,编译参数设置等

参考老外的设计,首先设计一个总体环境变量的脚本:

#!/bin/bash

SUPPORTED_ARCHITECTURES=(armeabi-v7a x86) 
ANDROID_NDK_ROOT_PATH=${ANDROID_NDK}
if [[ -z "$ANDROID_NDK_ROOT_PATH" ]]; then
  echo "You need to set ANDROID_NDK environment variable, please check instructions"
  exit
fi
ANDROID_API_VERSION=21
NDK_TOOLCHAIN_ABI_VERSION=4.9

NUMBER_OF_CORES=$(nproc)
HOST_UNAME=$(uname -m)
TARGET_OS=linux

CFLAGS='-Os -fpic -marm'
LDFLAGS=''

FFMPEG_PKG_CONFIG="$(pwd)/ffmpeg-pkg-config"

上面的脚本设置了编译器的位置,版本,参数,pkg-config脚本。因为android本身就不支持外部编译,如果加入freetype的时候可能会报错。这个就需要配置pkg-config用来让ffmpeg的configure 找到自己的库,如果依然找不到,请在编译参数里面直接将库和头文件的参数指定,并适当修改ffmpeg的configure。

总编译调用脚本:

#!/bin/bash
. settings.sh
BASEDIR=$(pwd)
TOOLCHAIN_PREFIX=${BASEDIR}/toolchain-android
# Applying required patches
patch  -p0 -N --dry-run --silent -f fontconfig/src/fcxml.c < android_donot_use_lconv.patch 1>/dev/null
if [ $? -eq 0 ]; then
  patch -p0 -f fontconfig/src/fcxml.c < android_donot_use_lconv.patch
fi
for i in "${SUPPORTED_ARCHITECTURES[@]}"
do
  rm -rf ${TOOLCHAIN_PREFIX}
  # $1 = architecture
  # $2 = base directory
  # $3 = pass 1 if you want to export default compiler environment variables
  #./x264_build.sh $i $BASEDIR 0 || exit 1
  ./libpng_build.sh $i $BASEDIR 1 || exit 1
  ./freetype_build.sh $i $BASEDIR 1 || exit 1
  ./expat_build.sh $i $BASEDIR 1 || exit 1
  #./fribidi_build.sh $i $BASEDIR 1 || exit 1
  #./fontconfig_build.sh $i $BASEDIR 1 || exit 1
  #./libass_build.sh $i $BASEDIR 1 || exit 1
  ./ffmpeg_build.sh $i $BASEDIR 0 || exit 1
done
rm -rf ${TOOLCHAIN_PREFIX}

注意顺序,在编译ffmpeg之前先把外部模块编译好SUPPORTED_ARCHITECTURES 是CPU的架构,一般是ARM和X86等架构

最后是FFMPEG的总体编译(其他的外部编译都基本调用模块内部的configure配置一些参数)

#!/bin/bash
. abi_settings.sh $1 $2 $3
pushd ffmpeg
case $1 in
  armeabi-v7a | armeabi-v7a-neon)
    CPU='cortex-a8'
  ;;
  x86)
    CPU='i686'
  ;;
esac
make clean
./configure \
--cross-prefix="$CROSS_PREFIX" \
--sysroot="$NDK_SYSROOT" \
--enable-libfreetype \
--disable-avdevice \
--enable-pic \
--disable-ffserver \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-symver \
--disable-doc \
--disable-static \
--enable-shared \
--target-os=linux \
--arch="$NDK_ABI" \
--enable-cross-compile \
--pkg-config="${2}/ffmpeg-pkg-config" \
--prefix="${2}/build/${1}" \
--extra-cflags="-I${TOOLCHAIN_PREFIX}/include -I${TOOLCHAIN_PREFIX}/include/freetype2 " \
--extra-ldflags="-L${TOOLCHAIN_PREFIX}/lib  " \
--extra-libs="-lpng " \
--extra-cxxflags="$CXX_FLAGS" || exit 1
make  && make install || exit 1


编译执行 android_build.sh 完成编译。所有相关代码下载请以car-eye 开源github网址为准

https://github.com/Car-eye-team

car-eye开源官方网址:www.car-eye.cn   

car-eye 流媒体平台网址:www.liveoss.com    

car-eye 技术官方邮箱: support@car-eye.cn    
car-eye技术交流QQ群: 590411159     


CopyRight©  car-eye 开源团队 2018

tiny4412所需ffmpeg-3.4 的so库 ffmpeg-3.4源码自己下载 Ubuntu16.04上编译好的ffmpeg so库 步骤博客 http://blog.youkuaiyun.com/aexisun/article/details/78490086 x 立即下载

相关推荐

最新版ffmpeg编译生成android使用的so

最新版ffmpeg编译生成android使用的so 最新版ffmpeg编译生成android使用的so 最新版ffmpeg编译生成android使用的so 最新版ffmpeg编译生成android使用的so

FFMEPG 平台移植,接口简化和外部模块接入 (一)ffmpeg android移植(ndk 编译)

Car-eye-FFMPEG项目是Car-eye 开源平台的一个新项目,目的是在FFMPEG项目和其外部模块,如freetype,X264的基础上建立一个多平台编译,接口调用简单的工具集。本博客是一个连载,首先从android开始写吧。因为FFMPEG本身对android编译的支持就不是特别好。本文开发环境是ubuntu分步来做:1. 建立NDK编译环境,请参考外面的博客讲ndk安装到ubuntu...

Car_eye的博客 525

Android 使用 FFmpeg (一)——编译.so文件Demo

Android 使用 FFmpeg (一)——编译.so文件文章所对应的项目代码。

NDK toolchain对应ABI

Android NDK:   This NDK supports the following toolchains and target ABIs: Android NDK:    aarch64-linux-android-4.9:  arm64-v8a Android NDK:    aarch64-linux-android-clang3.4:  arm64-v8a Android N

明潮的BLOG 5339

ffmpeg4.0的已编译的shared版本

ffmpeg4.0的已编译好的win64版本的共享库,放这方便下载

Surface Pro 4/5/6/7保姆级黑苹果安装:从Windows分区到OC引导配置全流程(含EFI文件替换避坑)

本文详细介绍了在Surface Pro 4/5/6/7上安装黑苹果的全流程,包括Windows分区、OC引导配置和EFI文件替换等关键步骤。通过实战经验分享,帮助用户避开常见陷阱,实现Windows与macOS双系统完美共存,特别适合对黑苹果安装感兴趣的Surface Pro用户。

weixin_30300225的博客 1361

Android NDK编译选项设置全解

在Android NDK开发中,有两个重要的文件:Android.mk和Application.mk,各尽其责,指导编译器如何编译程序,并决定编译结果是什么。本文将详细说明几个常见的NDK选项的配置,帮助大家理解相应的配置选项。 一、Application.mk Application.mk实际上是轻量级Makefile,通常在$PROJECT/jni目录下,用于...

键盘的起始页 5168

RS485设备联网避坑指南:塔石串口服务器在MODBUS平台中的3个关键配置项

本文针对塔石串口服务器在MODBUS物联网平台接入中的常见问题,详细解析了三个关键配置项:工作模式选择、远程端口与保活机制、寄存器映射与轮询策略。通过对比错误与正确配置案例,帮助工程师避开配置陷阱,实现RS-485设备的稳定、高效联网,提升批量部署的成功率与系统可靠性。

weixin_29281941的博客 405

android编译ffmpeg x264 freetype

1、X264编译NDK=/home/lb/Android/NDk/android-ndk-r14b SYSROOT=$NDK/platforms/android-19/arch-arm/ TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 CPREFIX=$TOOLCHAIN/bin/arm-linux...

libin534226097的博客 1360

Claude Code 实战指南:用 AI 玩转终端编程,效率狂飙!

本文介绍了终端 AI 代理工具 Claude Code,涵盖常用命令、使用方法(如 init 初始化、权限配置、工作流程、上下文管理)、MCP 扩展工具及实战案例,展示其通过自然语言辅助开发的高效性与实用性。

个人技术 1万+

机器人控制入门:用SAC算法让机械臂学会抓取(PyBullet仿真教程)

本文详细介绍了如何使用SAC算法在PyBullet仿真环境中训练机械臂完成抓取任务。通过强化学习中的软Actor-Critic(SAC)算法,结合熵最大化机制和双Q网络架构,有效解决了机械臂控制中的探索难题。教程包含环境搭建、算法原理、状态空间设计、奖励函数优化等核心内容,并提供了实用的训练技巧和参数调优指南。

weixin_29091105的博客 360

ffmpeg 添加自己的第三方库

最近搞推流产品,想把自己写的sdk以第三库的形式 加到ffmpeg里面进行调试 比如我自己 编好的静态库 名字为libhzksdk.a 将该静态库copy到/usr/local/lib 在编译ffmpeg前 配置 ./configure --disable-yasm --enable-librtmp --extra-libs="-lhzksdk" --prefix=

hzk8656511的专栏 3362

手把手教你用STM32单片机控制双向可控硅调光(附完整代码+电路图)

本文提供了一套完整的STM32单片机控制双向可控硅实现灯光无级调光的实战方案。详细讲解了硬件电路设计,包括过零检测与隔离驱动,并剖析了基于定时器中断的软件核心逻辑,通过精准的相位角计算实现平滑的灯光强度控制。附有完整代码与电路图,适合嵌入式开发者实践。

weixin_29194255的博客 952

第一次完成FFmepg的移植,编译ffmpeg4Android

本文主要实现了FFmpeg的编译和移植,首先在linux下将官网下载的源码编译成.so文件,然后使用android-studio配合NDK工具,将.so文件移植到android项目当中,简单地介绍了如何一步步完成FFmpeg的编译流程参考文章:手把手图文并茂教你用Android Studio编译FFmpeg库并移植下面是我自己在ubuntu下编译准备的编译工具Git,NDK安装git,检查本地git

danjuan123的专栏 1441

车载以太网:PHY(物理层)介绍

本文以TJA1101芯片为实例介绍了车载以太网PHY(物理层)组成。

kevin1499的博客 6231

第14.11章 高翔博士最新开源框架Lightning-LM源码解读(十一):离线定位模块全解析,从激光匹配到位姿图优化的极致优化

本文介绍了Lightning-LM离线定位模块的技术架构与实现细节。该模块基于3D激光雷达与IMU融合,采用改进版NDT匹配算法实现高精度定位,具备动态图层更新、多源信息融合等特性。核心流程包括数据预处理、激光里程计处理、IMU预测与点云去畸变、位姿图优化等环节,通过轻量级miao库实现高效增量优化。文章详细解析了模块的代码结构、关键函数功能及数据流,为SLAM系统的开发与优化提供了实践参考。

行知SLAM 375

设定 Android NDK 编译环境并移植 ffmpeg

简介: 本文介绍如何使用 Android NDK(r7) 设置 Android 本地代码编译工具链,如何根据 Makefile 编写 Android.mk,并以 ffmpeg(0.8.5) 为例子介绍如何使用此工具链移植。使用编译出来的库文件,可以通过本地 C/C++ 程序调用 ffmpeg 解码库;也可以另外编写 JNI 接口,使用 Java 程序调用 ffmepg。 我们都知道编译

feifei20081014的专栏 704

abapGit 安装与初始化完整指南:从 on-premise 到 SAP BTP ABAP environment 的一条龙实践

本文为ABAP开发者提供abapGit从安装到团队协作的完整指南。内容涵盖社区版ZABAPGIT的on-premise安装、Eclipse ADT插件配置、BTP环境使用及常见网络问题处理。重点包括:获取最新构建的安装步骤、EN语言环境的重要性、ADT插件安装方法、以及如何实现on-premise与BTP间的代码迁移。文中特别强调企业环境下代理设置、证书配置等注意事项,并提供实际操作案例,如将RAP业务对象迁移到BTP环境。文末附有可复用的实施清单,帮助开发者快速落地abapGit。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 413

FFMEPG 平台移植,接口简化和外部模块接入 (二)ffmpeg android移植(JNI 开发环境建立)...

工欲善其事情,必先利其器。在android下使用ffmpeg必须使用JNI。先创建一个好的编译工具为先: 按照下面步骤在android stdio 下创建JNI的编译环境 1.配置Anroid Studio(这步是关键) 选中项目,单击File菜单,选择Setting进入设置...

chongduan4530的博客 179

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Mac环境下使用NDK编译FFMPEG for android

一、FFMPEG是什么? 1.FFMPEG可以做到对视频文件编码、解码、转码。 2.可以对多路音频复用、解复用。 3.可以对音视频流处理。 4.音视频的过滤器、播放。 5.支持从远古时期到现在的几乎所有格式。 6.Linux、Windows、Mac OS全平台支持。 7.高可移植性。 大家知道Android系统又是基于linux的,所以,FFMPEG在Android下也是可用的。因此我们在Android平台上对音视频处理,基本就绕不开FFMPEG。 但FFMPEG在Android上并不能直

Crazy Android 644

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

FFMpeg 3.2移植到android遇到的各种坑,再一次总结

故事很长,慢慢看! 首先我又一个需求,一张jpg加上gif后,变成一个gif动图。如果你用命令ffmpeg -i  test.jpg -vf 'movie=test.gif[wm];[in][wm]overlay=0:0[out]' out.gif命令的话,我假设你的ffmpeg -version是3.2,那么恭喜,这个需求你很容易搞定。 不幸的是,我的android项目是2.

了悟生死大事 2744

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

编译FFmpeg4.3.1 并移植到Android app中使用(最详细的FFmpeg-Android编译教程)

参考 https://blog.youkuaiyun.com/bobcat_kay/article/details/80889398 虽然32位的库在64位机器上也能正常运行,但是经过测试,用小米8转码64位的库比32位还是要快10%左右,所以还是同时提供32位和64位比较好。 根据此教程编译出来的FFmpeg支持mediacodec硬件解码h264,h265,不支持硬件编码;编码h264可以用x264。文中的编译脚本可以直接编译出arm32位和64位的动态链接库。 1.搭建编译环境 1.1 安装ubuntu14.04

波风水门 4727

Android ffmpeg的x86编译和优化

转载:http://software.intel.com/es-es/node/326600 一、        认识FFMPEG在Android NDK中的使用 Android内置的编解码器比较少,流媒体功能也比较薄弱,现有的android关于远程视频的程序大部分使用了FFMPEG。FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选

3884
上一篇: LINUX下编译Nginx出现WARNING: 'aclocal-1.14' is missing on your system错误的解决办法
下一篇: FFMEPG 平台移植,接口简化和外部模块接入 (二)ffmpeg android移植(JNI 开发环境建立)
路过&
博客等级 码龄19年 126粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值