WEB开发网
开发学院软件开发VC 在VC中调用DirectShow全屏播放视频 阅读

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

 2006-04-07 11:31:56 来源:WEB开发网   
核心提示: 方法代码如上,LoadFromFile()方法有3个参数:const char * szFileName, IMultiMediaStream **ppMMStream和IDirectDraw *pDD第一个参数是要提取的文件名,在VC中调用DirectShow全屏播放视频(3),字符串常

方法代码如上。

LoadFromFile()方法有3个参数:

const char * szFileName, IMultiMediaStream **ppMMStream和IDirectDraw *pDD

第一个参数是要提取的文件名。字符串常量。第二个参数是多媒体流接口的指针的指针,是用来操纵多媒体流的。第三个参数是DirectDraw接口,将来播放时就是通过它的表面。

首先声明一个IAMMultiMediaStream接口的指针,该接口的功能十分强大,这里只用了它的一部分:

建立视频和音频流,再从文件中提取。

然后调用CoCreateInstance方法来创建IAMMultiMediaStream的实例。该方法的第一个参数指定了全局标志(guid,下同),第四个参数指明要创建的接口的标志,第五个参数是创建好的实例返回付给pAMStream变量。

接下来的两行代码是将char字符串转换成unicode,不必多言。

然后初始化IAMMultiMediaStream,建立视频音频流。

最后,也是最重要的一步:调用OpenFile()方法从文件中提取流。第一个参数是文件名,第二个参数是打开方式(具体请参考msdn)。

这样就完成了流的提取工作。

下面开始播放。

这也是最复杂的工作(相对)。

同样,建个方法封装代码。

HRESULT Play(IDirectDrawSurface *pSurface, IMultiMediaStream *pMMStream)
{
IMediaStream *pPrimaryVidStream;
IDirectDrawMediaStream *pDDStream;
IDirectDrawStreamSample *pSample;
RECT rect;
DDSURFACEDESC ddsd;
pMMStream->GetMediaStream(MSPID_PrimaryVideo, &pPrimaryVidStream);
pPrimaryVidStream->QueryInterface(IID_IDirectDrawMediaStream, (void **)
&pDDStream);
ddsd.dwSize = sizeof(ddsd);
pDDStream->GetFormat(&ddsd, NULL, NULL, NULL);
rect.top =100;
rect.left =150;
rect.bottom = ddsd.dwHeight+100;
rect.right = ddsd.dwWidth+150;
pDDStream->CreateSample(pSurface, &rect, 0, &pSample);
pMMStream->SetState(STREAMSTATE_RUN);
while (pSample->Update(0, NULL, NULL, NULL) == S_OK)
;
pMMStream->SetState(STREAMSTATE_STOP);
pSample->Release();
pDDStream->Release();
pPrimaryVidStream->Release();
}

上一页  1 2 3 4  下一页

Tags:VC 调用 DirectShow

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接