Objective c - 从内存缓冲区逐帧播放 mp3 流

Objective c - play mp3 stream frame by frame from memory buffer

我想通过逐帧提交音频来播放mp3音频流。 我必须从内存缓冲区提交它 - 不使用 mp3 文件 url(假设 mp3 从网络流式传输并到达内存缓冲区)。

我应该从哪里开始? 有没有做这种事情的示例代码?

所以好像比我想的简单多了...

我刚创建:

    AVAudioPlayer* oAudioPlayer;

并用数据初始化它:

    oAudioPlayer = [[AVAudioPlayer alloc] initWithData:chunk fileTypeHint:AVFileTypeMPEGLayer3 error:&error];

而块是一些从网络到达的 mp3 帧。

最后是玩法:

    if ([oAudioPlayer play] == false)
        NSLog(@"failed to play audio buffer");

如果想在帧播放完毕后回调,可以在播放前添加委托:

    oAudioPlayer.delegate = oSound;

而 oSound 是 class:

    @interface    SoundClass : NSObject <AVAudioPlayerDelegate> {}

    @property(nonatomic,retain) AVAudioPlayer *player;

    - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag;
    - (void)audioPlayerDecodeErrorDidOccur:(AVAudioPlayer *)player error:(NSError * __nullable)error;

    @end

似乎音频播放器需要大缓冲区(我需要至少两帧的原始文件才能听到声音)。

目前,音频听起来不够好,但我想这是我做错的数据馈送。