FFmpeg入门及编译 2

简介: FFmpeg入门及编译

六、VS 项目中引用 FFmpeg 库

编译好 FFmpeg 库后,下面我们就可以在 VS 中引用它了。

1、创建新项目

2、控制台应用

3、确定项目名称及位置


4、点击创建

5、引入FFmpeg 头文件

项目右键 -> 属性 -> C/C++ -> 常规 -> 附加包含目录 中添加 FFmpeg 头文件所在路径。

6、指定库文件位置

首先说明一点,我编译出来的库文件存在于 D:\msys64\usr\local\ffmpeg\bin 目录下

项目右键 -> 属性 -> 链接器 -> 常规 -> 附加库目录 中添加 FFmpeg 库所在路径。

7、指定使用哪个库

项目右键 -> 属性 -> 链接器 -> 输入 -> 附加依赖项 中指定你所用到的 FFmpeg 库

指定以下所有库:

avcodec.lib
avdevice.lib
avfilter.lib
avformat.lib
avutil.lib
postproc.lib
swresample.lib
swscale.lib

8、运行编译好的程序

当上面这此工作完成后,我们就可以在 main(…) 函数中调用 FFmpeg API 了,如调用 FFmpeg 库中的日志函数:

#include <iostream>
extern "C" {
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
}
int main()
{
    av_log_set_level(AV_LOG_DEBUG);
    av_log(NULL, AV_LOG_INFO, "Hello World!\n");
    return 0;
}

上述代码中,调用了 FFmpeg 中的两个 API,分别是 av_log_set_level(…) 以及 av_log(…),这两个函数都是 FFmpeg avutil 库中的 API。所以在使用这两个 API 之前,我们要在 main.c 中需要通过 #include 关键字将 libavtuil/log.h 这个头文件引入进来。

  • 此外,由于 FFmpeg 是 C 语言库,而我们用 VS 创建的是 C++ 工程,所以在引入头文件时需要加上 extern “C” 关键字,否则的话 VS 无法将其成功编译。

执行出现了这样的报错,其原因是在运行时无法找到需要的动态库。

解决方案一:

将 D:\msys64\usr\local\ffmpeg\bin 目录下的 avutil-58.dll 文件拷贝到 C:\Windows\System32 目录下

拷贝结果如下:

再次执行程序,可以看到如下的结果

解决方案二:

只需将我们之前编译好的 FFmpeg 库,即提示的无法找到的 .dll 库,拷贝到执行程序的同一目录下,这样执行程序就可以找到该库并正确执行了。

七、编译 FFmpeg 依赖库

很多时候我们在编译 FFmpeg 库时还要增加一些其它库,如 SDL、x264 等,如果要将这些库添加到 FFmpeg 中,首先我们要编译出 Windows 下可用的对应库。

1、编译 SDL

①、下载 SDL 源码

首先从 github 上获取 SDL 源码,命令如下:

git clone https://github.com/libsdl-org/SDL.git
git checkout release-2.26.x

需要注意的是,SDL现在已经发布了3.0版本,而ffmpeg目前只能用SDL2版本,所以在拉取代码后,需要切换到2.26这个版本

可以到这里自取 SDL-2.26.x

链接:https://pan.baidu.com/s/1n_wMhIsBb9yaDhAL8NHZ8Q

提取码:qqbh

②、下载 CMake

下载好 SDL2 源码后,我们需要使用 CMake 为其生成 VS 工程,并将其安装到 Windows 系统上。

可以到这里自取 CMake 安装包

链接:https://pan.baidu.com/s/1pQ7hh3WA6ES8pdBTpds1_Q

提取码:et4t

关于安装 CMake 这里,针对所有用户把 CMake 目录安装到系统目录

并将其安装到 D:\CMake\ 目录下

③、编译 SDL

之后打开 CMake-GUI,在 CMake-GUI 中指定 SDL 源码所在路径(D:/Git-Space/SDL)以及编译后的输出路径(D:/CMake/usr/local/)

随后执行

Configure -> Generate -> Open Project

生成 VS 工程。有了 VS 工程,我们就可以通过 VS2022 来编译 SDL 了。

分别在 Release 和 Debug 模式下,重新生成一下 All_BUILD 子项目。

没啥问题的话 SDL 就编译好了,你可以去 D:\Project\VS_Project\sdl_test\Debug 和 D:\Project\VS_Project\sdl_test\Release 目录下看看有没有对应的 lib 文件


D:\CMake\usr\local\sdl\Debug 目录如下:

D:\Project\VS_Project\sdl_test\Release 目录如下

为了满足要求,我们需要在指定输出目录下创建 lib 目录,并将 SDL2.lib 和 SDL2.dll 文件拷贝到 lib 目录下。同时在 lib 目录下创建 pkgconfig 目录,将 sdl2.pc 文件拷贝到该目录中。

最终完整的目录结构如下所示:

/usr/local/sdl2
 |------------ lib
 |              |-- sdl2.lib
 |              |-- sdl2.dll
 |              |-- pkgconfig
 |                     |----- sdl2.pc
 |------------ include

此外,我们还要修改 sdl2.pc 中的内容,将其中的库路径修改为指定的输出路径

目录
相关文章
|
3月前
|
Linux 编译器 数据安全/隐私保护
Windows10 使用MSYS2和VS2019编译FFmpeg源代码-测试通过
FFmpeg作为一个流媒体的整体解决方案,在很多项目中都使用了它,如果我们也需要使用FFmpeg进行开发,很多时候我们需要将源码编译成动态库或者静态库,然后将库放入到我们的项目中,这样我们就能在我们的项目中使用FFmpeg提供的接口进行开发。关于FFmpeg的介绍这里就不过多说明。
78 0
|
7月前
|
C++ Windows
FFmpeg入门及编译 3
FFmpeg入门及编译
54 0
|
7月前
|
编解码 API 开发工具
FFmpeg入门及编译 1
FFmpeg入门及编译
97 0
|
25天前
|
开发工具
使用FFmpeg4.3.1的SDK官方开发包编译ffmpeg.c(二)
使用FFmpeg4.3.1的SDK官方开发包编译ffmpeg.c(二)
12 0
|
3月前
|
编解码 Ubuntu C++
WebAssembly01--web 编译FFmpeg(WebAssembly版)库
WebAssembly01--web 编译FFmpeg(WebAssembly版)库
21 0
|
3月前
|
存储 Ubuntu 开发工具
ffmpeg笔记(二)windows下和ubuntu-16.04下ffmpeg编译
ffmpeg笔记(二)windows下和ubuntu-16.04下ffmpeg编译
|
4月前
ffmpeg的下载、编译与安装
ffmpeg的下载、编译与安装
105 0
|
6月前
|
编译器 计算机视觉
[笔记]OpenCV+FFmpeg+Qt实现视频编辑器之OpenCV vs2015编译
[笔记]OpenCV+FFmpeg+Qt实现视频编辑器之OpenCV vs2015编译
|
8月前
|
Ubuntu Linux
ffmpeg编译x265
ffmpeg编译x265
257 0
ffmpeg编译x265
|
8月前
超简洁ffmpeg编译ffplay
超简洁ffmpeg编译ffplay
53 0
超简洁ffmpeg编译ffplay