window10_ffmpeg调试环境搭建-自己编译

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

《FFmpeg原理》的社群来了,想加入社群的朋友请购买 VIP 版,VIP 版有更高级的内容与答疑服务。


《window10_ffmpeg调试环境搭建-极速版》已经介绍了在qt creator里面 调试ffmpeg.c 工程。但是极速版的dll是现成的。所以本文来讲解如何自己编译出ffmpeg的dll。

window10 环境下 ffmpeg的编译方式主要有以下2种:

1,MSYS2 + MinGW

2,MSYS2 + MSVC

由于 window 的原生 CMD 命令行无法执行shell脚本,也没有 make 之类的命令,所以需要装 MSYS2 软件。

MSYS2 是什么?MSYS2 实际上就是一个linux 仿真环境,装了 MSYS2 就可以运行 ffmpeg 的configure 编译脚本了。

MinGW 跟 MSVC 是两个不同的编译器,MinGW 编译器有什么优势?请看下面代码

/*linux api pthread_create()*/
#include <stdio.h>
#include <pthread.h>
void* PrintHello(void* data)
{
    printf("Hello from new thread\n");
    pthread_exit(NULL);
}
int main(int argc, char* argv[])
{

   pthread_t  thread_id;
   pthread_create(&thread_id, NULL, PrintHello, NULL);
   pthread_exit(NULL);
}

上面的代码使用了一个 linux 里面 pthread_create() 线程函数,在window 环境是没有这个线程函数的,如果用 MSVC 编译器编译,会报错。

但是如果用 MinGW 编译器 就可以在window环境 编译 pthread_create() 的代码。

fmpeg 的源代码是 linux ,window 等多平台通用的,ffmpeg 里面并没有直接使用 pthread_create() 之类的linux专属的api函数,所以 用MinGW 还是MSVC 都可以编译ffmpeg 的源码,ffmpeg 的configure 编译脚本根据不同的编译方式执行不同的编译逻辑,例如如果用MinGW的编译器,configure 里面会走 MinGW的那块编译逻辑,如果指定用 MSVC 编译,configure会走另一块逻辑。

通过在configure前面加 --toolchain=xxx 可以指定不同的编译工具链,例如 --toolchain=msvc 是指定msvc 编译工具链, 如果没指定 --toolchain ,在mingw32环境下,configure会自动选择 MinGW 的方式编译,我们本文的示例就没指定 --toolchain。

所以,与其说ffmpeg 的代码是跨平台的,不如说是 configure 这个shell脚本实现了不同平台的编译规则。因为 window 原生 CMD 命令行没法运行shell脚本,所以就需要 MSYS2。


本文主要讲解 MSYS2 + MinGW 的编译方法,MSYS2 + MSVC 后续再会出一篇文章详细讲解。

MSYS2 官网下载地址:MSYS2


MSYS2 安装完成之后,CMD 进入安装目录 C:\msys64 目录,执行 .\msys2_shell.cmd -mingw32,打开32位的环境。不要直接点击 mingw32.exe 进入32位环境。尽量用 .\msys2_shell.cmd -mingw32。因为后面会改动一下 msys2_shell.cmd 文件。

window10_ffmpeg调试环境搭建-自己编译

运行之后就会进入 linux 的仿真环境,lsps,等linux命令都可以使用。

.\msys2_shell.cmd -mingw32 是 64位的环境,用这个入口编译出来的 ffmpeg.exe 跟 DLL 默认是 64位的。本文先编译 32 位的程序,64位后续出一篇文章讲解。

window10_ffmpeg调试环境搭建-自己编译

MSYS2 Linux仿真环境中包管理命令是 pacman,类似 apt-get,yum。下面用 pacman 安装一些用来编译 FFmpeg 的软件。(pacman 下载速度慢需要切换源)

# 刷新软件包数据
pacman -Sy  
# 安装mingw-w64 ,如果报错 signature not trust,请看下面解决。
pacman -S mingw-w64-i686-toolchain 
pacman -S git
pacman -S make
pacman -S automake 
pacman -S autoconf
pacman -S perl
pacman -S mingw-w64-i686-SDL2
pacman -S libtool
pacman -S mingw-w64-i686-cmake 
pacman -S pkg-config 
pacman -S yasm
# 编译x264 需要 nasm
pacman -S nasm

常见错误:

  • mingw-w64-i686-toolchain 如果按照报 "signature not trust "错,是证书过期了,直接禁用检测,请参考此文章解决。 csdn文章

    window10_ffmpeg调试环境搭建-自己编译


准备工作已经完毕了。

FFmpeg 这个工程编解码等功能,是需要依赖一些外部库的,例如 x264库,aac库等等。所以编译FFmpeg之前,需要把 x264 ,acc 等项目编译出静态库,然后再把x264静态库,acc静态库等 Link 进去 FFmpeg 的DLL里面。

