void ReadStreamClientCallBack(CFReadStreamRef stream,
CFStreamEventType type,
void* clientCallBackInfo) {
BMHttpAudioStreamManager *manager = (__bridge BMHttpAudioStreamManager*) clientCallBackInfo;
[manager readStreamClientCallBackWithData:stream withType:type];
}
- (void) readStreamClientCallBackWithData:(CFReadStreamRef) stream
withType:(CFStreamEventType) type {
if(type == kCFStreamEventHasBytesAvailable) {
UInt8 buffer[2048];
CFIndex bytesRead = CFReadStreamRead(stream, buffer, sizeof(buffer));
if (bytesRead < 0) {
//nothing
}
// If zero bytes were read, wait for the EOF to come.
else if (bytesRead) {
// parse the data. this will call MyPropertyListenerProc and MyPacketsProc
// AudioFileStreamParseBytes function called when you have data to pass to the parser.
// Send the data to the parser sequentially and, if possible, without gaps.
OSStatus err = AudioFileStreamParseBytes(_audioData->audioFileStream, bytesRead, buffer, 0);
/* This is what I had before, before I changed it to work 10.13.14
OSStatus err = AudioFileStreamParseBytes(((AudioData *) audioData)->audioFileStream, bytesRead, buffer, 0);
*/
if (err) PRINTERROR("AudioFileStreamParseBytes");
}
}
}
function that calls the above:
if (!CFReadStreamSetClient(stream8, kNetworkEvents, ReadStreamClientCallBack, &ctxt)) {...}
Comments