获取流与AVAudioPlayer一起使用

时间:2013-01-05 00:01:08

标签: ios avaudioplayer

我似乎无法获得此链接:

https://api.soundcloud.com/tracks/54507667/stream

使用AVAudioPlayer。我已经在Souncloud API启动项目中对它进行了测试,它似乎工作得很好,但是,当我尝试自己实现它时它似乎不起作用。

我得到的错误:

  

无法识别的选择器发送到实例0x9245d40   2013-01-04 17:56:04.699 CollectionViewTest [17023:c07] *由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [__ NSCFString absoluteURL]:无法识别的选择器发送到实例0x9245d40'   * 首先抛出调用堆栈:.....

代码:

NSURL *streamURL = [NSString stringWithFormat:@"%@",
                        allDataDictionarySound[@"stream_url"], nil];
NSLog(streamURL);

NSURLRequest *request = [NSURLRequest requestWithURL:streamURL];
    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
    connectionPlay = [[NSURLConnection alloc] initWithRequest:request delegate:self];
    NSLog(@"test:");
    NSError *playerError;
    player = [[AVAudioPlayer alloc] initWithData:streamData error:&playerError];
    NSLog(@"test:2");

streamURL按预期打印,然后程序崩溃。

不打印测试。 当其他所有内容都被注释掉,并且NSURLRequest被删除时,它仍然会崩溃。 当我将整个代码块注释掉时,所有内容都会编译并运行。

我现在尝试过这个:

        NSData *_objectData = [NSData dataWithContentsOfURL:streamURL];
    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];

这也会返回长度错误,我可能会导致这个问题......

2013-01-05 13:46:16.536 CollectionViewTest[28224:c07] -[NSURL length]: unrecognized selector sent to instance 0x928a470
     

2013-01-05 13:46:16.546 CollectionViewTest [28224:c07] *由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [NSURL长度]:无法识别的选择器发送到实例0x928a470'   * 首先抛出调用堆栈:

1 个答案:

答案 0 :(得分:1)

streamURL是一个NSString - 而不是NSURL

尝试:

NSURL *streamURL = [NSURL URLWithString: [NSString stringWithFormat:@"%@",
                        allDataDictionarySound[@"stream_url"], nil]];

我也不清楚变量“streamData”来自哪里(或者你期望它在哪里)。

NSURLConnection正在异步加载请求中的数据。看起来您假设数据是同步加载的,并且在初始化“播放器”对象时可用。当玩家初始化时,数据(很可能)不存在。