有关wm asf reader这个filter的有关问题
发布时间:2011-06-27 19:28:45 文章来源:www.iduyao.cn 采编人员:星星草
有关wm asf reader这个filter的问题
老师您好:
我想请教您一个问题,我在graph manager程序中加入WMAsfReader读入本地的一个asf文件,通过加入的解码filter解码后用Video Render这个filter播放出来,我现在想实现的功能是是播放速率变为原来正常速率的n倍,请问老师该怎么实现,应该用那些接口函数,而且我查了msdn WM Asf Reader这个filter本身也支持一些接口,但是我在程序中也试了一些比如SetRate()函数,但是只要参数不是1.0就会出错,请问老师这是为什么?
那asf文件使用那些接口函数才能实现播放速率的改变?
我的graph manager中的connect函数如下:
bool DSCompressEngine::Connect()//PVIDEO_FORMAT pVideoFormat)//, PWAVEFORMATEX pWfx)
{
HRESULT hr;
hr=CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC, IID_IFilterGraph, (void**)&m_pifg);
if (FAILED(hr))
return false;
//加入WM Asf Reader这个filter
hr = CoCreateInstance(CLSID_WMAsfReader, NULL, CLSCTX_INPROC_SERVER,
IID_IBaseFilter, reinterpret_cast<void**>(&m_pibfSourceStream));
if( FAILED( hr ) )
{
HELPER_RELEASE(m_pibfSourceStream);
//m_pibfSourceStream->release();
//m_pibfSourceStream=NULL;
return false;
}
else
{
hr = m_pifg->AddFilter(m_pibfSourceStream, L"ASF Reader");
if( FAILED( hr ) )
{
return false;
}
hr=m_pibfSourceStream->QueryInterface(IID_IFileSourceFilter, (void **) &mIFileSource);
mSourceFile="D:\\生成packet\\01.asf";
//mSourceFile="D:\\生成packet\\3879202.wmv";
BSTR pSource = mSourceFile.AllocSysString();
hr = mIFileSource->Load(pSource, NULL);
}
//加入AVI Decompressor 这个filter
hr = CoCreateInstance(CLSID_AVIDec, NULL, CLSCTX_INPROC_SERVER,
IID_IBaseFilter, reinterpret_cast<void**>(&m_pibfTransformCompress));
if( FAILED( hr ) )
{
HELPER_RELEASE(m_pibfSourceStream);
HELPER_RELEASE(m_pibfTransformCompress);
return false;
}
else
{
hr = m_pifg->AddFilter(m_pibfTransformCompress, L"TransformCompress");
if( FAILED( hr ) )
{
return false;
}
}
//加入Video Render这个filter
hr = CoCreateInstance(CLSID_VideoRendererDefault, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, reinterpret_cast<void**>(&m_pibfOutputMediaServer));
if( FAILED( hr ) )
{
HELPER_RELEASE(m_pibfSourceStream);
HELPER_RELEASE(m_pibfTransformCompress);
HELPER_RELEASE(m_pibfOutputMediaServer);
return false;
}
else
{
hr = m_pifg->AddFilter(m_pibfOutputMediaServer, L"Output");
if( FAILED( hr ) )
{
return false;
}
}
hr=m_pifg->Connect(GetOutPin(m_pibfSourceStream,1),GetInPin(m_pibfTransformCompress,0));
if (FAILED(hr))
return false;
hr=m_pifg->Connect(GetOutPin(m_pibfTransformCompress,0),GetInPin(m_pibfOutputMediaServer,0));
if (FAILED(hr))
return false;
hr=GetOutPin(m_pibfSourceStream,0)->QueryInterface(IID_IMediaSeeking,(void **) &ms);
hr=ms->SetRate(1.0);//函数的参数只要不是1,hr的返回值就会是负值
hr=m_pifg->QueryInterface(IID_IMediaPosition,(void **) &mp);
hr=mp->put_Rate(1.0);//函数的参数只要不是1,hr的返回值就会是负值
hr=m_pibfSourceStream->QueryInterface(IID_IAMExtendedSeeking,(void **) &ames);
hr=ames->get_PlaybackSpeed(&pSpeed);//&pSpeed的返回值是1.0
hr=ames->put_PlaybackSpeed(1.0);//参数的值也只能是1
//
hr = WMCreateReader(NULL, WMT_RIGHT_PLAYBACK, &mIReader);
if (FAILED(hr))
{
return FALSE;
}
streamNumber=0;
dwStreams = 0;
hr=mIReader->QueryInterface(IID_IWMReaderAdvanced,(void **)&wmra);
hr=m_pifg -> QueryInterface(IID_IMediaControl, (void **)&m_pimc);
if (FAILED(hr))
return false;
hr=m_pimc->Run();
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
DSHOW push
推模式,ConnectDirect 的,为什么我一直反回错误
下级级用的是HAALI的一个东西,用CMemStream拉模式的时候是可以连接的
...
-
ffmpeg编码后视频速度不正确,质量也不好,求助,求助,求助,求助啊
对采集到得摄像头图像进行编码保存,发现得到的视频质量不好,而且速度不...
-
请问怎么在live555中接收jpeg
请问,我现在想接收一个服务器发送的jpeg 不知道怎么用live555做一个客户端, 接收它并显示。
请问应...
-
XP SP3 YUV420 的fiter依赖 在线等答案……
链接时媒体类型为WMMEDIASUBTYPE_I420
有的XP可以播放出来
有的就不行,请问不能播放...
-
如何获取通过麦克风来获取当前说话的音量?
使用Wave系统API采集音频输入的数据,当数据缓存区满了后,收到消息取得数据后,如何根据这里...
-
RFC3984 有没有完整的中文版本呢?
搜了几个 都是一半英文一半中文的。哎 郁闷!
------解决方案--------------------
英文的凑合...
-
介绍一个学习directshow和com、atl技术的网站
有一个学习directshow和com、atl技术的网站,还可以下视频教程,共享给大家: http://www...
-
攻击帖:jrtplib、live555是个垃圾,刚开始搞流媒体就用这玩意就是找s
不解释~
来丢我砖头吧~~
我分太多了用不完~ 支持的散分~~~
...
-
50分,寻找《Visual C++音频/视频处理技术及工程实践》的随书光盘?
急于使用其中的几个例程。若哪位好心人能够提供,非常感谢!!我的QQ:52...
-
h264的高宽比怎么获取?
我看标准里面只有样点的高宽比啊。
还有,bit rate可以读出来吗?
------解决方案--------------------
是要...