从URI获取音频流并在iPhone上播放

从URI获取音频流并在iPhone上播放,iphone,ios,audio,Iphone,Ios,Audio,我想从URL获取音频流并在iPhone上播放。不幸的是,只有C#示例说明如何播放该流,但我需要在iPhone框架中实现Objective C。我试过自己使用不同的音频框架,但都没有成功。这是C#中的内容: 在objective C中,我应该如何从该url获取流音频?在这个URL中,我没有mp3文件或其他东西,我只是得到一个流。也许我必须以某种方式将该流下载到iPhone音频文件中,然后播放它以消除延迟 我试过这个: AVPlayer *player = [AVPlayer playerWith

我想从URL获取音频流并在iPhone上播放。不幸的是,只有C#示例说明如何播放该流,但我需要在iPhone框架中实现Objective C。我试过自己使用不同的音频框架,但都没有成功。这是C#中的内容:

在objective C中,我应该如何从该url获取流音频?在这个URL中,我没有mp3文件或其他东西,我只是得到一个流。也许我必须以某种方式将该流下载到iPhone音频文件中,然后播放它以消除延迟

我试过这个:

 AVPlayer *player = [AVPlayer playerWithURL:url];
 [player play];
这是:

AVAudioPlayer *theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL: url error:nil];

    [theAudio setVolume :0.50]; //setting the volume

    [theAudio play];
两者都不起作用。 我已经测试了我的url,它在浏览器中运行良好

这是有效的代码:

NSData *_objectData = [NSData dataWithContentsOfURL:url];
    NSError *error;

    AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithData:_objectData error:&error];
    audioPlayer.numberOfLoops = 0;
    audioPlayer.volume = 1.0f;
    [audioPlayer prepareToPlay];

    if (audioPlayer == nil)
        NSLog(@"%@", [error description]);
    else
        [audioPlayer play];

查看类,AVFoundation框架的一部分。。。这是您用于流式音频的objective-c(iOS)类。

嘿,我遇到了一个无线电应用程序的音频流问题。我一直在寻找答案,但没有找到答案。AVAudioPlayer不是此处要使用的类。使用NSData对象下载URL的内容也不是解决方案,因为它会下载内容,然后代码会进一步执行。这类似于下载mp3,然后在播放器上本地播放

NSString* resourcePath = url; //your url
NSData *_objectData = [NSData dataWithContentsOfURL:[NSURL URLWithString:resourcePath]];
NSError *error;

app.audioPlayer = [[AVAudioPlayer alloc] initWithData:_objectData error:&error];
app.audioPlayer.numberOfLoops = 0;
app.audioPlayer.volume = 1.0f;
[app.audioPlayer prepareToPlay];

if (app.audioPlayer == nil)
    NSLog(@"%@", [error description]);
else
    [app.audioPlayer play];
[NSData dataWithContentsOfURL:[NSURL URLWithString:resourcePath]]; //Downloads the contents of the url and in case of radio the url's content is unlimited. The program gets frozen on executing this.
而是使用AVPlayer类

这个代码在我的无线电应用程序中起作用

AVPlayer *objAVPlayer = [[AVPlayer alloc] initWithURL:url];
[objAVPlayer play];

此代码不下载url上的内容,但会在收到流时播放流。

但它会首先将所有数据下载到NSData对象中。它不是流。它不做音频流,请共享一些指向音频流的链接。它不会在线播放。它还在下载。如果你的mp3是一个巨大的文件。撕开这段代码会给你一辈子的等待。@monikapel是的,我did@AsifHabib如果你不介意的话,你能和我分享你的演示吗?什么是wikiMusicPlayer?你确定吗?你在哪里读到的?我下载了完整的AVPlayer数据包,然后播放audio@SergeyStatnik它取决于url是否为流url。如果您将NSData用于流URL,它会一直填充数据缓冲区,直到流结束。这对于广播风格的戏剧来说是不可取的。如果你想为流URL播放广播风格的音乐,AVPlayer会给我们带来想要的效果。我曾尝试使用带有URL的AVPlayer播放Bropbox中的音乐,每次我在开始时等待4-5秒。。。我不知道为什么。音轨大小-4 MB。有什么想法吗?@Sergey Stadnik,据我所知,drop box下载不是流,所以AVPlayer将下载它,然后在您的情况下播放。也许吧,但我见过很多应用程序,它们在单击后立即从DB播放音频。他们如何做到这一点?
[NSData dataWithContentsOfURL:[NSURL URLWithString:resourcePath]]; //Downloads the contents of the url and in case of radio the url's content is unlimited. The program gets frozen on executing this.
AVPlayer *objAVPlayer = [[AVPlayer alloc] initWithURL:url];
[objAVPlayer play];