x264 项目编译:

下面的命令请把 /home/loken 改成自己的目录。

编译过程中如果报 final link failed: No space left on device 错误,尝试重启window10。

# 回到用户目录
cd /home/loken
# 创建ffmpeg目录,build目录,统一管理
mkdir -p ffmpeg/build32  
# 进入ffmpeg目录
cd ffmpeg 
#下载x264项目代码
git clone https://gitee.com/mirrors_addons/x264
# 进入x264项目目录
cd x264 
# 执行configure
./configure --prefix=/home/loken/ffmpeg/build32/libx264 \
--host=i686-w64-mingw32 --enable-static \
--extra-ldflags=-Wl,--output-def=libx264.def  
make -j8
make install

如果上面的命令没出错,在 ~/ffmpeg/build32/libx264/lib 目录下会编译出 x264 的静态库 libx264.a

fdk-aac项目编译:

# 回到ffmpeg目录
cd /home/loken/ffmpeg 
git clone --depth 1 https://gitee.com/mirrors/fdk-aac.git
cd fdk-aac
./autogen.sh
./configure --prefix=/home/loken/ffmpeg/build32/libfdk-aac --disable-shared \
--enable-static
make -j8
make install

如果上面的命令没出错,在 ~/ffmpeg/build32/libfdk-aac/lib 目录下会编译出 aac 的静态库 libfdk-aac.a

mp3项目编译:

下面的命令如果报错,请把 "~" 相对目录 改成绝对目录

cd /home/loken/ffmpeg 
git clone --depth 1 https://gitee.com/hqiu/lame.git
cd lame
./configure --prefix=/home/loken/ffmpeg/build32/libmp3lame --disable-frontend \
--disable-shared --enable-static
make -j8
make install

如果上面的命令没出错,在 ~/ffmpeg/build32/libmp3lame/lib 目录下会编译出 mp3 的静态库 libmp3lame.a

libvpx项目编译:

cd /home/loken/ffmpeg 
git clone --depth 1 https://github.com/webmproject/libvpx.git
cd libvpx
./configure --prefix=/home/loken/ffmpeg/build32/libvpx --disable-examples \
--disable-unit-tests --enable-vp9-highbitdepth --as=yasm
make -j8
make install

如果上面的命令没出错,在 ~/ffmpeg/build32/libvpx/lib 目录下会编译出 vpx的静态库 libvpx.a


FFmpeg 工程依赖的外部静态库都已经编译出来,下面可以开始编译 FFmpeg 工程了。

FFmpeg项目编译:

下载 ffmpeg 4.2 源码,链接:百度网盘 请输入提取码 提取码:g3k8

把文件 FFmpeg-4.2.zip 解压到 /home/loken/ffmpeg/ffmpeg

cd /home/loken/ffmpeg/ffmpeg-4.2
./configure \
--prefix=/home/loken/ffmpeg/build32/ffmepg-4.2 \
--enable-gpl \
--enable-sdl2 \
--enable-zlib \
--enable-shared \
--enable-nonfree \
--enable-libx264 \
--enable-libfdk-aac \
--enable-libmp3lame \
--enable-libvpx \
--extra-cflags="-I/home/loken/ffmpeg/build32/libfdk-aac/include" \
--extra-ldflags="-L/home/loken/ffmpeg/build32/libfdk-aac/lib" \
--extra-cflags="-I/home/loken/ffmpeg/build32/libvpx/include" \
--extra-ldflags="-L/home/loken/ffmpeg/build32/libvpx/lib" \
--extra-cflags="-I/home/loken/ffmpeg/build32/libx264/include" \
--extra-ldflags="-L/home/loken/ffmpeg/build32/libx264/lib" \
--extra-cflags="-I/home/loken/ffmpeg/build32/libmp3lame/include" \
--extra-ldflags="-L/home/loken/ffmpeg/build32/libmp3lame/lib"
  
make -j8
make install

编译完成之后,build32/ffmpeg-4.2 目录如下:

window10_ffmpeg调试环境搭建-自己编译

window10_ffmpeg调试环境搭建-自己编译

可以看到 ffmpeg.exe 已经编译出来了。这个时候 在MSYS2 仿真linux命令行里,ffmpeg.exe 是可以运行的。如图。

window10_ffmpeg调试环境搭建-自己编译

但是如果在window CMD 命令行运行 ffmpeg.exe ,会报错,提示缺少 libwinpthread-1.dll 等库。

window10_ffmpeg调试环境搭建-自己编译

把 C:\msys64\mingw32\bin\libwinpthread-1.dll 复制到 \home\loken\ffmpeg\build32\ffmepg-4.2\bin 。其他缺少的 dll 文件也是如此操作。

拷贝完缺少的dll文件后,再运行 ffmpeg.exe 就不会报错了。

