ffmpeg再学习 -- FFmpeg+SDL+MFC实现图形界面视频播放器

时间:2020-12-10 12:06:17

继续看雷霄骅的 课程资料 - 基于FFmpeg+SDL的视频播放器的制作
最后一篇,主要是想学一下 MFC 创建和配置。

一、创建 MFC 工程

文件->新建->项目->Visual C++ ->MFC 应用程序

ffmpeg再学习 -- FFmpeg+SDL+MFC实现图形界面视频播放器
ffmpeg再学习 -- FFmpeg+SDL+MFC实现图形界面视频播放器

应用程序类型,选择基于对话框

ffmpeg再学习 -- FFmpeg+SDL+MFC实现图形界面视频播放器

生成效果如下:

ffmpeg再学习 -- FFmpeg+SDL+MFC实现图形界面视频播放器

二、设置控件

找到“工具箱”,就可以将相应的控件拖拽至应用程序对话框中

ffmpeg再学习 -- FFmpeg+SDL+MFC实现图形界面视频播放器

常用控件有: Button, Edit Control, Static Text等。

ffmpeg再学习 -- FFmpeg+SDL+MFC实现图形界面视频播放器

右键找到“属性”选项卡

ffmpeg再学习 -- FFmpeg+SDL+MFC实现图形界面视频播放器

可以在“ Caption”属性上修改控件上的文字
可以在“ ID” 属性上修改控件上的ID( ID是控件的标识,不可重复)

播放    IDC_PLAY暂停    IDC_PAUSE停止    IDC_STOP关于    IDC_ABORT文件路径    IDC_STATIC示例编辑框    IDC_URL文件...    IDC_FILEDIALOG
ffmpeg再学习 -- FFmpeg+SDL+MFC实现图形界面视频播放器

修改效果如下:

ffmpeg再学习 -- FFmpeg+SDL+MFC实现图形界面视频播放器

三、添加消息响应函数

双击 Button 控件,就可以给该控件添加消息响应函数。

ffmpeg再学习 -- FFmpeg+SDL+MFC实现图形界面视频播放器

或者在菜单栏的“项目->类向导”处,可以添加更多种类的消息响应函数。

ffmpeg再学习 -- FFmpeg+SDL+MFC实现图形界面视频播放器

查看资源视图窗口

视图->其他窗口->资源视图窗口ffmpeg再学习 -- FFmpeg+SDL+MFC实现图形界面视频播放器
ffmpeg再学习 -- FFmpeg+SDL+MFC实现图形界面视频播放器

MFC最简单的弹出消息框的函数是AfxMessageBo("HelloWorld");

双击 播放 按钮,写入最简单函数 ffmpeg再学习 -- FFmpeg+SDL+MFC实现图形界面视频播放器
调试出现错误,“AfxMessageBox”: 2 个重载中没有一个可以转换所有参数类型
1>------ 已启动生成: 项目: MFC, 配置: Debug Win32 ------1>MFCDlg.cpp
1>d:\zslfchenjuke\work2017\mfc\mfc\mfc\mfcdlg.cpp(161): error C2665: “AfxMessageBox”: 2 个重载中没有一个可以转换所有参数类型
1>c:\program files (x86)\microsoft visual studio\2017\enterprise\vc\tools\msvc\14.10.25017\atlmfc\include\afxwin.h(6544): note: 可能是“int AfxMessageBox(UINT,UINT,UINT)”
1>c:\program files (x86)\microsoft visual studio\2017\enterprise\vc\tools\msvc\14.10.25017\atlmfc\include\afxwin.h(6542): note: 或 “int AfxMessageBox(LPCTSTR,UINT,UINT)”
1>d:\zslfchenjuke\work2017\mfc\mfc\mfc\mfcdlg.cpp(161): note: 尝试匹配参数列表“(const char [12])”时
1>已完成生成项目“MFC.vcxproj”的操作 - 失败。
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
解决方法:
参看:“AfxMessageBox”: 2 个重载中没有一个可以转换所有参数类型 将其改为 AfxMessageBox(_T("Hello world"));

点击“播放”按钮,效果如下: ffmpeg再学习 -- FFmpeg+SDL+MFC实现图形界面视频播放器

四、FFmpeg解码器与MFC的整合

拷贝 SDL 开发文件


头文件( *.h)拷贝至项目文件夹的include子文件夹下
导入库文件( *.lib)拷贝至项目文件夹的lib子文件夹下 (不再配置 SDL2main.lib)
动态库文件( *.dll) 拷贝至项目文件夹下

点击右键,选择在资源管理器中打开文件夹,进入项目目录。(注意,如果手动进入注意文件夹位置,我就是没找好位置,试了半天最后才发现,将上面的这些文件拷贝到错误的文件夹下了)ffmpeg再学习 -- FFmpeg+SDL+MFC实现图形界面视频播放器
ffmpeg再学习 -- FFmpeg+SDL+MFC实现图形界面视频播放器

配置开发文件

打开属性面板
解决方案资源管理器->右键单击项目->属性
ffmpeg再学习 -- FFmpeg+SDL+MFC实现图形界面视频播放器

导入库配置

配置属性->链接器->常规->附加库目录,输入“ lib” (刚才拷贝库文件的目录)
ffmpeg再学习 -- FFmpeg+SDL+MFC实现图形界面视频播放器
配置属性->链接器->输入->附加依赖项,输入“ SDL2.lib;avcodec.lib;avformat.lib;avutil.lib;avdevice.lib;avfilter.lib;postproc.lib;swresample.lib;swscale.lib;”(导入库的文件名)  (注意不再配置 SDL2main.lib

测试

双击“文件”按钮,添加相关头文件和代码
extern "C"{#include "libavcodec/avcodec.h"  };
void CMFCDlg::OnBnClickedFiledialog(){// TODO: 在此添加控件通知处理程序代码CString str2;str2.Format(_T("%s"),avcodec_configuration());AfxMessageBox((str2));}
调试结果如下,有信息但是乱码。说明配置是没问题的。但是上面的程序可能是有问题的。
具体不清楚了,稍后再研究。ffmpeg再学习 -- FFmpeg+SDL+MFC实现图形界面视频播放器