1.1 配置FFmpeg+OpenCV开发环境
本文介绍了在Windows环境下配置FFmpeg+OpenCV开发环境的详细步骤。主要内容包括:1)下载并解压SDK到指定目录;2)创建MFC应用程序项目并配置包含目录、库目录和依赖项;3)编写测试类fmlp,实现FFmpeg编解码器信息遍历功能;4)调试运行程序,解决DLL缺失问题。通过本教程可以快速搭建多媒体开发环境,并验证环境配置是否成功。关键点包括正确配置路径、处理FFmpeg头文件以及解
本教程所对应的SDK下载链接:
https://download.csdn.net/download/XiBuQiuChong/88657539
本课对应源文件下载链接:
https://download.csdn.net/download/XiBuQiuChong/88657528
一、配置开发环境
1.下载FFmpeg+OpenCV开发所用的SDK压缩包,并解压到E:\SDK下,解压后的路径应为:E:\SDK\ffmpeg-sdk\58\x86\dll及E:\SDK\opencv-sdk\340\x86\dll。
2.新建VC++项目,名称为demo,项目类别为MFC应用程序,并按以下图示进行配置,其余选项默认即可。

3.删除对话框中默认控件,右单击打开工程“属性”页并配置包含文件目录及库目录。

(1)配置属性-VC++目录-包含目录:
|
json\include;E:\SDK\dx-sdk\x86\include\baseclasses;E:\SDK\opencv-sdk\340\x86\include;E:\SDK\ffmpeg-sdk\58\x86\include; |
(2)配置属性-VC++目录-库目录:
|
json\lib;E:\SDK\dx-sdk\x86\lib;E:\SDK\oencv-sdk\340\x86\lib;E:\SDK\ffmpeg-sdk\58\x86\lib; |

(3)配置属性-链接器-输入-附加依赖项:
|
avcodec.lib;avformat.lib;avutil.lib;avdevice.lib;avfilter.lib;postproc.lib;swresample.lib;swscale.lib;strmbase.lib;winmm.lib;opencv_core340d.lib;opencv_highgui340d.lib;opencv_imgproc340d.lib;opencv_videoio340d.lib; |

二、编写代码测试环境搭建是否正确。
1.右单击项目新建类,类名为fmlp。

2.打开fmlp.h并加入常用头文件,注意ffmpeg头文件要用extern"C"包含。
|
// 防止头文件重复包含 #pragma once #include <dshow.h> #include <queue> // 引入FFmpeg相关库(音视频编解码、格式处理等核心功能) extern "C" { #include "libavcodec/avcodec.h" #include "libavformat/avformat.h" #include "libavutil/avutil.h" #include "libswscale/swscale.h" #include "libswresample/swresample.h" #include "libavdevice/avdevice.h" #include "libavfilter/buffersink.h" #include "libavfilter/buffersrc.h" #include "libavcodec/dxva2.h" #include "libavutil/opt.h" #include "libavutil/pixdesc.h" #include "libavutil/time.h" #include "libavutil/mathematics.h" #include "libavutil/audio_fifo.h" #include "libavutil/imgutils.h" }; // 引入OpenCV库(图像处理与计算机视觉功能) #include <opencv/cxcore.h> #include <opencv/cv.h> #include <opencv2/opencv.hpp> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/highgui/highgui_c.h> using namespace std; // 自定义类fmlp(结合多媒体与图像处理功能) class fmlp { public: fmlp(); // 构造函数 ~fmlp(); // 析构函数 int init(); // 初始化方法(返回状态码) }; |
3.打开fmlp.cpp并输入以下测试代码:
|
// 包含预编译头文件(通常包含常用系统头文件和库声明) #include "stdafx.h" // 包含当前类的头文件 #include "fmlp.h" // fmlp类的构造函数 fmlp::fmlp() { // 构造时调用初始化函数 init(); } // fmlp类的析构函数(目前为空,可用于释放资源) fmlp::~fmlp() { } // fmlp类的初始化函数 int fmlp::init() { // 输出初始化信息(调试用) TRACE("init.....\n"); // 用于存储编码器/解码器信息的缓冲区 char info[40000] = { 0 }; // 注册FFmpeg所有可用的编解码器、格式等(FFmpeg旧版本初始化必要步骤) av_register_all(); // 获取第一个编解码器指针(用于遍历所有编解码器) AVCodec *avcodec = av_codec_next(NULL); // 遍历所有编解码器 while (avcodec != NULL) { // 判断是解码器还是编码器并添加标识 if (avcodec->decode != NULL) { sprintf(info, "%s[Dec]", info); // 解码器标识 } else { sprintf(info, "%s[Enc]", info); // 编码器标识 } // 判断编解码器类型(视频/音频/其他)并添加标识 switch (avcodec->type) { case AVMEDIA_TYPE_VIDEO: sprintf(info, "%s[Video]", info); // 视频类型 break; case AVMEDIA_TYPE_AUDIO: sprintf(info, "%s[Audio]", info); // 音频类型 break; default: sprintf(info, "%s[Other]", info); // 其他类型 break; } // 拼接编解码器名称 sprintf(info, "%s[%10s]\n", info, avcodec->name); // 移动到下一个编解码器 avcodec = avcodec->next; // 输出当前编解码器信息(调试用) TRACE("%s", info); } // 初始化成功,返回0 return 0; } |
4.在demoDlg.h中引入fmlp的头文件以便在主对话框中使用fmlp类:
|
#include "fmlp.h" |
5.在主对话框的OnInitDialog()函数中加入以下代码:
|
// TODO: 在此添加额外的初始化代码 fmlp *myFmlp = new fmlp(); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE |
三、调试运行
1.单击工具栏上的“本地Windows调试器”开始运行程序,提示以下错误:

2.把SDK目录下的dll拷贝到debug目录再次运行,错误消除。

3.再次单击工具栏上的“本地Windows调试器”运行程序,程序正常运行且能输出以下信息则表示环境配置成功。

更多推荐




所有评论(0)