重要知识点:

  • 如何查看exe ,dll 的是 32位 还是 64位 ? 解答:dumpbin.exe /headers ffmpeg.exe

MSYS2 环境下 ffmpeg 的编译已经讲完了,下面介绍QT 如何调用 FFmpeg 的 api 函数。

之前编译ffmpeg 的时候,configure 指定了 --enable-shared,所以项目生成了几个DLL动态库。

  • avcodec-58.dll 编解码API。
  • avdevice-58.dll 设备API。
  • avfilter-7.dll 滤镜API
  • avformat-58.dll 容器API。
  • 等等。

下面介绍 QT 项目如何加入这些dll。如果之前没装过 qt 跟 Visual Studio 2015 请看第一篇文章。

1,打开Qt creator,点击New File Or Project,选择 Non-Qt Project ,选择 Plain C Application。

window10_ffmpeg调试环境搭建-自己编译

2,勾选编译环境 kit ,MinGW 32 跟 MSVC 2015 32bit。

window10_ffmpeg调试环境搭建-自己编译

3,把 \home\loken\ffmpeg\build32 整个目录拷贝到 ffmpeg-qt-version 项目目录下。

window10_ffmpeg调试环境搭建-自己编译

4,修改 ffmpeg-qt-version.pro 文件:

TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt
​
SOURCES += main.c
​
contains(QT_ARCH, i386) {
    message("32-bit")
    INCLUDEPATH += $$PWD/build32/ffmepg-4.2/include
    LIBS += $$PWD/build32/ffmepg-4.2/bin/avformat.lib \
            $$PWD/build32/ffmepg-4.2/bin/avcodec.lib \
            $$PWD/build32/ffmepg-4.2/bin/avdevice.lib \
            $$PWD/build32/ffmepg-4.2/bin/avfilter.lib \
            $$PWD/build32/ffmepg-4.2/bin/avutil.lib \
            $$PWD/build32/ffmepg-4.2/bin/postproc.lib \
            $$PWD/build32/ffmepg-4.2/bin/swresample.lib \
            $$PWD/build32/ffmepg-4.2/bin/swscale.lib
} else {
    message("64-bit")
}

5,修改 main.c 文件:

#include <stdio.h>
#include "libavutil/avutil.h"
int main(){
    printf("Hello FFMPEG, version is %s\n", av_version_info());
    return 0;
}

6,编译运行 ffmpeg-qt-version 项目。会提示确实缺少dll。

由于 ffmpeg-qt-version 项目并没有用到pthread_create() 之类的 linux api 函数,所以 用MinGW 32bit 还是 MSVC2015 32bit 编译都没问题。

window10_ffmpeg调试环境搭建-自己编译

