最新靠谱可用的-Mac-环境下-FFmpeg-环境搭建

这篇具有很好参考价值的文章主要介绍了最新靠谱可用的-Mac-环境下-FFmpeg-环境搭建。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近在尝试搭建 FFmpeg 开发环境时遇到一个蛋疼的事,Google 了 N 篇文章竟然没有一篇是可以跑起来的!

少部分教程是给出了自我矛盾的配置(是的,按照贴出来的代码和配置,他自己都跑不起来),大部分教程是看着挺全但忽略了某几个关键的点导致跑不起来,更蛋疼的是碰到报错后错误相关的文章也很少,当然还有一些是年代久远过时了。

于是在成功跑起来后,我将整个搭建过程整理出来,希望可以帮到后面的人。

本文基于 Mac OS X + Android Studio 3.2 + FFmpeg 3.3 + CMake。

文章会分为两部分,第一部分是总结一下碰到的几个坑,这样只是因为报错而无法继续的朋友可以先看看是否可以解决问题;第二部分是搭建过程的完整描述(我特意用另一台电脑测试过,可以完美跑起来)。

一、FFmpeg 搭建的常见问题

1. NDK 的问题

在编译之前,教程都会让我们修改命令中 NDK 的地址为自己本地的地址,我们当然自然而然地改成了 Android Studio 自带的 ndk-bundle。

然后编译的时候就发现会出现errno.h: No such file or directory字样的error。

这是因为 Android Studio 自带的 NDK 缺少相关的 .h 文件,从网上额外下载 NDK 然后编译时使用就可以解决问题。(基于 FFmpeg 3.3)

2. 编译命令的问题

报错信息形如

ffmpeg_build.sh: line 14: ./configure: No such file or directory

ffmpeg_build.sh: line 20: --extra-cflags=-Os -fpic -marm: command not found

之类的,请检查一下 Android 编辑脚本的 “/” 后是否有空格。

由于不同系统存在差异,最好找对应系统下他人验证可行的编译命令。

3. 编译相关的版本

编译过程有 NDK 版本、Android 版本、FFmpeg 版本、Android Studio 版本等,不同版本存在差异,最好是完全使用教程描述时的版本。

比如编译命令中包含的 Android 版本
 

export SYSROOT=$NDK/platforms/android-21/arch-arm/

这里的 android-21 改成 26 就不行,因为搜索了这两个文件夹只有 21 中有需要的 .h 文件。

4. 项目构建配置

需要将相关的 .so 文件和 include 文件夹(里面包含一些头文件)都放入 libs 文件夹中,并在 gradle 文件夹中指定 jni 目录,最后编写 CMake 文件,缺少一步就报错

相关学习资料推荐,点击下方链接免费报名,先码住不迷路~】

音视频免费学习地址:https://xxetb.xet.tech/s/2cGd0

【免费分享】音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击788280672加群免费领取~

最新靠谱可用的-Mac-环境下-FFmpeg-环境搭建,macos,ffmpeg

二、FFmpeg 环境配置最佳实践

1. 下载 FFmpeg 源码

git clone https://git.ffmpeg.org/ffmpeg.git

再切到 3.3 分支

git checkout -b 3.3 remotes/origin/release/3.3

2. 修改 configure 文件

在下载好的 ffmpeg 文件夹内可以找到一个 configure 文件,将其中的:

SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'  
LIB_INSTALL_EXTRA_CMD='?(RANLIB)"$(LIBDIR)/$(LIBNAME)"'  
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'  
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR)$(SLIBNAME)'

修改成

SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'  
LIB_INSTALL_EXTRA_CMD='?(RANLIB)"$(LIBDIR)/$(LIBNAME)"'  
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'  
SLIB_INSTALL_LINKS='$(SLIBNAME)'

3. 下载 NDK

就如上文所述,Android Studio 自带的 NDK 缺少部分 .h 文件,不确定是否跟 Android Studio 的 版本或者 NDK 版本有关,也不确定是否所有人都这样。但为了简单,还是下载吧(下载下来的的这个 NDK 只为了编译 FFmpeg,不影响之前的 NDK)。

