DirectShow 播放H264视频记录(1)
2010-03-17 08:49
459 查看
俺是初学者,各位高手如果看了,不要见笑,其实俺写这个也就是为了记录一下。
项目需要用到视频监控,以前做了个XNA的版本,但是XNA对网卡以及操作系统都是要求,领导要求没办法,一个字“改”,那就改!参考了一下,决定用DirectShow。以前我没有做过,公司里也没有做过,只能是赶鸭子上架了,杯具阿!
开始看教程,看了半天,还是有点云里雾里的,算了,还是直接找demo模仿了,然后就开始看自带的Demo,看了几个Ticker、Blender、Async、Ball,我觉得这几个例子倒是不错(所有的例子肯定都是很好的),反正对我这个初学者还是挺有作用,至少对Filter这个概念理解的更深了,当然了,这期间也要不间断看看老陆的资料(还是比较经典)。Ticker说了如何加载Render Filter(VMR),Ball说了如何加载Source Filter,Async说了如何写自己的Filter。然后就开始进行时了:
1.写了自己对一个Filter,读取文件,解析h264编码,因为以前用做过一版本,还是比较顺利,但是在其中重装过一次系统,xp->win2003server,然后杯具又一次上演:开发环境搞不定了,NND,搞了一整天。顺利完成,在Graph Edit上测试完成,但是就是闪烁,怀疑是解码的问题,暂时没有理会
2.不知不觉杯具再次上演,我的Graph Edit打不开,找了半天资料也没有找到原因,一想算了直接写一个Demo调用吧,然后就开始写demo,很顺利,哈哈
3.然后需要自己封装一个Dll需要C#调用,写好了,老是不能播放,我的神了,真无语了!然后就开始排错
hr = pWC->GetNativeVideoSize(&lWidth, &lHeight, 0, 0);
这个地方的问题,返回的Width和Height,然后找原因,其实当时脑子有点懵,胡找。终于在MSDN上找到这么一句:
IVMRWindowlessControl::GetNativeVideoSize Method
Remarks
If the VMR is not connected to an upstream filter, this method will
succeed but all parameters will be set to zero.
地址http://msdn.microsoft.com/en-us/library/dd390559%28VS.85%29.aspx
没有反应过来,哈哈,然后接着找
hr = pGB->Render(pStreamFilter->GetPin(0));
返回值为0x8004025f(VFW_E_NOT_IN_GRAPH) The filter to which this pin belongs is not in the filter
graph.
奥,原来Filter没有加到Filter Graph Manage里面,我的天,撞墙的心都有了
项目需要用到视频监控,以前做了个XNA的版本,但是XNA对网卡以及操作系统都是要求,领导要求没办法,一个字“改”,那就改!参考了一下,决定用DirectShow。以前我没有做过,公司里也没有做过,只能是赶鸭子上架了,杯具阿!
开始看教程,看了半天,还是有点云里雾里的,算了,还是直接找demo模仿了,然后就开始看自带的Demo,看了几个Ticker、Blender、Async、Ball,我觉得这几个例子倒是不错(所有的例子肯定都是很好的),反正对我这个初学者还是挺有作用,至少对Filter这个概念理解的更深了,当然了,这期间也要不间断看看老陆的资料(还是比较经典)。Ticker说了如何加载Render Filter(VMR),Ball说了如何加载Source Filter,Async说了如何写自己的Filter。然后就开始进行时了:
1.写了自己对一个Filter,读取文件,解析h264编码,因为以前用做过一版本,还是比较顺利,但是在其中重装过一次系统,xp->win2003server,然后杯具又一次上演:开发环境搞不定了,NND,搞了一整天。顺利完成,在Graph Edit上测试完成,但是就是闪烁,怀疑是解码的问题,暂时没有理会
2.不知不觉杯具再次上演,我的Graph Edit打不开,找了半天资料也没有找到原因,一想算了直接写一个Demo调用吧,然后就开始写demo,很顺利,哈哈
3.然后需要自己封装一个Dll需要C#调用,写好了,老是不能播放,我的神了,真无语了!然后就开始排错
hr = pWC->GetNativeVideoSize(&lWidth, &lHeight, 0, 0);
这个地方的问题,返回的Width和Height,然后找原因,其实当时脑子有点懵,胡找。终于在MSDN上找到这么一句:
IVMRWindowlessControl::GetNativeVideoSize Method
Remarks
If the VMR is not connected to an upstream filter, this method willsucceed but all parameters will be set to zero.
地址http://msdn.microsoft.com/en-us/library/dd390559%28VS.85%29.aspx
没有反应过来,哈哈,然后接着找
hr = pGB->Render(pStreamFilter->GetPin(0));
返回值为0x8004025f(VFW_E_NOT_IN_GRAPH) The filter to which this pin belongs is not in the filter
graph.
奥,原来Filter没有加到Filter Graph Manage里面,我的天,撞墙的心都有了
相关文章推荐
- C#使用DirectShow播放视频文件
- 【多媒体】Android使用MediaCodec硬解码播放H264格式视频文件
- Windows Mobile 下使用DirectShow播放视频文件
- C# DirectShow 操作视频播放功能
- QT+ffmpeg 简单视频播放代码及问题记录
- Android ViewPager中显示图片与播放视频的填坑记录
- 成功在MP4封装的H264视频中提取能播放的裸流
- 利用DirectShow实现对视频文件H264编码与解码基类 3
- Directshow+WMF(Windows Media Format)实现无缝播放视频
- 解决H5播放视频黑屏只有声音没有图像的问题,Java调用ffmpeg转码成h264的mp4格式
- 利用DirectShow实现对视频文件H264编码与解码基类 3
- DirectShow之接口实战篇--视频抓图与播放控制
- Media Player 嵌套网页中播放上传视频记录
- wince下用DirectShow播放音频和视频
- HTML5学习记录一:播放视频,音频和拖放
- Android利用mediacodec进行视频H264编码解码播放
- 记录:网页播放视频
- EasyRTMP视频直播推送H264 sps解析错误导致播放画面拉伸问题解决
- 在VC中调用DirectShow全屏播放视频
- 记录一下HTC vive播放2d视频或全景视频