在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免费播放音视频的主要内容,如果未能解决你的问题,请参考以下文章