pcm格式的音频裸数据存储成 .avi 播放不了,求解决
PAVIFILE m_aviFile;
PAVISTREAM m_aviAudioStream;
WAVEFORMATEX m_avi_AudioFormat; //音频格式AVISTREAMINFOW m_aviAudioStreamInfo;
int m_aviAudioFrames;
AVISTREAMINFOW m_aviAudioStreamInfo;
m_aviAudioFrames=0;
m_aviAudioStream = NULL;
_fmemset(&m_aviAudioStreamInfo, 0, sizeof(m_aviAudioStreamInfo));
m_aviAudioStreamInfo.fccHandler = mmioFOURCC('M', 'S', 'V', 'C');
m_aviAudioStreamInfo.dwQuality = 7500;
m_aviAudioStreamInfo.dwFlags = 0;
m_aviAudioStreamInfo.wPriority = 8;
m_aviAudioStreamInfo.dwStart = 0;
m_aviAudioStreamInfo.dwLength = 0;
m_aviAudioStreamInfo.dwInitialFrames = 0;
m_aviAudioStreamInfo.dwEditCount = 0;
m_aviAudioStreamInfo.dwFormatChangeCount = 0;
m_aviAudioStreamInfo.dwFormatChangeCount = 0;
m_aviAudioStreamInfo.dwCaps = 0;
wcscpy(m_aviAudioStreamInfo.szName, _T("Audio Stream") );
//// Initalize the audio format structure
ZeroMemory(&m_avi_AudioFormat, sizeof(WAVEFORMATEX));
//// Set up some default data in case the config file
//// doesn't load
m_avi_AudioFormat.wFormatTag = WAVE_FORMAT_PCM; //编码格式,包括WAVE_FORMAT_PCM,WAVEFORMAT_ADPCM等
m_avi_AudioFormat.wBitsPerSample = 16; //WAVE文件的采样大小;
m_avi_AudioFormat.nChannels = 1;
m_avi_AudioFormat.nSamplesPerSec = 8000; //采样频率;
m_avi_AudioFormat.nBlockAlign = m_avi_AudioFormat.nChannels * (m_avi_AudioFormat.wBitsPerSample / 8); //块对齐;
m_avi_AudioFormat.nAvgBytesPerSec = m_avi_AudioFormat.nSamplesPerSec * m_avi_AudioFormat.nBlockAlign; //每秒的数据量;
BOOL CMediaController::InitDs()
{
AVIFileInit();
AVIFileOpen(&m_aviFile,(LPCTSTR)_T("c:\\av_test.avi"),OF_CREATE|OF_WRITE,0);
AVIFileCreateStream(m_aviFile,&m_aviAudioStream,(AVISTREAMINFO*)&m_aviAudioStreamInfo);
AVIStreamSetFormat(m_aviAudioStream, 0, &m_avi_AudioFormat, sizeof(WAVEFORMATEX) + m_avi_AudioFormat.cbSize);
}
//写入PCM数据,
void CMediaController::OnCallBackLocalPCMData(LPBYTE pData,int dLen)
{
if (dLen > 0)
{
if (m_CallBackBuffer_Audio.GetLength() >= m_CallBackBuffer_Audio.GetSize())
{
return ;
}
ZF_LogTimeA(KLT_PER_DAY, "OnCallBackLocalPCMData", "OnCallBackLocalPCMData: dLen=%d\r\n", dLen);
AVIStreamWrite(m_aviAudioStream,m_aviAudioFrames++,1,pData,dLen,0,NULL,NULL);
/*CMediaPack* packet = new CMediaPack();
packet->SetRawData(pData, dLen);
int nLen = m_CallBackBuffer_Audio.Put((char *)&packet, sizeof(CMediaPack*));*/
return ;
}
}
以上代码经过测试,播放不了,谁熟悉帮忙指导下