音视频windows环境ffmpeg搭建

1:配置ffmpeg,使window是终端可以识别到ffplay, ffmpeg工具 使用ffplay xxx.mp4 -x 800 -y 400 进行测试

2:把需要的dll文件拷贝到qt的项目库下,编译调试qt可以成功。 可以用ldd命令查看依赖的dll

3:如何配置ffmpeg的dll路径,使qt可以新建项目自动识别到?

4:用动态库的时候,需要相关的dll进行链接才能debug,静态库好像也有个dll?

1:windows下命令行环境搭建

​ 获取对应的ffmpeg并安装

1:获取ffmpeg需要的包:

​ 从ffmpeg官网进行下载:http://ffmpeg.org/

​ 选择windows,这里选择第一个:
在这里插入图片描述

这里我选择zip进行下载,好像下载的是static的库,可以试试其他的:
在这里插入图片描述

2:配置环境变量。
**方案1: **

​ ===》建议采用这种方案,后面qt调试不会有问题

​ 解压shared.zip,把bin目录对应的可执⾏⽂件拷贝到C:\Windows (ffmpeg.exe ffplay.exe ffprobe.exe)

​ 动态链接库拷贝到C:\Windows\SysWOW64 (avcodec-58.dll avdevice-58.dll avfilter-7.dll avformat-58.dll

​ avutil-56.dll postproc-55.dll swresample-3.dll swscale-5.dll)

​ 描述:WoW64 (Windows On Windows64 )是⼀个Windows操作系统的⼦系统,被设计⽤来处理许多在32-bit Windows和64-bit Windows之间的不同的问题,使得可以在64-bit Windows中运⾏32-bit程序。)

方案2:

==》ERROR :这种方案虽然能识别到ffmpeg,但是在qt调试时,会发现无法运行,因为可执行文件依赖的一些dll会报找不到!!!

直接把对应的bin目录增加到环境变量中,shared或者static都行:

如,我的bin目录:
在这里插入图片描述
添加到环境变量中:
在这里插入图片描述

进行测试,在cmd终端下执行ffmpeg -version验证:
在这里插入图片描述

2:安装必要的工具(vs2015和qt)

1: 安装vs2015

1:下载

从第三方下载:http://www.xz7.com/downinfo/202013.html

获取到的文件:vs2015.ent_chs

2:安装

直接双击打开进行安装:
在这里插入图片描述

选择需要的一些必备组件,这个可能需要一定的耗时:

​ 注意选择Visual C++相关组件和通用windows相关组件
在这里插入图片描述
在这里插入图片描述

安装完成后进行简单的测试,可以加断点进行调试。

3:设置环境变量

vs安装目录下的\VC\bin
在这里插入图片描述

2:安装qt

1: 下载:

这里使用5.12.0版本

http://download.qt.io/official_releases/qt/5.10/5.12.0/

2:下载的程序直接进行双击安装(exe为windows上的,run为linux中对应的)

在这里插入图片描述

3:选择必要的组件,这里

可能需要注册一个账号,注册一个就好。

选择必要的组件:(我这里环境装的是vs2015的)
在这里插入图片描述
在这里插入图片描述

在安装过程中有报错或者使用过程中有报错,可以百度自行解决,这里遇到过的报错解决方案是

需要自行安装strawberry-perl
在这里插入图片描述

4:用qt新建项目进行测试(断点调试查看信息)

参考下一步。

这里发现,使用MinGw 是没有问题的,但是MSVC2015 32/64都是有问题的,需要安装cdb。

注意:这里遇到一个问题: 无法运行“rc.exe“

​ ==》这应该是最近对vs进行修改或者环境变量变了导致的,修改环境变量或者把该文件拷贝到

在sdk包目录下,sdk 10/8.1找到rc.exe 和 rcdll.dll ,拷贝到自己的vs2015安装目录下对应的/vc/bin

如,我刚装的路径 :C:\Program Files (x86)\Windows Kits\8.1\bin\x86下找到rc.exe 和 rcdll.dll,拷贝到如下:
在这里插入图片描述

3:安装cdb调试工具(qt调试用)

CDB(command line debugger)是给控制台调试代码用的,CDB是WinDbg的小兄弟。