可以选择去官网下载,我找了个国内的 Android NDK下载(r10d r13b r14b)

下载适用于 Mac OS X 的 android-ndk-r14b-darwin-x86_64.zip 文件。

4. 编写编译脚本
在 ffmpeg 文件夹根目录下创建一个 ffmpeg_build.sh 文件(名称跟配置不相关,想改可以改),具体内容如下:

#!/bin/bash
make clean
# NDK的路径,根据自己的安装位置进行设置
export NDK=/Users/yanzhenghui/Downloads/android-ndk
export SYSROOT=$NDK/platforms/android-21/arch-arm/
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
export CPU=arm
export PREFIX=$(pwd)/android/$CPU
export ADDI_CFLAGS="-marm"
function build_one
{
./configure \
    --prefix=$PREFIX \
    --target-os=linux \
    --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
    --arch=arm \
    --sysroot=$SYSROOT \
    --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
    --extra-ldflags="$ADDI_LDFLAGS" \
    --cc=$TOOLCHAIN/bin/arm-linux-androideabi-gcc \
    --nm=$TOOLCHAIN/bin/arm-linux-androideabi-nm \
    --enable-shared \
    --enable-runtime-cpudetect \
    --enable-gpl \
    --enable-small \
    --enable-cross-compile \
    --disable-debug \
    --disable-static \
    --disable-doc \
    --disable-asm \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-ffserver \
    --enable-postproc \
    --enable-avdevice \
    --disable-symver \
    --disable-stripping \
$ADDITIONAL_CONFIGURE_FLAG
sed -i '' 's/HAVE_LRINT 0/HAVE_LRINT 1/g' config.h
sed -i '' 's/HAVE_LRINTF 0/HAVE_LRINTF 1/g' config.h
sed -i '' 's/HAVE_ROUND 0/HAVE_ROUND 1/g' config.h
sed -i '' 's/HAVE_ROUNDF 0/HAVE_ROUNDF 1/g' config.h
sed -i '' 's/HAVE_TRUNC 0/HAVE_TRUNC 1/g' config.h
sed -i '' 's/HAVE_TRUNCF 0/HAVE_TRUNCF 1/g' config.h
sed -i '' 's/HAVE_CBRT 0/HAVE_CBRT 1/g' config.h
sed -i '' 's/HAVE_RINT 0/HAVE_RINT 1/g' config.h
make clean
# 这里是定义用几个CPU编译,我用4个,一般在5分钟之内编译完成
make -j4
make install
}
build_one

需要更改的是这个:

# NDK的路径,根据自己的安装位置进行设置
export NDK=/Users/yanzhenghui/Downloads/android-ndk

改成你本地的路径。

5.执行脚本

从命令行进入 ffmpeg 文件夹后,先执行

chmod +x ffmpeg_build.sh

命令给脚本开启权限,再执行编译脚本:

./ffmpeg_build.sh

等待编译完成,即可在 ffmpeg 文件夹内看到 android 文件夹,里面包含了我们需要的 .so 文件和对应的头文件

最新靠谱可用的-Mac-环境下-FFmpeg-环境搭建,macos,ffmpeg

6.配置 ffmpeg 项目

这部分 Android - FFmpeg & Mac & AndroidStudio & CMake 环境搭建 这篇文章写得足够好,我就不重复造轮子了,下面摘抄部分权当转载了。(当然,我也全部测试过能跑起来)

6.1 新建项目

新建一个以 CMake 方式构建的 C++ 项目(记得勾选 Include C++ Support)
最新靠谱可用的-Mac-环境下-FFmpeg-环境搭建,macos,ffmpeg

图二

6.2 拷贝文件到 libs 目录下

将编译好的 .so 和头文件拷贝到 libs 目录下:

最新靠谱可用的-Mac-环境下-FFmpeg-环境搭建,macos,ffmpeg

6.3 指定 jniLibs 路径

android {
    ...
    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
}

6.4 配置 abiFilters

因为我们只编译出 armeabi-v7a 的 so,所以需要特别指定一下 abi

