是否可以使用iPhone上的音频单元来解码MMS + WMA2流?
问题描述:
我不确定音频单元是否可以在iPhone上的流音频场景中作为编解码器工作。是否可以使用iPhone上的音频单元来解码MMS + WMA2流?
我已经在各种地方看过它可以完成,但我没有看到任何示例或适当的文档。相反,我发现大多数已发布的应用程序都使用了ffmpeg和libmms。
我很感激你能给我的任何帮助。
答
音频单元非常低级,如果您想要进行一些沉重的音频处理(如实时音频效果),它非常有用。据我所知音频单元不支持wma音频编解码器。你必须为此使用FFmpeg库。
由于FFmpeg还支持mms,因此不需要使用另一个库,如libmms连接到mms音频流。您可以连接到MMS与FFmpeg的音频流是这样的:
const char *url = "mmst://somemmsurlhere.com";
avformat_open_input(formatCtx, url, NULL, NULL);
用于解码音频数据可以使用avcodec_decode_audio3功能。一旦你已经解码了音频数据,我建议你使用AudioQueue框架进行播放。 AudioQueue通过调用您定义的回调函数来请求您提供音频数据。其中一个回调函数是AudioQueueOutputCallback,您可以在其中传递解码音频数据,如下所示:
- (void)handlePlayCallback:(AudioQueueRef) inAudioQueue buffer:(AudioQueueBufferRef) inBuffer {
// copy decoded audio data to inBuffer->mAudioData
// and set the size of the copied data like this
// inBuffer->mAudioDataByteSize = data_written
if(inBuffer->mAudioDataByteSize > 0) {
AudioQueueEnqueueBuffer(inAudioQueue, inBuffer, 0, NULL);
}
}