因为MSVC用的调试器是C:\Windows\System32\vsjitdebugger.exe,所以安装Visual Studio是没有cdb的。

必须从WDK里面安装Debugging Tools for Windows。

​ 可以参考链接:https://www.cnblogs.com/lixuejian/p/12915174.html

安装完成后,在C:\Program Files (x86)\Windows Kits\8.1\Debuggers\x86路径下可以找到cdb.exe和gdb.exe。

1:获取cdb安装包:

这里的安装包是从sdk中进行提取,只安装Debugging Tools for Windows选项!

这里用的vs2015, 调试的时候发现有问题,选择了SDK 8.1的包进行安装

https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/debugger-download-tools
在这里插入图片描述
在这里插入图片描述

2:单击下载下来的exe进行安装,只安装“Debugging Tools for Windows”选项

在这里插入图片描述

3:在qt环境中进行查看测试:

​ 在工具==》选项目录下查看,发现没有异常的提示,然后断点debug也能看到相关调试信息:
在这里插入图片描述

4:其他:

为什么安装CDB编调试器?
img
(1)Kits页面显示QtCreator可用的编译工具,在图中可以看到有3个编译工具可用。

(2)Qt Versions页面显示安装的Qt版本,有Qt 5.9.1MinGW 32bit、Qt 5.9.1MSVC201532bit和Qt 5.9.1MSVC201564bit3个可用的版本。

(3)Compliers页面显示系统里可用的C和C++编译器,由于安装了MinGW和Visual Studio2015,Qt Creator会自动检测出这些编译器。

(4)Debuggers页面显示Qt Creator自动检测到的调试器,有GNU gdb for MinGW调试器和Windows的CDB调试器。

注意: 如果只是在计算机上安装了Visual Studio2015,显示的界面上MSVC2015的两个编译器的图标会变为带有感叹号的一个黄色图标。Debuggers页面没有Windows的CDB调试器,可以用MSVC编译器对Qt Creator编写的程序进行编译,但是不能调试,这是因为缺少了Windows Software Development Kit(SDK)。这个SDK不会随Visual Studio一同安装, 需要从Microsoft网站上下载。可以下载Windows SoftwareDevelopment Kit(SDK)for Windows8.1,安装后重启计算机即可。

4:qt进行ffmpeg测试

1:新建qt项目。

2:将相关的依赖库拷贝到qt项目目录下,如图:
在这里插入图片描述

3:修改pro配置文件,添加测试需要的依赖相关lib和头文件。

TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt

SOURCES += main.c
win32 {
        INCLUDEPATH += $$PWD/ffmpeg-4.2.1-win32-dev/include
        LIBS += $$PWD/ffmpeg-4.2.1-win32-dev/lib/avformat.lib   \
                $$PWD/ffmpeg-4.2.1-win32-dev/lib/avcodec.lib    \
                $$PWD/ffmpeg-4.2.1-win32-dev/lib/avdevice.lib   \
                $$PWD/ffmpeg-4.2.1-win32-dev/lib/avfilter.lib   \
                $$PWD/ffmpeg-4.2.1-win32-dev/lib/avutil.lib     \
                $$PWD/ffmpeg-4.2.1-win32-dev/lib/postproc.lib   \
                $$PWD/ffmpeg-4.2.1-win32-dev/lib/swresample.lib \
                $$PWD/ffmpeg-4.2.1-win32-dev/lib/swscale.lib
        }

4: 修改测试代码,对ffmpeg的接口进行测试。

5:调试查看结果,如果有问题,请排查pro文件,如果不能debug,请参考上文,或者需要的ffmpeg相关库没有拷全。

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

6:查看运行结果

在这里插入图片描述

5:MSYS2安装及换源(shell命令行开发环境)

1:MSYS2提供了bash shell等linux环境、版本控制软件(git/hg)和MinGW-w64 ⼯具链.

​ ==》这里我们用来编译ffmpeg,可以编译出适合自己的功能。

2:下载MSY2:

https://www.msys2.org/
在这里插入图片描述

3:安装msys2,直接傻瓜式安装,我的安装目录E:\audioplaytools\msys2。(注意:安装完先不要点击运行)。

4:修改配置,把vs的环境继承给msys2

