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
似乎音频播放器需要大缓冲区(我需要至少两帧的原始文件才能听到声音)。
目前,音频听起来不够好,但我想这是我做错的数据馈送。
我想通过逐帧提交音频来播放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
似乎音频播放器需要大缓冲区(我需要至少两帧的原始文件才能听到声音)。
目前,音频听起来不够好,但我想这是我做错的数据馈送。