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

时间:2016-05-23 17:30:49

标签: objective-c avfoundation core-audio apple-tv

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

我应该从哪里开始? 是否有任何示例代码可以执行此类操作?

1 个答案:

答案 0 :(得分:1)

所以它似乎比我想象的要简单得多......

我刚刚创建:

    AVAudioPlayer* oAudioPlayer;

并用数据初始化它:

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

虽然chunk是从网络到达的一些mp3帧。

并最终播放方法:

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

如果想要在完成帧播放后进行回调,他可以在播放前添加一个代表:

    oAudioPlayer.delegate = oSound;

而oSound是一个班级:

    @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

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

目前,音频听起来不够好,但我想这是数据输入我做错了。