快讯

在VC中调用DirectShow全屏播放视频

2004-02-14 09:34  出处:PConline  作者:Lythm/东日制作室  责任编辑:zwg 

接下来的一步将从文件中提取视频流。 不妨也建立一个方法将工作封装 HRESULT LoadFromFile(const char * szFileName, IMultiMediaStream **ppMMStream, IDirectDraw *pDD) { HRESULT r; IAMMultiMediaStream *pAMStream; if(FAILED(r=CoCreateInstance(CLSID_AMMultiMediaStream, NULL, CLSCTX_INPROC_SERVER, IID_IAMMultiMediaStream, (void **)&pAMStream))) return r; WCHAR wPath[MAX_PATH]; MultiByteToWideChar(CP_ACP, 0, szFileName, -1, wPath, sizeof(wPath)/sizeof(wPath[0])); if(FAILED(r=pAMStream->Initialize(STREAMTYPE_READ, AMMSF_NOGRAPHTHREAD, NULL))) return r; if(FAILED(r=pAMStream->AddMediaStream(pDD, &MSPID_PrimaryVideo, 0, NULL))) return r; if(FAILED(r=pAMStream->AddMediaStream(NULL, &MSPID_PrimaryAudio, AMMSF_ADDDEFAULTRENDERER, NULL))) return r; if(FAILED(r=pAMStream->OpenFile(wPath, 0))) return r; *ppMMStream = pAMStream; return S_OK; } 方法代码如上。 LoadFromFile()方法有3个参数: const char * szFileName, IMultiMediaStream **ppMMStream和IDirectDraw *pDD   第一个参数是要提取的文件名。字符串常量。第二个参数是多媒体流接口的指针的指针,是用来操纵多媒体流的。第三个参数是DirectDraw接口,将来播放时就是通过它的表面。   首先声明一个IAMMultiMediaStream接口的指针,该接口的功能十分强大,这里只用了它的一部分: 建立视频和音频流,再从文件中提取。 然后调用CoCreateInstance方法来创建IAMMultiMediaStream的实例。该方法的第一个参数指定了 全局标志(guid,下同),第四个参数指明要创建的接口的标志,第五个参数是创建好的实例返 回付给pAMStream变量。 接下来的两行代码是将char字符串转换成unicode,不必多言。 然后初始化IAMMultiMediaStream,建立视频音频流。 最后,也是最重要的一步:调用OpenFile()方法从文件中提取流。第一个参数是文件名,第二 个参数是打开方式(具体请参考msdn)。 这样就完成了流的提取工作。
键盘也能翻页,试试“← →”键
IT热词搜索 来源:360新闻
软件论坛帖子排行
相关文章

相关软件:

腾讯QQ2012
大小:52.93 MB 授权:免费
腾讯QQ2012
立即下载
腾讯QQ2013
大小:49.32 MB 授权:免费
腾讯QQ2013
立即下载