Abspielen von RTP Payload Daten
-
um Sound abzuspielen, welche ich aus empfangenen RTP Packeten erhalte, habe ich einen Klasse, welche einen übergebenen Buffer abspielen soll. Die Packete werden sortiert bevor sdie daten an die Methode übergeben wird. Die Daten sind mit uLaw encodiert und werden innerhalb der Klasse wieder decodiert in ein lineares PCM Format. Aber wenn ich versuche den Buffer abzuspielen bekomme ich ausschließlich ein Kancken und Rauschen ausgegeben. Ich habe mich bereits in diversen Foren erkundigt was meine Decoding Methode angeht, diese scheint soweit korrekt zu sein.
Hier mal mein Code:
//Hier die dazugehörige WAVEFORMATEX Struktur //Diese wird im Konstruktor der Klasse initializiert. m_wfx.wFormatTag = WAVE_FORMAT_PCM; m_wfx.nChannels = 1; m_wfx.nSamplesPerSec = 8000; m_wfx.wBitsPerSample = 8; m_wfx.cbSize = 0; m_wfx.nBlockAlign = (m_wfx.nChannels * m_wfx.wBitsPerSample)/8; m_wfx.nAvgBytesPerSec = (m_wfx.nSamplesPerSec*m_wfx.nBlockAlign); m_mmr = waveOutOpen(&m_hWaveOut,WAVE_MAPPER,&m_wfx,m_dwAudioOut,0,CALLBACK_THREAD); bool CWaveOut::Play(char* szBuffer, UINT uSize) { char* p; LPWAVEHDR lpWaveHdr = new WAVEHDR; if(!lpWaveHdr) return false; p = (char*)malloc(uSize); int iBuf = 0; ZeroMemory(lpWaveHdr, sizeof(WAVEHDR)); char szErr[1024]; CG711* pG711 = new CG711(); for(int i = 0; i < uSize; i++) { if(pG711->decodeULaw(szBuffer[i]) > 0) { p[iBuf] = pG711->decodeULaw(szBuffer[i]); iBuf++; } } delete pG711; pG711 = NULL; lpWaveHdr->dwBufferLength = uSize; lpWaveHdr->lpData = p; m_mmr = waveOutPrepareHeader(m_hWaveOut, lpWaveHdr, sizeof(WAVEHDR)); if(m_mmr) { waveOutGetErrorTextA(m_mmr, szErr, sizeof(szErr)); return false; } m_mmr = waveOutWrite(m_hWaveOut, lpWaveHdr, sizeof(WAVEHDR)); if(m_mmr) { waveOutGetErrorTextA(m_mmr, szErr, sizeof(szErr)); return false; } if(waveOutUnprepareHeader(m_hWaveOut, lpWaveHdr, sizeof(WAVEHDR))== WAVERR_STILLPLAYING) { Sleep(100); } } //and here is the call . . buffer = getOutputBuffer(); // returns the databuffer of collected packets PlayOut(buffer, strlen(buffer)); . .Ich weiß echt nicht mehr woran es noch liegen könnte. Vllt. hat ja jemand hier im Forum eine Ahnung.
Ins WinAPI Forum hab ich diesen Thread gesetzt, da es sich ja um Funktionen der WinAPI handelt.