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

时间:2011-07-28 09:00:37

标签: iphone ios audio

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

response = httpWebRequest.GetResponse();
            using (Stream stream = response.GetResponseStream())
            {
                using (SoundPlayer player = new SoundPlayer(stream))
                {
                    player.PlaySync();
                }
            }

我应该在目标C中做什么来从该网址获取流音频?在那个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];

都没有奏效。 我测试了我的网址,它在浏览器中运行良好。

这是有效的代码:

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];

4 个答案:

答案 0 :(得分:14)

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];

答案 1 :(得分:14)

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

[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];

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

答案 2 :(得分:8)

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

答案 3 :(得分:0)

MPMoviePlayerController *player;
player = [[MPMoviePlayerController alloc] init] ;
player.view.frame = CGRectMake(0, 0, 0, 0);
player.movieSourceType = MPMovieSourceTypeStreaming;
player.view.hidden = YES;
[self.view addSubview: [wikiMusicPlayer view]];

NSString *address = Your URL;
address = [address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSURL *url = [NSURL URLWithString:address];
[wikiMusicPlayer setContentURL:url];
[wikiMusicPlayer prepareToPlay];
[wikiMusicPlayer setShouldAutoplay: NO];
[wikiMusicPlayer play];