在VC++2010中使用Direct3D9和FMOD免费播放音视频

Posted

技术标签:

【中文标题】在VC++2010中使用Direct3D9和FMOD免费播放音视频【英文标题】:Free audio and video playback using Direct3D9 and FMOD in VC++2010 【发布时间】:2014-04-12 11:12:02 【问题描述】:

我想在我的免费游戏中使用 Direct3D9 纹理实现过场动画播放,并同步播放声音。

我正在使用面向 Windows XP 或更高版本的 Visual C++ 2010 Express、DirectX9、FMOD。

我基本上没有视频或音频方面的经验。

我尝试了 DirectShow,但无法编译它,而且 Bink 超出了我的预算。

【问题讨论】:

【参考方案1】:

你可以转换这个:http://nehe.gamedev.net/tutorial/playing_avi_files_in_opengl/23001/

也许使用 FMOD 将声音播放为 MP3。

【讨论】:

【参考方案2】:

使用直接显示,您应该能够播放视频并播放音频。如果没有,那么您可以对视频使用直接显示,然后对声音使用 FMOD。以编程方式,您必须创建声音以及要播放的视频,然后设置一个触发器,使音频在视频播放状态下播放,然后在视频状态退出时结束。对于直接展示,您需要这些来创建您的 comobjects //////////////////////////////////////////////////////////////////////// // DirectShow COM Object Creation //////////////////////////////////////////////////////////////////////// IGraphBuilder *videoGraph; IMediaControl *videoControl; IMediaEvent *videoEvent; IVideoWindow *videoWindow; //HRESULT *isVideoDone; long evCode; LONG_PTR eventParam1, eventParam2; HWND hwnd;

然后在你的 cpp 文件中用这样的方法启动它:

void InitVideo(LPCWSTR vidName)

CoInitialize(NULL);

CoCreateInstance( CLSID_FilterGraph, NULL,
    CLSCTX_INPROC_SERVER, IID_IGraphBuilder,
    (void**)&videoGraph);

videoGraph->QueryInterface(IID_IMediaControl,
    (void**)&videoControl);

videoGraph->QueryInterface(IID_IMediaEvent,
    (void**)&videoEvent);

// building a filter graph for our video
videoGraph->RenderFile(vidName, NULL);

//video window
videoControl->QueryInterface(IID_IVideoWindow,
    (void**)&videoWindow);

// setup the window
videoWindow->put_Owner((OAHWND)hwnd);

// Set the style
videoWindow->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE);

// Obtain the size of the window
RECT WinRect;
GetClientRect(hwnd, &WinRect);
//GetWindowRect(hwnd, &WinRect);

// Set the video size to the size of the window

videoWindow->SetWindowPosition(WinRect.left, WinRect.top, 
    WinRect.right, WinRect.bottom);

videoWindow->put_Visible(OATRUE);

【讨论】:

以上是关于在VC++2010中使用Direct3D9和FMOD免费播放音视频的主要内容,如果未能解决你的问题,请参考以下文章

在VS2010的VC++中如何编译、链接、运行、调试程序

使用 vc2010 和 msbuild 的多个构建规则

由VC2010与VC2017数据结构差异造成的程序错误

转载深入理解Direct3D9

win7系统装了vc6.0和vs2010,为啥无法安装番茄助手在vs2010中

在 VS2010 中,VC++ 错误 LNK 2019 with CoolProp 5.0.0