跪求一份在WinCE上用DirectShow制作的视频播放器的源码,只要能播放,有图像有声音就可以了,使用EVC或是Visual 2005等做的都可以,希望懂的大虾发发善心,小弟在此先谢过了!!!!
忘了留下我的邮箱,现在补上。
我的邮箱:lailzhihou@126.com
只要几句代码就可以用directshow写个播放器了...我贴出来不知道会不会有分,哈哈
只要几句代码就可以用directshow写个播放器了...我贴出来不知道会不会有分,哈哈,明天来贴吧,现在懒的重写
wince的public目录下面已经提供了这样的源代码。
去看看norains在eeworld上的Blog,有一个完整的DD播放类
- CComPtr pGraphBuilder;
- CString m_strFileName;
- CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
- _T("媒体文件 (*.wmv)|*.wmv|(*.avi)|*.avi|(*.mp4)|*.mp4||"));
- if(dlg.DoModal()==IDOK)
- {
- m_strFileName=dlg.GetPathName();
- }
- CoInitialize(NULL);
- if(!pGraphBuilder)
- pGraphBuilder.CoCreateInstance(CLSID_FilterGraph);
- if(m_strFileName == _T(""))
- return;
- else
- {
- HRESULT hr = pGraphBuilder->RenderFile(m_strFileName.GetBuffer(),NULL);
- if(FAILED(hr))
- MessageBox(_T("失败"));
- CComPtr pMW;
- pGraphBuilder.QueryInterface(&pMW);
- pMW->put_Owner((OAHWND)this->GetSafeHwnd()); //播放器父窗口句柄
- pMW->put_WindowState(SW_SHOW);
- CComPtr pMC;
- pGraphBuilder.QueryInterface(&pMC);
- pMC->Run();
- }
停止播放和释放资源
- CComPtr pMC;
- pGraphBuilder.QueryInterface(&pMC);
- pMC->Stop();
- CComPtr pMW;
- pGraphBuilder.QueryInterface(&pMW);
- pMW->put_Owner(NULL);
- pMW->put_WindowState(SW_HIDE);
- CoUninitialize();
CComPtr pGraphBuilder;是全局变量
这个应该只是能播放,有声音,有图像,其他的lz去看norains大大的博客吧,我也去学习下
很感谢大家的帮助,我去看了norains的博客,用他的CMedia类来做,但是有个问题,就是在RenderFile的时候不能返回NOERROR,我打开wmv的文件的时候返回的hr是262722,这个时侯让程序继续下去,这时候可以听到声音,但没有图像。如果打开avi的文件的时候返回的hr是-2147220945,有谁知道是怎么回事吗?是不是因为这样的原因才没有图像出来??
是不是没有解码器,你用系统自带的media player播放试下看能不能播
感谢Reallyu,确实是 没有解码器的原因,现在的问题是,为什么播放的时候,画面不卡,声音会卡????不知道你们有没有这种现象??是不是的OS的问题????
引用: 引用 10 楼 lailzhihou 的回复:
感谢Reallyu,确实是 没有解码器的原因,现在的问题是,为什么播放的时候,画面不卡,声音会卡????不知道你们有没有这种现象??是不是的OS的问题????
一般都是画面卡,而声音不卡,说明LZ的板子处理速度不够。但LZ遇到的正好是反的,就也有可能是解码不对,具体原因需要具体分析。
声音卡有可能是声卡驱动的问题,你试试放mp3,声音卡不卡