北京时间 23点18分 2018年12月19日
因为我之前是完成了一次,现在重新来写一遍,所以更新会比较慢。
整理好步骤如下:
1、新建一个MFC项目,基于对话框
基于对话框,下一步,下一步,完成。
创建完成。
2、先初步修改界面。
因为这一章是配置,所以我只添加了播放的PICTURE控件、播放按钮、状态条控件。后面的界面会在后面持续更新。
注意:在创建控件后,我们应该为控件的ID进行修改,否则控件多了ID容易乱,这是一个必须养成的习惯。
3、运行一下
当然这只是空壳,点击了也没有反应哈哈哈。
4、配置vlc的库
我整理后的文件如下,下载地址
将vlc文件夹拷贝到工程目录下。
将vlc文件夹里面的两个dll文件拷贝到Debug文件下。
在你的代码解决方案上右键-属性-vc++目录-包含目录和库目录修改如下:
开始执行测试代码:
我是在网上看到Alberl大神的整理的vlc函数,于是我也照着他的整理。
//参考Alberl大神的整理
class CAVPlayer
{
public:
CAVPlayer(void);
~CAVPlayer(void);
bool Play(const std::string &strPath); // 播放路径为strPath的文件
void Play (); // 播放
void Pause(); // 暂停
void Stop (); // 停止
void Volume(int nVol); // 音量设置为nVol
void VolumeIncrease(); // 音量增大
void VolumeReduce(); // 音量减小
void SeekTo(int nPos); // 跳到指定位置nPos
void SeekForward(); // 快进
void SeekBackward(); // 快退
void SetHWND(HWND hwnd); // 设置视频显示的窗口句柄
HWND GetHWND(); // 获取视频显示的窗口句柄
void SetCallback(pfnPosChanged pfn); // 设置文件位置改变时的回调函数
pfnPosChanged GetCallback(); // 获取文件位置改变时的回调函数
BOOL IsOpen(); // 文件是否打开
BOOL IsPlaying(); // 文件是否正在播放
int GetPos(); // 获取文件当前播放的位置
void SetPos(int Pos); // 设置文件播放位置
__int64 GetTime(); // 获取时间
__int64 GetLength();
private:
libvlc_instance_t *m_pVLC_Inst; // VLC实例
libvlc_media_player_t *m_pVLC_Player; // VLC播放器
HWND m_hWnd; // 视频显示的窗口句柄
pfnPosChanged m_pfn; // 文件位置改变时的回调函数
void Init(); // 初始化
void Release(); // 清理内存
};
我们先把整理完的AVPlayer.h和AVPlayer.cpp放到目录下
然后再添加到解决方案中
测试开始:
先把picture控件的type改为rectangle
在头文件添加定义
在.cpp文件添加以下代码
#define WM_USER_POS_CHANGED WM_USER + 1
void CallbackPosChanged(void *data, int iPos)
{
CAVPlayer *pAVPlayer = (CAVPlayer *)data;
if (pAVPlayer)
{
HWND hWnd = pAVPlayer->GetHWND();
if (::IsWindow(hWnd) && ::IsWindow(::GetParent(hWnd)))
{
::PostMessage(::GetParent(hWnd), WM_USER_POS_CHANGED, (WPARAM)data, iPos);
}
}
}
注意这个回调函数要放在对话框初始化函数前面,因为在初始化函数里面有调用
在onInitDialog里面添加 设置播放的句柄
m_cAVPlayer.SetHWND(GetDlgItem(IDC_PLAY)->GetSafeHwnd()); // 设置播放器的窗口句柄
m_cAVPlayer.SetCallback(CallbackPosChanged);
接下来就是按钮函数的添加
注意:按钮函数的名称要规范,不然后面容易混
m_cAVPlayer.Play("D:\\a.mkv");
好了,测试代码写完了,运行,看一看效果。
注意:在运行时还需要把dll和plugins文件拷贝到debug的文件夹下!!!!!
行了,运行完成!
代码已经上传,你们可以看一下。下载地址
注意:1、本人是萌新,大佬们可以直接跳过阅读我的文章,写这个目的就是为了赚点分数以后可以用,当然也是想和其他萌新一起学习。
2、我会尽力快点更新,如果有什么问题大家可以在底下评论,我看到便会回复的
3、每一期我都会尽量放上源代码,希望能帮到大家的学习。