MFC 基于VLC的视频播放器(二)---配置VLC库

北京时间 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、我会尽力快点更新,如果有什么问题大家可以在底下评论,我看到便会回复的,我的个人邮箱[email protected]

3、每一期我都会尽量放上源代码,希望能帮到大家的学习。

猜你喜欢

转载自blog.csdn.net/Jonh_/article/details/85109925
今日推荐