在VC下,使用Windows media player控件播放媒体列表时,只有播放列表里的第一个媒体在调用get_durationString()方法获取媒体长度时的结果为00:00,网上都说获取这个长度的方法是异步的,得到的结果是不准确的,需要处理一个等待消息。
最后,我在添加媒体到播放列表时,随意调用媒体的一个get方法,结果在用get_durationString()获取媒体长度时就可以输出正确的结果了:
部分代码如下:
m_playlist.clear(); // 先清空播放列表
m_list2.ResetContent(); // 列表控件
// m_vecVideoList为存储播放列表的集合
for (int i =0;i<m_vecVideoList.size();i++)
{
CString mediaFileName; // 存储视频文件名称
mediaFileName = m_vecVideoList.at(i); // 指定索引的视频文件路径
// 添加播放列表到列表控件
m_list2.InsertString(i,mediaFileName);
// 创建一个媒体
CWMPMedia media = m_mPlayer.newMedia(mediaFileName);
// 调用获取属性的方法(随便调用,也可以是get_durationString)
media.get_name();
// 将媒体添加到播放列表
m_playlist.appendItem(media);
}
// 添加播放列表到当前Player控件
m_mPlayer.put_currentPlaylist(m_playlist);
// 获取控件的当前播放列表
CWMPPlaylist playlist = m_mPlayer.get_currentPlaylist();
for (int i=0;i<playlist.get_count();i++)
{
CWMPMedia media = playlist.get_Item(i);
// 输出,
SetMsg(media.get_name());
// 在这里就可以正常输出时长了。
SetMsg(media.get_durationString());
}