从 cocos2d 应用播放 iTunes 歌曲预览

Posted

技术标签:

【中文标题】从 cocos2d 应用播放 iTunes 歌曲预览【英文标题】:Playing itunes song previews from cocos2d app 【发布时间】:2014-03-07 13:16:28 【问题描述】:

我正在尝试在我的应用中播放 iTunes 歌曲预览。我发现了一些其他类似的问题,但没有一个解决方案对我有用。我已经注册了苹果的会员计划。以下是我尝试过的一些事情:

这让我得到了我正在尝试的 iTunes 预览 URL

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

         
     );

这没有任何作用

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

这也没玩过

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

我什至试过这个没用

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

如果有人做过,可以告诉我如何播放歌曲。

【问题讨论】:

【参考方案1】:

这是使用 MPMoviePlayerController 发布和工作的,我认为这是流预览的推荐方法。根据您要执行的操作,您可能需要完成一些步骤才能在后台启用播放。祝你好运。 p.s.如果您让 AVPlayer 正常工作,还有更多文档可用于后台播放解决方案,请参阅Technical QA doc 1668 from Apple

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

self.songPreview.movieSourceType = MPMovieSourceTypeStreaming;

/// 设置你的 URL 从你得到它的任何地方

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

/// 我已将此下一个属性设置为隐藏,因为我正在控制音量并以编程方式播放

[self.songPreview.view setHidden:YES];

/// 我将下一个属性设置为否,因为我正在使用另一个触发器来播放 /// 歌曲,而不是在缓冲完成后自动播放

[self.songPreview setShouldAutoplay:NO];

[self.songPreview prepareToPlay];

/// 稍后我调用 play 方法

[self.songPreview play];

【讨论】:

谢谢,我将保留它现在的方式(它已经在苹果商店并且做得很好)但是很高兴知道如果有的话还有另一种方法改变【参考方案2】:

我已经让它工作了。我改变的一件事是我把那个特定的课程从 ARC 中拿出来,以确保事情不会发生。这是我现在使用的代码

    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;

其中 _player 是一个 AVPlayer 对象

【讨论】:

以上是关于从 cocos2d 应用播放 iTunes 歌曲预览的主要内容,如果未能解决你的问题,请参考以下文章

在我的 iPhone 应用程序中播放 iTunes 歌曲

如何在最近 5 天内按播放次数获得 iTunes 库前 10 首歌曲?

格式为 m4p 的歌曲在 AVPlayer 中不起作用

iPhone 应用程序可以在 iTunes 上播放音频吗?

iTunes 和应用内购买

如何从网页启动/传递值到 Windows C# 应用程序? (似乎有可能与 iTunes 的歌曲链接)?