FFmpeg+SDL视频播放器—图形界面版学习笔记

1、目录


2、MFC知识

(1)


Edit Control 用于输入文件路径,Static Text用于做标记。控件用于显示视频画面的

Picture Control。

下面的AfxMessageBox函数像C语言的printf


(2)在mfc里面,一个对话框对应的是C++里面的一个类,我们在创建工程的时候,有两个类,一个是工程名类,一个是工程名+Dlg类,这里Dlg是对话框的意思,吗,类是工程名类加载工程名+Dlg类。我们的工程名是testplayermfc


3、演示

(1)双击点播放按钮,自动在源代码添加函数,在mfc里面,一个对话框对应的是C++里面的一个类。我们在创工程的时候,有两个类。后面的OnBnClickedPlay()函数,BnClicked代表按钮点击的消息相应,Play是ID的名字


3、这里的CAboutDlg是弹出对话框对应的类

(1)

(2)

“关于”按钮弹出的对话框,这里DoModal函数表示这个对话框是模式对话框(这个对话框弹出来后其他地方都不能点,等这个对话框操作完后点确定或取消才能选其他的操作,如果是非模式的对话框)


4、内容补充

(1)在mfc中加入一个按钮,但是我不想要它啦!但是我又双击过它啦(加了一个消息响应函数),mfc框架会自动加一些宏定义!现在按钮是多余的,不能直接右键点删除会出现错误。应该如何删除

(2)在项目->类向导(真正加消息响应函数加的地方)

主要用到成员变量和命令,命令选项卡左边是命令的ID(控件),右边是对用的消息响应(相当于SDL的事件)。


(3)输入框

里面的内容(文件路径)如何传递给系统(变成内部的字符串),用到项目->类向导里面的成员变量(把控件和mfc定义的变量绑定一下)),绑定类的作用:通过类来获取框中的内容。

(4)点击文件按钮,想单机文件按钮,就把框中的内容显示出来


(5)这里m_url是对应编辑框的变量,mfc里面可以用Cstring来取代char,先获取文件路径,然后显示文件路径,windows的mfc函数封装了windows的API(大概200来个)


5、把工程并到MFC

(1)把原工程的include下的文件,lib文件夹下的.lib文件和.dll文件拷贝到mfc工程里(注意:不需要拷SDL2main.lib,这个只有用控制台想弹出windows的窗口才会用SDL2main.lib,去掉或者拷贝后不配置


(2)配置属性

参考http://blog.csdn.net/qingkongyeyue/article/details/52985494把相应的文件配置进去,然后右击项目,选择“生成”,最后启动运行。

(3)mfc项目中有潜在的ffmpeg功能,但是还没有调用。

在mfc工程中,加入ffmpeg文件


然后点击文件按钮填充函数


把视频转码和播放的代码加到mfc工程中,加在靠前的位置。main函数要修改成其他函数(因为mfc工程中已经存在main函数),把视频播放的函数加到按键处理函数中,出现错误,因为播放线程必须在一个新线程里进行播放,不能直接在按钮里调播放函数。所有需要在代码里面创建一个专门用于播放的线程。

(4)mfc里面有一个创建线程的函数AfxBeginThread,这个函数里面的第一个参数是要创建函数的线程(调用的函数),第二个参数this是线程函数的指针,this就是指向调用的类。



函数格式如下:

LPVOID  lpParam这个参数在创建线程函数AfxBeginThread里面的this,this指向CSFFPlayerDlg,使用这个参数是因为我们这个线程里必须读取到我们对话框中文件路径显示框中视频文件的地址,所以必须传递给它一个指针,这样指针就指向里面的数据啦


(5)我们现在播的文件还是写死在代码里的文件,所以要把视频文件路径传递给里面的参数。另外把弹出的框弄到我们mfc创建的对话框里面。

(6)把视频文件路径传递给里面的参数

LPVOID lpParam参数来源于CSFFPlayerDlg类,强制转换其类型,用它可以指向之前声明的变量,这里GetWindowTextA 函数是windows32中的API,第一个参数是对应编辑框的变量(从这个变量里获得text),存到filepath里面,把框中文件数据读取到filepath里,


(7)把弹出的框弄到我们mfc创建的对话框里面

只有一个参数,到底要把图像显示到那个控件上面,dlg是主对话框,函数getdlgitem得到主窗口中任意一个控件,字符IDC_SCREEN是其中一个控件的ID,


修改对话框中方框的ID为IDC_SCREEN

函数SDL_CreteWindowFrom接收的是句柄(控件的标识),通过函数GetSafeHwnd来获得句柄。就可以把窗口移到控件里。

6、SDL本身有一个bug(在windows底下),如果播了一个视频,再播第二个就播不了了。解决这个问题的方法。

(1) 第一个视频播完后,会调用当前控件的ShowWindows方法,会隐藏播放窗口。导致我们找不着这个窗口。

SDL_Quit()后,再调用mfc里面的方法,调用showwindow把窗口显示出来


7、界面封面

(1)可以有不同的类型,要保存成bitmap格式,VC只识别bitmap文件.


(2)加进工程里面(保存在res目录下面),在资源里面,点右键添加资源——导入——res--刚才的图片(在bitmap文件夹里),这张图也有一个ID(查看属性),


8、加菜单栏

(1)在资源里面点击右键--添加资源--选“menu‘’--进行编辑

如何把加入的菜单栏和我们的对话框关联起来,在杂项中选menu,重新运行时会出现我们的menu.


(2)让menu的功能跟我们的VC功能关联起来

menu中每个选项有一个ID,把ID号输成之前按钮的ID号就可以啦。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值