android {
    ...
    defaultConfig {
      ...
      ndk {
          abiFilters 'armeabi-v7a'
      }
    }
}

6.5 编写 CMakeLists

# For more information about using CMake with Android Studio, read the
# documentation: https://d.android.com/studio/projects/add-native-code.html
# Sets the minimum version of CMake required to build the native library.
cmake_minimum_required(VERSION 3.4.1)
# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds them for you.
# Gradle automatically packages shared libraries with your APK.
add_library( # Sets the name of the library.
             native-lib
             # Sets the library as a shared library.
             SHARED
             # Provides a relative path to your source file(s).
             src/main/cpp/native-lib.cpp )
add_library( avcodec-57
             SHARED
             IMPORTED )
set_target_properties( avcodec-57
                       PROPERTIES IMPORTED_LOCATION
                       ../../../../libs/armeabi-v7a/libavcodec-57.so )
add_library( avfilter-6
             SHARED
             IMPORTED )
set_target_properties( avfilter-6
                       PROPERTIES IMPORTED_LOCATION
                       ../../../../libs/armeabi-v7a/libavfilter-6.so )
add_library( avformat-57
             SHARED
             IMPORTED )
set_target_properties( avformat-57
                       PROPERTIES IMPORTED_LOCATION
                       ../../../../libs/armeabi-v7a/libavformat-57.so )
add_library( avutil-55
             SHARED
             IMPORTED )
set_target_properties( avutil-55
                       PROPERTIES IMPORTED_LOCATION
                       ../../../../libs/armeabi-v7a/libavutil-55.so )
add_library( swresample-2
             SHARED
             IMPORTED )
set_target_properties( swresample-2
                       PROPERTIES IMPORTED_LOCATION
                       ../../../../libs/armeabi-v7a/libswresample-2.so )
add_library( swscale-4
             SHARED
             IMPORTED )
set_target_properties( swscale-4
                       PROPERTIES IMPORTED_LOCATION
                       ../../../../libs/armeabi-v7a/libswscale-4.so )
include_directories( libs/include )
find_library( # Sets the name of the path variable.
              log-lib
              # Specifies the name of the NDK library that
              # you want CMake to locate.
              log )
# Specifies libraries CMake should link to your target library. You
# can link multiple libraries, such as libraries you define in this
# build script, prebuilt third-party libraries, or system libraries.
target_link_libraries( # Specifies the target library.
                       native-lib
                       avcodec-57
                       avfilter-6
                       avformat-57
                       avutil-55
                       swresample-2
                       swscale-4
                       # Links the target library to the log library
                       # included in the NDK.
                       ${log-lib} )

6.6 Java 引入 so 库

static {
    System.loadLibrary("native-lib");
    System.loadLibrary("avcodec-57");
    System.loadLibrary("avfilter-6");
    System.loadLibrary("avformat-57");
    System.loadLibrary("avutil-55");
    System.loadLibrary("swresample-2");
    System.loadLibrary("swscale-4");
}

最后运行测试下,即配置完成。

原文 最新靠谱可用的-Mac-环境下-FFmpeg-环境搭建 - 掘金文章来源地址https://www.toymoban.com/news/detail-811578.html