​ 修改配置文件 msys2_shell.cmd,把rem set MSYS2_PATH_TYPE=inherit 修改为 set MSYS2_PATH_TYPE=inherit

5:描述: 一般选择MinGW-w64进行编译

MSYS2可以选择msys或者MinGW-w64环境来编译,不过在msys下使⽤gcc编译出来的exe和dll依赖msys-2.0.dll,⽽MinGW-w64下编译出来的⽂件不需要依赖这个dll,从程序的运⾏效率来看,不依赖这个dll的程序的效率应该更⾼。所以选择MinGW-w64来编译更佳。

6:更改pacman的源==》(MSYS2中的软件包管理工具,更行国内源)
在这里插入图片描述

编辑 /etc/pacman.d/mirrorlist.mingw32 ,在⽂件开头添加:

Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686/
Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686/

编辑 /etc/pacman.d/mirrorlist.mingw64 ,在⽂件开头添加:

Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64/
Server = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64/

编辑 /etc/pacman.d/mirrorlist.msys ,在⽂件开头添加:

Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch/
Server = http://mirrors.ustc.edu.cn/msys2/msys/$arch/

7: 启动命令行对应的命令,在对应的目录打开cmd

msys2_shell.cmd -mingw64   #打开64位的窗口
msys2_shell.cmd            #打开32位的窗口

8: pacman更新源

pacman -Sy

9:如果配置环境变量? ==》暂时没有测试

6:MSYS2安装必要的工具

1: gcc编译器等的安装:
1:MSYS2 自带的开发环境(安装包msys2-devel) 或者MinGW-w64

​ MSYS2 自带的开发环境 :可执行文件要依赖于 msys-2.0.dll(提供了 Linux 下编程的函数和接口,例如 fork 函数) ==》适用于编译linux下的软件

​ MinGW-w64: 不再依赖于 msys-2.0.dll,适用于源代码基于 windows 开发,前提是不使用linux POSIX的接口。

2:安装MinGW-w64

暂时用msys2_shell.cmd -mingw64打开64位终端,执行安装命令:

pacman -S mingw-w64-x86_64-toolchain
3:暂时不安装msys2自带的编译器:
pacman -S msys2-devel
pacman -S make gcc diffutils pkg-config
4:安装git,make等工具
pacman -S git
pacman -S make
pacman -S automake
pacman -S autoconf
pacman -S perl
pacman -S libtool
pacman -S mingw-w64-i686-cmake
pacman -S pkg-config
#如果需要编译出ffplayer的话,还需要安装SDL
pacman -S mingw-w64-x86_64-SDL2
2: 防止与MVSC冲突,重命名link.exe

重命名 msys64/usr/bin/link.exe 为 msys64/usr/bin/link.bak

3:查看当前已经安装的软件
XA-146@DESKTOP-4RQJ6M3 MINGW64 /usr/bin
$ which cl cpp
/e/audioplaytools/vs2015/VC/bin/cl
/mingw64/bin/cpp

7:用MSYS2编译第三方库及ffmpeg

1:安装yasm(汇编用)
pacman -S yasm
2:安装nasm(最新x264用,也是汇编相关)
pacman -S nasm
3:下载和编译x264,

准备相关目录,将源码放在/home/XA-146/code 编译生成的文件放在/home/XA-146/code/build中。

git clone http://git.videolan.org/git/x264.git 
或者码云下载
git clone https://gitee.com/mirrors_addons/x264.git

./configure --prefix=/home/XA-146/code/build/libx264 --host=x86_64-w64-mingw32 --enable-static --extra-ldflags=-Wl,--output-def=libx264.def
make
make install

生成libx264.lib

没有包含lib⽂件,需要⾃⼰⼿⼯⽣成。 需要用的时候要用到lib和对应的dll文件。

#需要在编译的时候加上: --enable-shared  注意一定要修改到自己编译路径
./configure --prefix=/home/XA-146/code/build/libx264 --host=x86_64-w64-mingw32 --enable-shared --enable-static --extra-ldflags=-Wl,--output-def=libx264.def 
make
make install

cp ./libx264.def /home/XA-146/code/build/libx264/lib/
cd /home/XA-146/code/build/libx264/lib
#若要生成64位lib文件则输⼊如下命令:
lib /machine:X64 /def:libx264.def

