void Audio_Stream::streamIsReadyRead() { if (m_audioStreamParserRunning) { AS_TRACE("%s: parser already running!\n", __PRETTY_FUNCTION__); return; } /* Check if the stream's MIME type begins with audio/ */ std::string contentType = m_httpStream->contentType(); const char *audioContentType = "audio/"; size_t audioContentTypeLength = strlen(audioContentType); if (contentType.compare(0, audioContentTypeLength, audioContentType) != 0) { closeAndSignalError(AS_ERR_OPEN); return; } /* OK, it should be an audio stream, let's try to open it */ OSStatus result = AudioFileStreamOpen(this, propertyValueCallback, streamDataCallback, audioStreamTypeFromContentType(contentType), &m_audioFileStream); if (result == 0) { AS_TRACE("%s: audio file stream opened.\n", __PRETTY_FUNCTION__); m_audioStreamParserRunning = true; } else { closeAndSignalError(AS_ERR_OPEN); } }
void Audio_Stream::streamIsReadyRead() { if (m_audioStreamParserRunning) { AS_TRACE("%s: parser already running!\n", __PRETTY_FUNCTION__); return; } CFStringRef audioContentType = CFSTR("audio/"); const CFIndex audioContentTypeLength = CFStringGetLength(audioContentType); bool matchesAudioContentType = false; CFStringRef contentType = m_httpStream->contentType(); if (m_contentType) { CFRelease(m_contentType), m_contentType = 0; } if (contentType) { m_contentType = CFStringCreateCopy(kCFAllocatorDefault, contentType); /* Check if the stream's MIME type begins with audio/ */ matchesAudioContentType = (kCFCompareEqualTo == CFStringCompareWithOptions(contentType, CFSTR("audio/"), CFRangeMake(0, audioContentTypeLength), 0)); } if (m_strictContentTypeChecking && !matchesAudioContentType) { closeAndSignalError(AS_ERR_OPEN); return; } m_audioDataByteCount = 0; /* OK, it should be an audio stream, let's try to open it */ OSStatus result = AudioFileStreamOpen(this, propertyValueCallback, streamDataCallback, audioStreamTypeFromContentType(contentType), &m_audioFileStream); if (result == 0) { AS_TRACE("%s: audio file stream opened.\n", __PRETTY_FUNCTION__); m_audioStreamParserRunning = true; } else { closeAndSignalError(AS_ERR_OPEN); } }