7,把 build32/ffmpeg-4.2/bin/*.dll 所有DLL都复制到 build-ffmpeg-qt-version-Desktop_xxxx-Debug\debug 目录。然后再次编译运行 ffmpeg-qt-version 项目,就会正常打印出 version。

window10_ffmpeg调试环境搭建-自己编译

注意事项:

  • 项目文件路径不要有中文,QT 可能会报错。

常见错误:

  • 如果报错找不到文件之类的,把qt 的 build-ffmpeg-qt-version-Desktop_xxx-Debug 目录删掉,因为可能有缓存,再重新执行上面步奏。

重要知识点:

  • 上面调用了 ffmpeg 的 api 函数 av_version_info() 打印版本号,由于 ffmpeg-qt-version 项目并没有用到pthread_create() 之类的 linux api 函数,所以 用MinGW 32bit 还是 MSVC2015 32bit 编译都没问题。
  • 虽然我们的 avcodec-58.dll 是MinGW 编译出来的,但是还是可以用MSVC来编译其他的ffmpeg-qt-version 的 main.c 文件。也就是说 MinGW 编译出来的 DLL 也是可以在 MSVC 环境中被使用的。我个人的理解是 DLL 已经是window系统级别的机器码,肯定能被 MSVC 调用。补充:这个是ABI相关知识,《ABI 与 API 的区别》
  • 需要注意,MSYS2编译ffmpeg 的gcc 版本不能跟 Qt creator里面的MinGW的gcc版本差距太大。例如MSYS2里编译ffmpeg dll的gcc是11.0版本,而Qt creator的MinGW的gcc是 5.0,在项目里面就无法使用 ffmpeg 的dll,会报错,应该是gcc版本差距太大,二进制不兼容之类的。

ffmpeg 官方发布的window dll 下载:

百度网盘:百度网盘 请输入提取码 提取码:n7dx

官方发布的 ffmpeg-4.2.1-win32-shared.zip 里面的README 记录了官方编译ffmpeg的configure选项。里面有 -enable-lzma --enable-zlib,网上某些ffmpeg 编译教程,没有加这两个选项,每次都要复制 zlib-1.dll 过去。可以参考官方的configure选项,直接把zlib等库以静态库的方式编译进去ffmpeg dll 更方便。

window10_ffmpeg调试环境搭建-自己编译

相关技术文章:

  • ffmpeg 官方编译文档,CompilationGuide – FFmpeg,推荐把官方文档细读一遍。
  • Visual Studio 2015使用入门
  • 微软软件大全下载:MSDN I TELL YOU
  • 浅谈Qt的编译方式:qmake/cmake/qbs及qbs被弃用的原因
  • 《Qmake常用语法》

©版权所属:弦外之音。 由于笔者的水平有限, 加之编写的同时还要参与开发工作,文中难免会出现一些错误或者不准确的地方,恳请读者批评指正。文章来源地址https://www.toymoban.com/news/detail-406574.html

到了这里,关于window10_ffmpeg调试环境搭建-自己编译的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • QT搭建Android编译环境及使用安卓虚拟机调试

    QT是可以创建Android APP的,同时生成apk提供安装。 而为了编译和生成apk,就需要为QT添加对应的支持包。 一、Android环境支持包下载 1、JAVA SE8 JDK JAVA SE8 JDK是JAVA环境的支持包,Android APP通常使用JAVA区编写,但是使用QT可以直接用C/C++,其实是QT将C/C++自动转换为了JAVA,最后用的也

    2024年02月14日
    浏览(36)
  • FFmpeg开发笔记(二)搭建Windows系统的开发环境

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

    2024年02月01日
    浏览(68)
  • 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)
  • Windows10中用Docker优雅的拥有一个自己的Linux环境

    使用windows的同学,想学习或者使用Linux环境时,通常会有 Hyper-v , vmware workstation , virtualbox 等虚拟机再安装Linux系统。 快使用Docker吧,彻底抛弃虚拟机 安装docker 请猛戳: Windows10环境下安装Docker - 技术圈 修改镜像 为了更快速的拉取镜像,这里使用阿里的镜像 启动Docker后,在

    2024年02月19日
    浏览(35)
  • QT5.15.2搭建Android编译环境及使用模拟器调试(全)

    地址:下载 我电脑的windows的,所以选windows 由于官方安装过程非常非常慢,一定要跟着步骤来安装,不然慢到怀疑人生 1)打开\\\"命令提示符\\\"(开始 - Windows 系统 - 命令提示符) 或者 “win+R” -输入cmd 找到刚才的exe 命令行输入以下命令(exe位置根据自己实际的),然后回车

    2024年02月04日
    浏览(44)
  • 【Zblog搭建博客网站】windows环境搭建属于自己的博客并发布上线

    转载自cpolar极点云文章:【Zblog建站】搭建属于自己的博客网站,并内网穿透实现公网访问 想要成为一个合格的技术宅或程序员,自己搭建网站制作网页是绕不开的项目。就以笔者自己的经历来说,就被自制网页网站卡过很久。不过随着电脑技术的发展,已经出现了很多便捷

    2024年02月15日
    浏览(32)
  • 如何在 Windows10 Professional 服务器上搭建自己的 Git 服务器。

    一、简介 以前,在别家的公司,一般早就把源代码管理工具搭建好了,很少有机会自己搭建一套。最近,公司也许要把现在不少的源码进行管理,于是我打算自己搭建源代码管理服务器。说起源代码管理,当然有很多中解决方案,我个人偏向搭建一个 Git 服务器。毕竟这个自

    2024年02月12日
    浏览(42)
  • 【开发环境】Windows下搭建TVM编译器

    关于搭建TVM编译器的官方文档:Install from Source — tvm 0.14.dev0 documentation (apache.org) 1. 安装Anaconda 首先我们需要安装Anaconda,因为其中包含着我们所需要的各类依赖: 进入Anaconda官网https://www.anaconda.com/products/distribution,下载Windows版本,下载完成后运行.exe, 可以更改安装路径(

    2024年02月15日
    浏览(41)
  • windows driver双机调试环境搭建,用windbg或者debug view查看内核调试输出

    本地环境 本地开发环境: win 10, visual studio installer(2022版), visual studio 2022, VMware player 目的:本地环境作为开发环境,VM作为测试和调试环境 用debug view查看内核调试输出请直接看最后 debug view查看内核打印信息 部分 开发环境搭建 通过 visual studio installer 下载安装 visual studi

    2024年02月06日
    浏览(39)
  • window10环境下搭建ros

    vs2022下载地址 chocolatey是windows下的一个包管理工具,下载ros相关的包都采用这个工具。 安装过程:在菜单栏中搜索 x64 Native Tools Command Prompt for VS 2022 (2),然后右击选择管理员运行,输入: 确保您在C盘中有10GB的可用空间,用于安装ROS系统。 还是以管理员方式打开 x64 Native T

    2024年02月05日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包