代码如下,数据保存到文件可正常播放,但就是不能边解码边放
- C/C++ code
HRESULT CMyAudioSourceStream::FillBuffer(IMediaSample *pms){ CheckPointer(pms,E_POINTER); BYTE *pData; int DataLen,de_size,cmp_size; pms->GetPointer(&pData); DataLen=pms->GetSize(); de_size=0; cmp_size=0; int MyRecv=recv(aClient,(char *)buffer,AVCODEC_MAX_AUDIO_FRAME_SIZE,0); if (MyRecv>0) { fwrite(buffer,MyRecv,1,TestFile); while (DataLen!=0 && MyRecv>0) { int out_size=avcodec_decode_audio2(c,(int16_t *)pData,&DataLen,buffer,MyRecv); if (out_size<0) { break; } MyRecv-=out_size; buffer+=out_size; cmp_size+=out_size; pData+=DataLen; de_size+=DataLen; } pData-=de_size; buffer-=cmp_size; pms->SetActualDataLength(de_size); pms->SetSyncPoint(TRUE); pms->SetTime(0,0); } return NOERROR;}
------解决方案--------------------------------------------------------
边解码边放必须要有一个原则就是不要破坏一个完整的sample