如何使用 AVAudioPlayer 执行 .m4a 歌曲文件的流式传输?

Posted

技术标签:

【中文标题】如何使用 AVAudioPlayer 执行 .m4a 歌曲文件的流式传输?【英文标题】:How perform streaming of .m4a song file with AVAudioPlayer? 【发布时间】:2013-06-09 03:03:01 【问题描述】:

我正在尝试从 iTunes 商店播放这首歌,同时我正在下载它

为什么下面的代码不能播放?

NSLog(@"start");

NSURL *songUrl = [NSURL URLWithString:@"http://a1804.phobos.apple.com/us/r1000/064/Music/v4/9b/b3/c7/9bb3c7dc-a06f-f18c-3e41-2ce1e36f73b4/mzaf_7432104896053262141.aac.m4a"];


NSError* errorVar = nil;
AVAudioPlayer* song = [[AVAudioPlayer alloc] initWithContentsOfURL:songUrl error:&errorVar];
[song prepareToPlay];
[song play];

【问题讨论】:

【参考方案1】:

我认为你必须使用 AVPlayer 而不是 AVAudioPlayer。

Apple 文档建议使用AVAudioPlayer 播放文件或内存中的音频数据。 AVPlayer 同样适用于本地和远程媒体文件。

self.player = [AVPlayer playerWithURL:<#Live stream URL#>];
[player addObserver:self forKeyPath:@"status" options:0 context:&PlayerStatusContext];

更多信息请参考Apple Docs。

【讨论】:

【参考方案2】:

你可以的

// soundUrl can be a remote url, don't need to be a file url
NSData *data = [NSData dataWithContentsOfURL:soundUrl];
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithData:data error:nil];

【讨论】:

以上是关于如何使用 AVAudioPlayer 执行 .m4a 歌曲文件的流式传输?的主要内容,如果未能解决你的问题,请参考以下文章

AVAudioPlayer initWithContentsOfURL 为 AAC/M4A 文件返回 nil

NSBundle 在尝试实例化 AVAudioPlayer 时找到 mp3 文件但没有找到 m4a

尝试使用 AVAudioPlayer 时出错

AVAudioPlayer 只用一些文件初始化

iOS 中的avaudioplayer支持哪些音频格式

Swift AVAudioPlayer 不会播放用 AVAudioRecorder 录制的音频