FFmpeg开发笔记(三十九)给Visual Studio的C++工程集成FFmpeg

ffmpeg,visual,studio · 浏览次数 : 18

正文

《FFmpeg开发实战:从零基础到短视频上线》一书的“第11章  FFmpeg的桌面开发”介绍了如何在Windows环境对Qt结合FFmpeg实现桌面程序,那么Windows系统通过Visual Studio开发桌面程序也是很常见的,下面就介绍如何在Visual Studio的C++工程中集成FFmpeg库和SDL2库。

首先按照《FFmpeg开发实战:从零基础到短视频上线》一书第1章“1.3  Windows系统安装FFmpeg”的介绍,把已编译好的FFmpeg库安装到个人电脑的E:\msys64\usr\local\ffmpeg(该安装目录可替换为自己电脑实际的安装路径,注意一旦更换FFmpeg的安装目录,后面所有的FFmpeg安装路径配置也要跟着修改)。
再打开事先安装的Visual Studio 2022,创建一个基于C++的控制台应用项目。等待Visual Studio打开新项目,在主界面右侧的解决方案资源管理器窗口中右击项目名称,选择右键菜单底部的属性选项。在弹出的属性页面中,依次选择左侧的列表项:配置属性→VC++目录,并在属性页面右侧的列表项中依次选择:常规→外部包含目录→编辑。在弹出的外部包含目录窗口中添加下列头文件目录(具体路径根据自己电脑上的ffmpeg安装路径调整):

E:\msys64\usr\local\ffmpeg\include
E:\msys64\usr\local\sdl2\include

单击外部包含目录窗口右下角的确定按钮,确认添加上面两个头文件目录。
接着依次选择属性页面左侧的列表项:配置属性→链接器→常规,并在页面右侧的列表项中依次选择:附加库目录→编辑。在弹出的附加库目录窗口中添加下列库文件目录(具体路径根据自己电脑上的sdl2安装路径调整):

E:\msys64\usr\local\ffmpeg\lib
E:\msys64\usr\local\sdl2\lib

单击附加库目录窗口右下角的确定按钮,确认添加上面两个库文件目录。
接着依次选择属性页面左侧的列表项:配置属性→链接器→输入,并在页面右侧的列表项中依次选择:附加依赖项→编辑。在弹出的附加依赖项窗口中添加下列lib文件列表:

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

添加了lib文件配置的附加依赖项窗口如下图所示。单击附加依赖项窗口右下角的确定按钮,确认添加上述的lib文件列表。

然后单击属性页面右下角的确定按钮,完成FFmpeg与SDL2的依赖库导入设置。
回到Visual Studio 2022的主界面,在左侧的代码编辑窗口中填写下面的FFmpeg测试代码,主要是调用FFmpeg框架的av_log函数来输出“Hello World”。

extern "C"
{
#include <libavutil/avutil.h>
}

int main(int argc, char** argv) {
    av_log(NULL, AV_LOG_INFO, "Hello World\n");
    return 0;
}

保存测试代码后,依次选择顶部菜单:调试→开始执行。Visual Studio就开始编译测试程序,编译完毕弹出控制台窗口输出了一行日志“Hello World”,说明成功在Visual Studio的C++工程中集成了FFmpeg库。

更多详细的FFmpeg开发知识参见《FFmpeg开发实战:从零基础到短视频上线》一书。

 

与FFmpeg开发笔记(三十九)给Visual Studio的C++工程集成FFmpeg相似的内容:

FFmpeg开发笔记(三十九)给Visual Studio的C++工程集成FFmpeg

​《FFmpeg开发实战:从零基础到短视频上线》一书的“第11章 FFmpeg的桌面开发”介绍了如何在Windows环境对Qt结合FFmpeg实现桌面程序,那么Windows系统通过Visual Studio开发桌面程序也是很常见的,下面就介绍如何在Visual Studio的C++工程中集成FFm

FFmpeg开发笔记(三十五)Windows环境给FFmpeg集成libsrt

