Playing itunes song previews from cocos2d app

末鹿安然 提交于 2020-01-05 04:02:16

问题


I am trying to get itunes song previews to play in my app. I have found some other questions like this but none of the solutions have worked for me. I am already signed up with the Affiliate program that apple has. Here are some of the things I have tried:

This got me the itunes preview URL that I am trying

     NSUInteger numberOfResults = 200;
     NSString *searchString = @"AC/DC";

     NSString *encodedSearchString = [searchString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
     NSString *finalSearchString = [NSString stringWithFormat:@"https://itunes.apple.com/search?term=%@&entity=song&limit=%u",encodedSearchString,numberOfResults];

     NSURL *searchURL = [NSURL URLWithString:finalSearchString];

     dispatch_queue_t iTunesQueryQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,  kNilOptions);

     dispatch_async(iTunesQueryQueue, ^{

         NSError *error = nil;
         NSData *data = [[NSData alloc] initWithContentsOfURL:searchURL options:NSDataReadingUncached error:&error];

         if (data && !error) {
             NSDictionary *JSON = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

             NSArray *array = [JSON objectForKey:@"results"];
             NSLog(@"Array is:%@",array);

         }
     });

This plays nothing

    NSURL *url = [NSURL URLWithString:[_backgroundPreviewList objectAtIndex:randomPreview]];

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

This also played nothing

    AVPlayer* aPlayer = [AVPlayer playerWithURL:url];
    [aPlayer play];

I even tried this that didn't work

    MPMoviePlayerController* player = [[MPMoviePlayerController alloc] initWithContentURL:url];
    [player play];

If anyone has done this can they let me know how to play the songs.


回答1:


This is released and working using MPMoviePlayerController, which I believe is the recommended approach for the streaming previews. Depending on what you are trying to do, you might have to work through some steps to enable play in the background. Good luck. p.s. if you get the AVPlayer working there are more docs available with solutions for background play see Technical QA doc 1668 from Apple

{

self.songPreview = [[MPMoviePlayerController alloc] init];

self.songPreview.movieSourceType = MPMovieSourceTypeStreaming;

/// set your URL from wherever you are getting it

[self.songPreview setContentURL:self.previewArtWorkButton.currentPreviewURL];
[self.view addSubview:self.songPreview.view];

/// i have set this next property to hidden because i am controlling volume and play programmatically

[self.songPreview.view setHidden:YES];

/// i have this next property set to No because I am using another trigger to play the /// song and not auto play after the buffering has completed

[self.songPreview setShouldAutoplay:NO];

[self.songPreview prepareToPlay];

}

/// later i call the play method

[self.songPreview play];



回答2:


I have got it working. One of the things I changed is I took that specific class out of ARC to make sure things were staying around. Here is the code I am using now

    NSURL *url = [NSURL URLWithString:@"URL"];

    AVPlayerItem* playerItem = [AVPlayerItem playerItemWithURL:url];
    NSLog(@"The url is: %@", url);
    if(_player)
    {
        [_player release];
    }
    _player = [[AVPlayer playerWithPlayerItem:playerItem] retain];

    [_player play];

    _player.actionAtItemEnd = AVPlayerActionAtItemEndNone;

Where _player is an AVPlayer object



来源:https://stackoverflow.com/questions/22251128/playing-itunes-song-previews-from-cocos2d-app

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!