快讯

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

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

下面开始播放。 这也是最复杂的工作(相对)。 同样,建个方法封装代码。 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(); } Play()方法有两个参数,一个是用来播放视频的DirectDraw表面,一个是含有数据流的 MultiMediaStream对象。 变量声明如下: IMediaStream *pPrimaryVidStream; IDirectDrawMediaStream *pDDStream; IDirectDrawStreamSample *pSample; RECT rect; DDSURFACEDESC ddsd; 他们分别是IMediaStream接口,用来查询IDirectDrawMediaStream接口;DirectDrawMediaStream 接口,用来得到流数据的细节,如长、宽等等;IDirectDrawStreamSample接口,这是一个数据样本,用来刷新DirectDraw表面,也就是播放了。   接下来的两个分别是:一个rect数据结构,用来指定播放区域;一个表面描述,这里用来得到样本数据的格式。
键盘也能翻页,试试“← →”键
IT热词搜索 来源:360新闻
软件论坛帖子排行
相关文章

相关软件:

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