​《FFmpeg开发实战:从零基础到短视频上线》一书的“10.2 FFmpeg推流和拉流”提到直播行业存在RTSP和RTMP两种常见的流媒体协议。除此以外,还有比较两种比较新的流媒体协议,分别是SRT和RIST。 其中SRT全称为Secure Reliable Transport,中文叫做安全可靠传

FFmpeg开发笔记(三十四)Linux环境给FFmpeg集成libsrt和librist

​《FFmpeg开发实战:从零基础到短视频上线》一书的“10.2 FFmpeg推流和拉流”提到直播行业存在RTSP和RTMP两种常见的流媒体协议。除此以外,还有比较两种比较新的流媒体协议,分别是SRT和RIST。 其中SRT全称为Secure Reliable Transport,中文叫做安全可靠传

FFmpeg开发笔记(三十八)APP如何访问SRS推流的RTMP直播地址

​《FFmpeg开发实战:从零基础到短视频上线》一书在第10章介绍了轻量级流媒体服务器MediaMTX,通过该工具可以测试RTSP/RTMP等流媒体协议的推拉流。不过MediaMTX的功能实在是太简单了,无法应用于真实直播的生产环境,真正能用于生产环境的流媒体服务器还要看SRS或者ZLMediaKi

FFmpeg开发笔记(三十七)分析SRS对HLS协议里TS包的插帧操作

​《FFmpeg开发实战:从零基础到短视频上线》一书的“2.1.2 音视频文件的封装格式”介绍了视频流的PS格式和TS格式。由于TS包的长度固定,从TS流的任一片段开始都能独立解码,因此可以把TS当成音视频文件的封装格式。 鉴于TS包的独立解码特性,HLS协议引入了TS格式作为传输单元。HLS协议的

FFmpeg开发笔记(三十六)Linux环境安装SRS实现视频直播推流

​《FFmpeg开发实战:从零基础到短视频上线》一书在第10章介绍了轻量级流媒体服务器MediaMTX,通过该工具可以测试RTSP/RTMP等流媒体协议的推拉流。不过MediaMTX的功能实在是太简单了,无法应用于真实直播的生产环境,真正能用于生产环境的流媒体服务器还要看SRS或者ZLMediaKi

FFmpeg开发笔记(三十三)分析ZLMediaKit对H.264流的插帧操作

​《FFmpeg开发实战:从零基础到短视频上线》一书的“3.4.3 把原始的H264文件封装为MP4格式”介绍了如何把H.264裸流封装为MP4文件。那么在网络上传输的H.264裸流是怎样被接收端获取视频格式的呢?前文指出H.264流必定以“SPS帧→PPS帧→IDR帧”开头,接下来就来验证是否确实

FFmpeg开发笔记(三十二)利用RTMP协议构建电脑与手机的直播Demo

不管是传统互联网还是移动互联网,实时数据传输都是刚需,比如以QQ、微信为代表的即时通信工具,能够实时传输文本和图片。其中一对一的图文通信叫做私聊,多对多的图文通信叫做群聊。 除了常见的图文即时通信,还有实时音视频通信,比如一对一的音频通话、一对一的视频通话等等,此时可采用WebRTC技术,有关Web

FFmpeg开发笔记(三十一)使用RTMP Streamer开启APP直播推流

​RTMP Streamer是一个安卓手机端的开源RTMP直播推流框架,可用于RTMP直播和RTSP直播,其升级版还支持SRT直播(腾讯视频云就采用SRT协议)。RTMP Streamer支持的视频编码包括H264、H265、AV1等等,支持的音频编码包括AAC、G711、OPUS等等,可谓功能强大

FFmpeg开发笔记(三十)解析H.264码流中的SPS帧和PPS帧

​《FFmpeg开发实战:从零基础到短视频上线》一书的“2.1.1 音视频编码的发展历程”介绍了H.26x系列的视频编码标准,其中H.264至今仍在广泛使用,无论视频文件还是网络直播,H.264标准都占据着可观的市场份额。 之所以H.264取得了巨大的成功,是因为它提出了一个新概念,把标准框架划分为