#若要生成32位lib文件则输⼊如下命令:
lib /machine:i386 /def:libx264.def

这里生成的是64位的lib,查看并介绍使用方法: ==>这里待验证,因为没有配置–enable-shared

​ 查看相关信息及lib命令:

XA-146@DESKTOP-4RQJ6M3 MINGW64 ~/code/build/libx264/lib
$ ls
libx264.a  libx264.def  libx264.dll.a  libx264.exp  libx264.lib  pkgconfig
XA-146@DESKTOP-4RQJ6M3 MINGW64 ~/code/build/libx264/bin
$ ls
libx264-163.dll  x264.exe

​ 即得到libx264.lib,然后将/home/XA-146/code/build/libx264/bin/libx264-161.dll (具体名字和x264版本有关)改名或者复制⼀份为libx264.dll

​ 使用: 将include中的.h头⽂件、libx264.lib和libx264.dll复制到项⽬中对应位置。

附下载地址:https://www.videolan.org/developers/x264.html

4:下载和编译fdk-aac
git clone --depth 1 https://gitee.com/mirrors/fdk-aac.git
cd fdk-aac
./autogen.sh
./configure --prefix=/home/XA-146/code/build/libfdk-aac --enable-static --enable-shared
make -j4
make install

附下载地址:https://sourceforge.net/projects/opencore-amr/files/fdk-aac/

5:下载编译mp3:
git clone --depth 1 https://gitee.com/hqiu/lame.git
cd lame
./configure --prefix=/home/XA-146/code/build/libmp3lame --disable-shared --disable-frontend --enable-static
make
make install

有时候ffmpeg会编译报错,需要下载版本>= 3.98.3

libmp3lame下载: https://sourceforge.net/projects/lame/files/lame/

6:下载编译libvpx
git clone --depth 1 https://github.com/webmproject/libvpx.git 
cd libvpx
./configure --prefix=/home/XA-146/code/build/libvpx --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm 
make -j4
make install
7:下载和安装ffmepg
git clone git://source.ffmpeg.org/ffmpeg.git
#或者:
git clone https://gitee.com/mirrors/ffmpeg.git
cd ffmpeg
#查看选择版本
git branch -a
git checkout remotes/origin/release/4.2
#配置命令  注意路径的正确性 注意\后好像不能有空格
./configure --prefix=/home/XA-146/code/build/ffmepg-4.2 \
	--arch=x86_64 \
	--enable-shared \
	--enable-gpl \
	--enable-libfdk-aac \
	--enable-nonfree \
	--enable-libvpx \
	--enable-libx264 \
	--enable-libmp3lame \
	--extra-cflags="-I/home/XA-146/code/build/libfdk-aac/include" \
	--extra-ldflags="-L/home/XA-146/code/build/libfdk-aac/lib" \
	--extra-cflags="-I/home/XA-146/code/build/libvpx/include" \
	--extra-ldflags="-L/home/XA-146/code/build/libvpx/lib" \
	--extra-cflags="-I/home/XA-146/code/build/libx264/include" \
	--extra-ldflags="-L/home/XA-146/code/build/libx264/lib" \
	--extra-cflags="-I/home/XA-146/code/build/libmp3lame/include" \
	--extra-ldflags="-L/home/XA-146/code/build/libmp3lame/lib"
	
make -j8
make install

8:qt使用MSVC2015 64bit调用测试我们的ffmpeg库

1: 新建qt项目文件
2:拷贝生成的ffmpeg文件夹到项目文件下

在这里插入图片描述

3:修改qt配置文件以及测试代码:

修改项目pro文件:

TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt

SOURCES += main.c
INCLUDEPATH += \
        $$PWD/ffmepg-4.2/include

LIBS += $$PWD/ffmepg-4.2/bin/avformat.lib \
        $$PWD/ffmepg-4.2/bin/avcodec.lib \
        $$PWD/ffmepg-4.2/bin/avdevice.lib \
        $$PWD/ffmepg-4.2/bin/avfilter.lib \
        $$PWD/ffmepg-4.2/bin/avutil.lib \
        $$PWD/ffmepg-4.2/bin/swresample.lib \
        $$PWD/ffmepg-4.2/bin/swscale.lib

