MFC|MediaPlayer基本功能使用

162 阅读4分钟

「这是我参与2022首次更文挑战的第26天,活动详情查看:2022首次更文挑战」。

首先介绍下,当前文章中的基本功能

1:播放、暂停、停止、快进、后退、指定播放速度

2:设置视频音量、是否静音?

3:播放模式:顺序播放、随机播放、单曲播放

使用MediaPlayer播放器用到的几个类

CWMPPlayer4		m_mediaPlayer;    //播放地址关联
CWMPControls		m_control;    //控制按钮关联  
CWMPMedia		m_media;    //媒体 
CWMPSettings		m_setting;    //设置按钮关联
CWMPPlaylist		m_playlist;

接下来这两句代码至关重要:对当前类进行关联,必不可少一步

m_control=m_mediaPlayer.get_controls();
m_setting = m_mediaPlayer.get_settings();

获取视频播放的控件信息以及视频播放器的设置信息,后续在进行控制播放以及页面风格时会用到。

直接启动程序默认的视频播放器,会发现默认的视频播放器中会有一个菜单栏,但是在属性中无法去除,效果如下图所示:

图片.png

几经查找资料才得以解决,如果有需要的友友们,可以记录下来,实在是太隐蔽了!

想要去除红边框中的内容,用以下代码实现

m_mediaPlayer.put_uiMode(L"None");

下面,我来介绍下对于MediaPlayer视频播放器中一些简单功能实现

1:播放单一视频

m_mediaPlayer.put_URL(m_strSelPlay);

使用当前函数时,唯一需要注意的是:一定要记住参数写视频的绝对路径,千万不可以写相对路径!!

2:暂停播放视频

m_control.pause();

在程序使用过程中,暂停当前视频后,想要再继续播放此视频时,就不能使用第一个步骤中的put_URL方法了,应该用下面这句:

m_control.play();

3:停止视频播放

m_control.stop();

4:快进后退视频

当前操作是快进整个视频,使用该功能后视频以快速方式进行播放,对应代码如下:

m_control.fastForward();

当前操作的是后退整个视频,对应代码如下:

m_control.fastReverse();

5:指定视频的播放速度

使用上面两个函数发现,无法指定视频自定义播放速度,这让人很难受,那就来看下面这个函数,它就可以完成你的功能。

double dRate = 1.3;
m_setting.put_rate(dRate);

6:音量设置

long voiceNum = 4;
//参数可以进行任意设置,大/小
m_setting.put_volume(voiceNum);

在这里,有一种特殊情况,叫做静音。

如果要将声音设置成静音状态时,就不能使用上面的API了,静音设置有它单独的API

//静音设置
m_setting.put_mute(true);
//非静音设置
m_setting.put_mute(false);

7:视频播放模式

有三种模式:顺序播放随机播放单曲循环播放

分别对应的设置,如下所示:

//顺序播放
m_setting.setMode(L"autoRewind",TRUE);
//单曲循环播放
m_setting.setMode(L"loop",TRUE);
//随机播放
m_setting.setMode(L"shuffle",TRUE);

其实,在使用这个API时,有个问题,当我使用对这三种播放方式交叉使用的时候,发现,使用单曲循环播放好像不生效。

请大家使用的时候需要注意这个问题。(目前这个问题已经被我解决了,我会在其他的文章中记录我的解决方案,敬请期待)

写到这里了,大家会发现CWMPPlaylist类还没有被使用。没错,在以上简单功能中,不需要用到这个类。只有在进行播放模式变化时才会用到。

当我们使用顺序播放时,不可能重复的使用put_URL这个函数进行播放。

需要将播放的视频文件存在到一个列表容器中,也就需要CWMPPlaylist类了。

首先,在使用之前,进行绑定。

也请大家注意,一定是使用之前进行绑定!!!

m_playlist = static_cast<CWMPPlaylist>(m_mediaPlayer.get_currentPlaylist());

对该类进行数据添加

CString strFile = L"F:\\text.mp4";
m_media = static_cast<CWMPMedia>(m_mediaPlayer.newMedia(strFile));
m_playlist.appendItem(m_media);

下一步,将你需要播放的数据存储在m_playlist之后,对齐进行数据绑定

m_mediaPlayer.put_currentPlaylist(m_playlist);

下一步进行播放

m_control.play();

一般,在进行顺序播放的时候都会设置,是否循环列表播放,可以做以下操作

m_setting.put_autoStart(TRUE);

好了,以上就是对基本功能的介绍了。我对我写的每一句代码负责,只有被我验证过的代码才会讲解给大家,希望会对大家有帮助。

如果有人想要下载关于MediaPlayer的控件类,可以打开以下链接,还是那句话,我对我上传的内容负责,如果有问题大家可以留言讨论~~

wmpScource

我是中国好公民st,一名C++开发程序猿~