我想通过逐个提交音频帧来播放mp3音频流。 我必须从内存缓冲区提交它 - 不使用mp3文件url(让我们说从网络流式传输的mp3并到达内存缓冲区)。
我应该从哪里开始? 是否有任何示例代码可以执行此类操作?
答案 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
似乎音频播放器需要大缓冲(我需要至少两个原始帧才能听到声音)。
目前,音频听起来不够好,但我想这是数据输入我做错了。