求教音视频采集时时间戳的问题

ayiyi0910 2011-09-28 05:26:12
求教音视频采集时怎么时间戳加到数据里

先说视频吧, 我自己继承了一个CTransformFilter, 然后通来Transform来获取每一桢的数据

HRESULT CCRotateFilter::Transform(IMediaSample *pSource, IMediaSample *pDest)
{
HRESULT hr = S_OK;
BYTE *pBufferIn, *pBufferOut;
hr = pSource-> GetPointer(&pBufferIn);
if (FAILED(hr))
{
return hr;
}

hr = pDest-> GetPointer(&pBufferOut);
if (FAILED(hr))
{
return hr;
}

k = m_lWidth * m_lHeight * 2
memcpy(pBufferOut, pBufferIn, k);

if (m_callback)
{
REFERENCE_TIME StartTime, StopTime;
pDest->GetTime( &StartTime, &StopTime);

HRESULT hr = m_callback(pBufferOut, &StartTime, &StopTime, m_lWidth, m_lHeight, k);

return hr;
}

return NOERROR;
}

我是通过m_callback回调取得每一桢的数据, 然后再上传. 请问我要怎么样把时间戳加到pBufferOut里呀
...全文
198 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
ayiyi0910 2011-09-28
  • 打赏
  • 举报
回复
另外音频采集的
DWORD WINAPI CVCWaveIn::AudioInThreadProc(LPVOID lpParameter)
{
CVCWaveIn* pWaveIn;
pWaveIn = (CVCWaveIn*)lpParameter;

// 缓存
unsigned char buffer[SIZE_AUDIO_FRAME];

MSG msg;
while(GetMessage(&msg, 0, 0, 0))
{
switch(msg.message)
{
case MM_WIM_OPEN: // 打开录音设备
break;
case MM_WIM_CLOSE: // 关闭录音设备
break;
case MM_WIM_DATA: // 录音设备返回数据
{
// 录音格式
WAVEHDR* pWH = (WAVEHDR*)msg.lParam;

// 释放缓存
waveInUnprepareHeader((HWAVEIN)msg.wParam, pWH, sizeof(WAVEHDR));

// 非法数据
if(SIZE_AUDIO_FRAME != pWH->dwBytesRecorded)
{
break;
}

// 复制录音数据
memcpy(buffer, pWH->lpData, pWH->dwBytesRecorded);

// 设置时戳
pWaveIn->GetData(buffer, pWH->dwBytesRecorded);

if (NULL == pWaveIn->m_AmrCodec)
{
pWaveIn->m_AmrCodec = new AmrCodec();
pWaveIn->m_AmrCodec->InitEncoder();
}

long nSize = pWH->dwBytesRecorded;
unsigned char *dstBuffer = new unsigned char[nSize];
memset(dstBuffer, NULL, nSize);

long nLen = 0;
int nRet = pWaveIn->m_AmrCodec->EncodeFrame(buffer, pWH->dwBytesRecorded, dstBuffer, nSize, &nLen);
if (0 == nRet && nLen > 0)
{
sanhuidsdk::Instance()->Talk((char *)dstBuffer, nLen);
}

delete dstBuffer;

// 为音频设备增加一个缓存, 准备继续录音
waveInPrepareHeader((HWAVEIN)msg.wParam, pWH, sizeof(WAVEHDR));
waveInAddBuffer((HWAVEIN)msg.wParam, pWH, sizeof(WAVEHDR));
}
break;
default:
break;
}
}

return msg.wParam;
}

void CVCWaveIn::GetData(unsigned char *pBuffer,int iLen)
{
static int i = 0;
static SYSTEMTIME time,time1;
static long l = 0;
if (i == 0)
{
::GetLocalTime (&time);
}
::GetLocalTime (&time1);

int j = time1.wSecond - time.wSecond;
if (abs(j) >= 1 )
{
memcpy(&time, &time1, sizeof(time));
l = 0;
}
l = l + iLen;
i++;
}
我是想通过GetData函数来加时间戳, 求教一下我要怎么样把时间戳加到音频数据里呀

2,543

社区成员

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

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