最近想利用mciSendCommand函数播放avi格式的视频,但是遇到了一些问题。
在执行播放时,返回错误代码276,返回文本信息是设备驱动程序尚未准备就绪。 如下图:
查了一下百度,按照百度所说,system.ini中如果安装了驱动,mci段会有相应的设置,然而我的mci段什么都没有。
初步确定,需要mciavi.drv驱动,但是我下载了却不知道怎么安装,我是Win10 64位系统。
希望大神为我解答,我该如何解决这个问题。。或者推荐一些可以播放avi视频的库,可以实现从指定帧(时间)播放,也行,opencv除外。。
下面是我的代码:
void Video::test()
{
MCI_OPEN_PARMS OpenParms;
UINT wDeviceID;
DWORD opReturn;
wchar_t* error[256];
QString file = "test.avi";
QString deviceType = "avivideo";
LPCWSTR FileName = reinterpret_cast<const wchar_t *>(file.utf16());
LPCWSTR dt = reinterpret_cast<const wchar_t *>(deviceType.utf16());
OpenParms.lpstrDeviceType = dt;
OpenParms.lpstrElementName = FileName;
opReturn = mciSendCommand(NULL, MCI_OPEN, MCI_WAIT | MCI_OPEN_TYPE | MCI_OPEN_ELEMENT, (DWORD_PTR)&OpenParms);
if (opReturn == 0)
wDeviceID = OpenParms.wDeviceID;
else {
mciGetErrorString(opReturn, (LPWSTR)error, 256);
QString text = QString::fromStdWString((LPWSTR)error);
qDebug() << opReturn << " " << text;
wDeviceID = NULL;
return;
}
MCI_PLAY_PARMS PlayParms;
// 指定从什么地方(时间)播放
PlayParms.dwFrom = 0;
opReturn = mciSendCommand(wDeviceID, MCI_PLAY, MCI_TO, (DWORD_PTR)&PlayParms);
mciGetErrorString(opReturn, (LPWSTR)error, 256);
QString text = QString::fromStdWString((LPWSTR)error);
qDebug() << opReturn << " " << text;
}