📄 subject_50470.htm
字号:
<p>
序号:50470 发表者:vivid 发表日期:2003-08-21 12:54:26
<br>主题:帮忙看看这段程序,thx
<br>内容:我再网上copy了这样一段程序,然后新建了一个win32 console application的工程,但是运行以后得到的结果不是播放视频文件,而是出来一个黑屏:press any key to continue.这是怎么回事啊?<BR>#include <dshow.h><BR><BR>#pragma comment(lib,"Strmiids.lib")<BR>#pragma comment(lib,"Quartz.lib")<BR><BR>void main(void)<BR>{<BR>IGraphBuilder *pGraph;<BR>IMediaControl *pMediaControl;<BR>IMediaEvent *pEvent;<BR>CoInitialize(NULL);<BR><BR>// 创建过滤通道管理器,并引出其接口<BR>CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, <BR>IID_IGraphBuilder, (void **)&pGraph);<BR>pGraph->QueryInterface(IID_IMediaControl, (void **)&pMediaControl);<BR>pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);<BR><BR>// 为指定文件建立通道<BR>// 注意:此处的文件名字符串依照自己要播放的文件而定<BR>// 注意:L"字符串"是一个把ANSI字符串转换为UNICODE字符串的宏<BR>pGraph->RenderFile(L"C:\\Example.avi", NULL);<BR><BR>// 运行此通道<BR>pMediaControl->Run();<BR><BR>// 等待播放完毕或停止 <BR>long evCode;<BR>pEvent->WaitForCompletion(INFINITE, &evCode);<BR><BR>// 释放所有接口<BR>pMediaControl->Release();<BR>pEvent->Release();<BR>pGraph->Release();<BR>CoUninitialize();<BR>}<BR><BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:绍辉 回复日期:2003-08-27 21:47:46
<br>内容:CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, <BR>IID_IGraphBuilder, (void **)&pGraph);<BR>该语句有误,IID_IGraphBuilder应该是IID_IFilterGraph,且pGraph的类型应该为<BR>IFilterGraph。<BR>然后通过pGraph->QueryInterface(IID_IGraphBuilder, (void **)&pBuilder);得到<BR>IGraphBuilder类型的pBuilder,最后调用 pBuilder->RenderFile(L"C:\\Example.avi", NULL);<BR> <BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:微笑的撒旦 回复日期:2003-08-27 23:28:35
<br>内容:源程序是这样的<BR>#include <dshow.h><BR>void main(void)<BR>{<BR> IGraphBuilder *pGraph = NULL;<BR> IMediaControl *pControl = NULL;<BR> IMediaEvent *pEvent = NULL;<BR><BR> // Initialize the COM library.<BR> HRESULT hr = CoInitialize(NULL);<BR> if (FAILED(hr))<BR> {<BR> printf("ERROR - Could not initialize COM library");<BR> return;<BR> }<BR><BR> // Create the filter graph manager and query for interfaces.<BR> hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, <BR> IID_IGraphBuilder, (void **)&pGraph);<BR> if (FAILED(hr))<BR> {<BR> printf("ERROR - Could not create the Filter Graph Manager.");<BR> return;<BR> }<BR><BR> hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);<BR> hr = pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);<BR><BR> // Build the graph. IMPORTANT: Change this string to a file on your system.<BR> hr = pGraph->RenderFile(L"C:\\Example.avi", NULL);<BR> if (SUCCEEDED(hr))<BR> {<BR> // Run the graph.<BR> hr = pControl->Run();<BR> if (SUCCEEDED(hr))<BR> {<BR> // Wait for completion.<BR> long evCode;<BR> pEvent->WaitForCompletion(INFINITE, &evCode);<BR><BR> // Note: Do not use INFINITE in a real application, because it<BR> // can block indefinitely.<BR> }<BR> }<BR> pControl->Release();<BR> pEvent->Release();<BR> pGraph->Release();<BR> CoUninitialize();<BR>}<BR><BR>这是Directx Show的SDK文档上的例子,在DirectShow->Getting Started->How to play a file。在学习之前先看文档啊,会了解得跟全面。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:vivid 回复日期:2003-08-28 09:37:20
<br>内容:一楼的shaohui 朋友,我按照你说的修改了原来的程序,但是不能运行,说应用程序错误,不知道怎么回事:(
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:绍辉 回复日期:2003-08-28 12:28:52
<br>内容:我刚才试了一下,其实你开始的程序是正确的,我更改的也是正确的,都可以播放。是不是在你的C盘下没有文件Example.avi,所以不能播放?如果是这样的话在RenderFile中指定一个存在的媒体文件。<BR><BR>我更改的如下:<BR>void main(void)<BR>{<BR> IFilterGraph *pGraph;<BR> IGraphBuilder *pBuilder;<BR> IMediaControl *pMediaControl;<BR> IMediaEvent *pEvent;<BR> CoInitialize(NULL);<BR> <BR> // 创建过滤通道管理器,并引出其接口<BR> CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, <BR> IID_IFilterGraph, (void **)&pGraph);<BR><BR> pGraph->QueryInterface(IID_IGraphBuilder, (void **)&pBuilder);<BR><BR><BR> pGraph->QueryInterface(IID_IMediaControl, (void **)&pMediaControl);<BR> pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);<BR> <BR> // 为指定文件建立通道<BR> // 注意:此处的文件名字符串依照自己要播放的文件而定<BR> // 注意:L"字符串"是一个把ANSI字符串转换为UNICODE字符串的宏<BR> pBuilder->RenderFile(L"F:\\Out2.dat", NULL);<BR> <BR> // 运行此通道<BR> pMediaControl->Run();<BR> <BR> // 等待播放完毕或停止 <BR> long evCode;<BR> pEvent->WaitForCompletion(INFINITE, &evCode);<BR> <BR> // 释放所有接口<BR> pMediaControl->Release();<BR> pEvent->Release();<BR> pGraph->Release();<BR> CoUninitialize();<BR>}<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -