用AVAudioplayer流式传输

时间:2011-03-15 13:47:55

标签: iphone streaming avaudioplayer

为了加载声音文件,我在我的应用程序中有以下代码:

- (id) init:(NSString*)a_filename ext:(NSString*)a_ext 
{
    ...

    NSString *t_soundFilePath = [CFileLoader getPathForResource:filename WithExtension:ext];
    NSURL *t_fileURL = [[[NSURL alloc] initFileURLWithPath: t_soundFilePath] autorelease];

    player = [[AVAudioPlayer alloc] initWithContentsOfURL: t_fileURL error: nil];
    [player prepareToPlay];
    ...

    }

我加载的所有声音都在我的包中,所以我想知道方法“initwithcontentsofurl”是否流式传输声音文件或是否缓存了所有文件。

我的应用程序中有很多精灵,所以我想减少用于声音的内存空间。

thx求助

4 个答案:

答案 0 :(得分:7)

我使用AVPlayer(不是AVAudioPlayer)来传输背景音频。

答案 1 :(得分:6)

如果您想在应用中流式传输音频,可以使用以下播放器而不是使用AVAudioPlayer

https://github.com/mattgallagher/AudioStreamer

对于此播放器,您不需要将声音文件放入捆绑包中,您可以将它们放在服务器上并使用网址来传输音频。

希望,这会帮助你。

答案 2 :(得分:6)

使用AVAudioPlayer播放的声音是从存储实时流式传输的。缺点是你可能偶尔会注意到启动时的小延迟。如果使用OpenAL,声音将完全加载到内存中。

ObjectAL文档中对这类事情进行了很好的讨论 - 这是一个旨在简化iPhone上声音和效果播放的库。

答案 3 :(得分:4)

  

“AVAudioPlayer类不支持流式音频   基于HTTP URL。与initWithContentsOfURL一起使用的URL必须是   文件URL(文件://)。也就是说,本地路径“。

https://developer.apple.com/library/ios/qa/qa1634/_index.html

但是你可以解决 - 例如异步写入本地文件,并使用此文件URL初始化AVAudioPlayer,它将起作用。