ISampleGrabber接口能否用于音频抓取??

xmusmart 2006-05-01 11:39:27
我知道ISampleGrabber可以用于视频采集,但是不知道能不能用于音频,请教高手们啦,谢谢!
...全文
206 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
liming049 2006-05-06
  • 打赏
  • 举报
回复
可以在msn群:msn420@imqun.com得到答案的
xmusmart 2006-05-03
  • 打赏
  • 举报
回复
应该说数据怎么编码吧,应该用哪些函数?
xmusmart 2006-05-03
  • 打赏
  • 举报
回复
感谢你的回复,不胜感激!
请问一下,应用ISampleGrabber采集的数据该怎么压缩呢?
经过传送后,能否用waveoutwrite播放呢??
fenglianghuai 2006-05-02
  • 打赏
  • 举报
回复
可以。
1、先建类,例:
class CSampleGrabberCallback : public ISampleGrabberCB
{
public:

int nFrame;
CSampleGrabberCallback()
{
nFrame=0;
}
~CSampleGrabberCallback()
{
}
// Fake referance counting.
STDMETHODIMP_(ULONG) AddRef() { return 1; }
STDMETHODIMP_(ULONG) Release() { return 2; }

STDMETHODIMP QueryInterface(REFIID riid, void **ppvObject)
{
if (NULL == ppvObject) return E_POINTER;
if (riid == __uuidof(IUnknown))
{
*ppvObject = static_cast<IUnknown*>(this);
return S_OK;
}
if (riid == __uuidof(ISampleGrabberCB))
{
*ppvObject = static_cast<ISampleGrabberCB*>(this);
return S_OK;
}
return S_OK;
}

STDMETHODIMP SampleCB(double Time, IMediaSample *pSample)
{
if(bStop)return S_OK;
long Size=pSample->GetActualDataLength ();
BYTE * pBuf;
pSample->GetPointer(&pBuf);
return S_OK;
}

STDMETHODIMP BufferCB(double Time, BYTE *pBuffer, long BufferLen)
{
TRACE("BufferCB nFrame=%d\n",nFrame);
return S_OK;
}
};


2、然后设置回调
CSampleGrabberCallback g_CapCB;

CComQIPtr<ISampleGrabber>pGrabber;
CComQIPtr<IBaseFilter>pGrabberF;

JIF(AddFilterByCLSID(m_pGB, CLSID_SampleGrabber, L"Grabber", &pGrabberF));

pGrabberF->QueryInterface(IID_ISampleGrabber, (void**)&pGrabber);
AM_MEDIA_TYPE mt;
ZeroMemory(&mt, sizeof(AM_MEDIA_TYPE));
mt.majortype = MEDIATYPE_Audio;
mt.subtype = MEDIASUBTYPE_NULL;
mt.formattype = FORMAT_WaveFormatEx;
JIF( pGrabber->SetMediaType(&mt));
JIF(pGrabber->SetCallback(&g_CapCB, 0));

2,543

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