修改main.c文件

#include <stdio.h>
#include "libavutil/avutil.h"
int main()
{
    printf("Hello World!\n");
    printf("Hello FFMPEG, version is %s\n", av_version_info());
    return 0;
}
4:测试运行,因为我们生成的ffmpeg是64位,这一用msvc 64进行测试,同时遇到问题:无法运行rc.exe

qt安装目录: E:\audioplaytools\Qt\Qt5.10.1\5.10.1 下对应32和64的版本bin中,

vs2015的安装目录下: E:\audioplaytools\vs2015\VC\bin

从计算机c盘C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64找到rc.exe和rxdll.dll拷贝到上面的目录中测试。

5:报错:The CDB process terminated. ==>这是因为ffmpeg缺内容导致。

解决方案,可以在windows环境下双机ffplay.exe 或者ffmpeg.exe查看启动情况,用everything把需要的dll进行拷贝。

​ 也可以用ldd,或者dumpbin的方式进行查看exe,然后获取对应的dll进行拷贝。

6:在双击ffplay.exe时遇到“应用程序无法正常启动(0x000007b)”

===》网上搜索方法都没有解决,是不是与ffmpeg的32位和64位有关。

在这里插入图片描述

据说是Visual C++运行库没有安装或者不是最新版本。

==》确定问题是依赖的dll不存在或者依赖的错误。

转换问题: 确定exe执行时需要依赖的dll有哪些。

可以在windows cmd下用dumpbin ffmpeg.exe查看ffmpeg对应的版本。

直接在msys2环境下测试ffplay,发现可以使用~
在这里插入图片描述

可以在msys2通过ldd命令查看exe依赖的链接,然后把非环境变量下的dll拷贝到当前的目录,下面是我拷贝后的查看:
在这里插入图片描述

7:终于解决了,qt测试成功。

1:把编译后生成的ffmepg-4.2,拷贝到项目目录下,给头文件和lib做依赖用。

2:编译依然会报错, “The CDB process terminated”,把上面拷贝的dll,放在qt对应项目生成的debug目录下,进行debug测试。

3:注意如果不成功,清除一下debug目录下除拷贝dll的其他文件。

8:MinGW与MSVC编译的区别

MSVC是指微软的VC编译器,需要安装微软的VS软件,若是感觉软件⽐较庞⼤,可以安装visualcppbuildtools_full,不过也很⼤哈

MinGW是指是Minimalist GNU on Windows的缩写。它是⼀个可⾃由使⽤和⾃由发布的Windows特定头⽂件和使⽤GNU⼯具集导⼊库的集合,允许你在GNU/Linux和Windows平台⽣成本地的Windows程序⽽不需要第三⽅C运⾏时库。感觉跨平台型更好呢。

设置环境变量继承⾃Windows:找到msys2_shell.cmd中的rem set MSYS2_PATH_TYPE=inherit去掉rem,取消这⼀句的注释,使MSYS2的环境变量继承⾃系统

9:注意.

qt项目一定不要有中文路径。

在进行测试的时候发现,用MSVC32进行编译项目的时候,报错一些linux上的头文件找不到,比如:
在这里插入图片描述

用everything进行全局搜索,查看相关文件:
在这里插入图片描述

发现已有环境中,msys2和mingw中才会有该头文件,我就在犹豫和纠结如何通过链接头文件以及动态库的方式使用时,通过百度,咨询,最终可行性处理方案和自己的理解:

qt使用MSVC 或者mingw进行编译,

​ msvc,适用于只开发windows环境上的软件使用,要处理上述问题:

​ 1:使用pthread-win32,自行链接头文件和lib

​ 2:修改代码,使用windows thread 相关api

​ mingw,主要用于跨平台开发,需要的一些第三方库也必须时mingw编译生成的。

​ 1: 主要适用于跨平台应用程序开发

​ pthread.h实际上时linux环境上的相关头文件,可以直接使用mingw cygwin wsl等进行编译

思考总结

使用msvc32,可以在windows环境上使用qt进行调试。

使用mingw,涉及跨平台相关的软件开发时,可以进行调试。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值