到了这里,关于最新靠谱可用的-Mac-环境下-FFmpeg-环境搭建的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第三讲 Ubuntu系统FFmpeg环境搭建

    Ubuntu系统安装 0-对于Ubuntu系统,系统默认是已经安装FFmpeg的,可通过ffmpeg -version,查看系统的已经安装的版本信息。如果系统内没有安装则需要按照一下步骤进行。 1-获取编译环境依赖: 这些都是项目编译所需的依赖包,如果编译完成可以自行进行删除。 如果你的系统是Ubu

    2024年02月07日
    浏览(28)
  • opencv+ffmpeg环境(ubuntu)搭建全面详解

    1.1它们之间的联系 我们知道opencv主要是用来做图像处理的,但也包含视频解码的功能,而在视频解码部分的功能opencv是使用了ffmpeg。所以它们都是可以处理图像和视频的编解码,我个人感觉两个的侧重点不一样。 1.2它们之间的区别 这就要提上面我所说的它们的侧重点是不一

    2024年02月15日
    浏览(239)
  • window10_ffmpeg调试环境搭建-自己编译

    《FFmpeg原理》的社群来了,想加入社群的朋友请购买 VIP 版,VIP 版有更高级的内容与答疑服务。 《window10_ffmpeg调试环境搭建-极速版》已经介绍了在qt creator里面 调试ffmpeg.c 工程。但是极速版的dll是现成的。所以本文来讲解如何自己编译出ffmpeg的dll。 window10 环境下 ffmpeg的编

    2023年04月09日
    浏览(77)
  • FFmpeg开发笔记(一)搭建Linux系统的开发环境

    对于初学者来说,如何搭建FFmpeg的开发环境是个不小的拦路虎,因为FFmpeg用到了许多第三方开发包,所以要先编译这些第三方源码,之后才能给FFmpeg集成编译好的第三方库。 不过考虑到刚开始仅仅调用FFmpeg的API,不会马上去改FFmpeg的源码,因此只要给系统安装编译好的FFmpe

    2023年04月16日
    浏览(26)
  • FFmpeg开发笔记(二)搭建Windows系统的开发环境

    由于Linux系统比较专业,个人电脑很少安装Linux,反而大都安装Windows系统,因此提高了FFmpeg的学习门槛,毕竟在Windows系统搭建FFmpeg的开发环境还是比较麻烦的。 不过若有已经编译好的Windows版本FFmpeg开发包,那就免去了繁琐的Windows编译过程,所以直接安装已编译的FFmpeg开发包

    2024年02月01日
    浏览(68)
  • FFmpeg: 自实现ijkplayer播放器-02环境搭建

    安装环境 IDE: Qt5.12 库: ffmpeg-4.2.1-win32 SDL 项目工程配置 pro文件 库文件 将配置文件解压后放到工程路径下 对应配置文件网盘链接: 链接:https://pan.baidu.com/s/1YO7ftVvrJMiflAOS_0roVw?pwd=regr 提取码:regr

    2024年04月17日
    浏览(25)
  • ubuntu22.10 ffmpeg-webrtc推拉流srs环境搭建

    一、编译ffmpeg-webrtc 二、openssl,opus,x264配置 三、编译srs 四、测试 4.1推流端 4.2拉流端 五、交互与sdp 最近看到杨大佬发的动态,尝鲜体验一下。 一、编译ffmpeg-webrtc ffmpeg-webrtc官网:https://github.com/ossrs/ffmpeg-webrtc 拉取ffmpeg-webrtc代码: 这里配置需要openssl,opus,x264见下 二、

    2024年02月05日
    浏览(34)
  • MacOS快速安装FFmpeg

    参考博客: https://blog.51cto.com/aiyc/5151109 环境描述: 需求描述:在macOS上安装FFmpeg套件,包括ffmpeg, ffplay, ffprobe, ffserver 第一步:进入官网 Download FFmpeg 第二步:选择苹果图标,然后点击Static builds for macOS 64-bit按钮 第三步:下载文件,以ffmpeg为例,选择想要的版本,注意,不要

    2024年02月15日
    浏览(26)
  • 【配置环境】安装Ffmpeg音视频编解码工具和搭建EasyDarwin开源流媒体服务器

    目录 一,安装Ffmpeg音视频编解码工具 1,简介 2,开发文档 3,安装部署 二,搭建EasyDarwin开源流媒体服务器 1,简介 2,主要功能特点 3,安装部署 4,效果图 三,简单测试 Ffmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许

    2024年02月07日
    浏览(53)
  • macos使用搭建算法竞赛c/c++的g++/gcc编译环境(homebrew,含万能头,改环境变量,vscode/clion可用)

    1、homebrew安装 我没改镜像,直接网上脚本一键安装的,具体命令忘了,可能是这个 反正装这个的方法很多,网上一搜都有。 成功装上homebrew就行。 2、安装g++ 装个最高的 安装成功后,终端里的gcc是不会变的 但是可以用gcc-12进行编译,他的路径可以where一下看到 也可以 gcc-

    2024年02月07日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包