dshow播放音频文件时,是否可以手动设置缓冲大小?怎么设置
发布时间:2011-06-27 19:17:46 文章来源:www.iduyao.cn 采编人员:星星草
dshow播放音频文件时,是否可以手动设置缓冲大小?如何设置?
我是这样做的,采用GraphBuilder的RenderFile()自动建立了一个链路后,我把Render Filter换成自定义的一个Filter,在这个Filter中重载了其输入Pin的三个函数
STDMETHODIMP GetAllocatorRequirements(ALLOCATOR_PROPERTIES*pProps)
{
pProps->cBuffers = 1;
// pProps->cbBuffer =MAXBUF;// 40*pwfx->nAvgBytesPerSec/1000;
// pProps->cbAlign=2;
return S_OK;
}
STDMETHODIMP GetAllocator(IMemAllocator **ppAllocator)
{
。。。。。
prop.cbAlign=1;
hr = m_pAllocator->SetProperties(&prop,&Actual);
。。。。
}
STDMETHODIMP NotifyAllocator(IMemAllocator * pAllocator,BOOL bReadOnly)
{
。。。
ALLOCATOR_PROPERTIES Actual;
hr=m_pAllocator->GetProperties(&prop);
if(prop.cbBuffer>MAXBUF)
return E_FAIL;
。。。
}
最开始想在函数中指定一个cbBuffer值,连接能成功,但是运行时传过来长度都不等于cbBuffer值。
后来想限制缓冲区不能大于MAXBUF,连接也能成功,但是音频的属性变了。请教职工用自动建立的链路中还有没有其它方式能手动设置缓冲大小?
------解决方案--------------------
我们可以通过Capture output pin上的IAMBufferNegotiation接口,改变音频捕捉缓冲的大小,以减少声音播放的延迟。默认情况下,Audio Capture Filter使用0.5秒钟的缓冲。对于一些特殊的应用,这么大的缓冲是没有必要的,带来的延迟也比较大。一般,缓冲设置成能够容纳80毫秒的数据已经很可靠;甚至30-40毫秒也已经足够了。但是也不能太小,否则会影响到音频捕捉的效率,使音质受到损害。下面的代码设置音频捕捉的缓冲大小,可供参考:
pCapturePin->QueryInterface(IID_IAMBufferNegotiation, (void **)&pNeg);
// Set the buffer size based on selected settings
ALLOCATOR_PROPERTIES prop={0};
prop.cbBuffer = lBufferSize;
prop.cBuffers = 6;
prop.cbAlign = nBytesPerSample * nChannels;
hr = pNeg->SuggestAllocatorProperties(&prop);
pNeg->Release();
====================
http://www.google.cn/search?hl=zh-CN&client=firefox-a&rls=org.mozilla%3Azh-CN%3Aofficial&hs=vcN&newwindow=1&q=dshow%E8%AE%BE%E7%BD%AE%E7%BC%93%E5%86%B2%E5%A4%A7%E5%B0%8F&btnG=Google+%E6%90%9C%E7%B4%A2&meta=&aq=f&oq=
随便搜的,不知道对你是否有用
------解决方案--------------------
要调用CbaseAllocator::commit进行实际内存分配
------解决方案--------------------
陆老师的audiocap代码有设置缓冲的例子
------解决方案--------------------
你的目的是什么?我不知道你这样做想做什么?
一般文件格式是确定的,也就决定了,多少时间播 放多少声音。
你改大缓冲区,我有点不理解。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
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可以读出来吗?
------解决方案--------------------
是要...