Hi Ross,
Sorry it took so long to get back to this. I reworked the front end of the WAVAudioFileSource Constructor to cope with the possible variety of subchunks in the "WAVE" chunck. It is passed below. Unfortunately the sample WAV file I have is copyright material and I am not comfortable sharing it. I will search to find a suitable WAV file. WAVAudioFileSource::WAVAudioFileSource(UsageEnvironment& env, FILE* fid) : AudioInputDevice(env, 0, 0, 0, 0)/* set the real parameters later */, fFid(fid), fFidIsSeekable(False), fLastPlayTime(0), fHaveStartedReading(False), fWAVHeaderSize(0), fFileSize(0), fScaleFactor(1), fLimitNumBytesToStream(False), fNumBytesToStream(0), fAudioFormat(WA_UNKNOWN) { // Check the WAV file header for validity. // Note: The following web pages contain info about the WAV format: // http://www.ringthis.com/dev/wave_format.htm // http://www.lightlink.com/tjweber/StripWav/Canon.html // http://www.wotsit.org/list.asp?al=W Boolean success = False; // until we learn otherwise do { int iStatus = 1; // 0 means we can procede after finding "fmt " // 1 means keep going // -1 means error occured { unsigned int uiTemp, uiSubchunkSize ; // // Attempt to read "RIFF" // if (!get4Bytes(fid, uiTemp)) break; if (uiTemp != 0x46464952) break ; if (!skipBytes(fid, 4)) break; // // Attempt to read "WAVE" // if (!get4Bytes(fid, uiTemp)) break; if (uiTemp != 0x45564157) break ; // // Loop until the "fmt " subchunk is found // while(iStatus == 1) { if (get4Bytes(fid, uiTemp)) { // // Is it "fmt "? // if (uiTemp != 0x20746d66) { // // Skip this subchunk // if (get4Bytes(fid, uiSubchunkSize)) { if (!skipBytes(fid, uiSubchunkSize)) { iStatus = -1 ; } } else { iStatus = -1 ; } } else { // // Found the "fmt " subchunk" ... exit loop // break ; } } else { iStatus = -1 ; // Error give up } } } if(iStatus == -1) break ; // error in parsing //// RIFF Chunk: //if (nextc != 'R' || nextc != 'I' || nextc != 'F' || nextc != 'F') break; //if (!skipBytes(fid, 4)) break; //if (nextc != 'W' || nextc != 'A' || nextc != 'V' || nextc != 'E') break; //// FORMAT Chunk: //if (nextc != 'f' || nextc != 'm' || nextc != 't' || nextc != ' ') break; unsigned formatLength; if (!get4Bytes(fid, formatLength)) break; unsigned short audioFormat; The balance of the method remains the same. The new code simply skips and subchunk other than "fmt " Sid. From: live-devel-boun...@ns.live555.com [mailto:live-devel-boun...@ns.live555.com] On Behalf Of Ross Finlayson Sent: Wednesday, June 06, 2012 3:43 AM To: LIVE555 Streaming Media - development & use Subject: Re: [Live-devel] Streaming a WAV file I am running the OnDemandRTSPServer test application with WAV files and it seems that the WAV file processing expects the first SubChunk of the file to always be the "fmt " SubChunk. This is not the case for the files I am using, they have other SubChunks, e.g. "LIST". What is the best way to get this into the library? Should I implement and submit my changes to you? Yes, if you can. (The change will most likely be to the file "liveMedia/WAVAudioFileSource.cpp".) For future reference, it would also be useful to get an example of a WAV file like this. Could you please put one on a web server, and send us the URL, so we can download it? Ross Finlayson Live Networks, Inc. http://www.live555.com/
_______________________________________________ live-devel mailing list live-devel@lists.live555.com http://lists.live555.com/mailman/listinfo/live-devel