2011-12-31 53 views
2

我知道可以使用AVPlayer播放iPod歌曲,但我無法弄清楚如何使用initWithContentsOfURL以iPod歌曲URL初始化AVAudioPlayer。當我嘗試時,初始化時AVAudioPlayer返回NULL。使用ipod歌曲URL初始化AVAudioPlayer使用initWithContentsOfURL

我需要使用AVAudioPlayer,因爲我需要使用它的委託方法audioPlayerDidFinishPlaying作進一步處理時,我的應用程序在後臺(即AVAudioPlayer委託方法如果應用程序在後臺運行audioPlayerDidFinishPlaying被調用運行,但AVPlayer呢不提供委託方法,所以你只能使用不在後臺運行的通知)。

以下代碼用於播放帶有AVPlayer的iPod歌曲。

- (void)viewDidLoad { 

    [super viewDidLoad]; 
    AVAudioSession *session = [AVAudioSession sharedInstance]; 
    [session setCategory:AVAudioSessionCategoryPlayback error:nil]; 
    NSError *error = nil; 

    [session setActive:YES error:&error]; 
    MPMediaQuery *query = [MPMediaQuery songsQuery]; 
    NSArray *collection = [query items]; 
    MPMediaItem *item = [collection objectAtIndex:0]; 
    NSLog(@"%@",[item valueForProperty:MPMediaItemPropertyTitle]); 
    NSURL *url = [item valueForProperty:MPMediaItemPropertyAssetURL]; 
    AVPlayer *player = [[AVPlayer alloc]initWithURL:url]; // <-- Line to Replace 
    [player play]; 
} 

這很好。但是,如果我用下面的替換倒數第二行:

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

調用initWithContentsOfURL返回null。

有關爲什麼當我使用AVAudioPlayer時返回NULL的任何想法,但是當我使用AVPlayer時返回一個初始化的玩家?

根據Technical Q & A http://developer.apple.com/library/ios/#qa/qa1634/_index.html,「與initWithContentsOfURL:一起使用的URL必須是文件URL(file://),即本地路徑。」

當我獲得在我的iPod庫中的歌曲的URL,路徑爲:

的iPod庫://item/item.mp3 ID = -4017276016911605928

你會說,這我的iPod庫的路徑不被視爲「本地路徑」,或者您認爲它是initWithContentsOfURL返回NULL的錯誤?

想到任何人?

+0

任何解決方案?我在斯威夫特做同樣的事,但沒有運氣。 。你可以請告訴如何使上述網址作爲本地URL – 2015-07-29 07:03:33

+0

@UsamaSadiq對不起,但正如你從下面的答案中可以看到,似乎沒有解決方案(至少沒有適用於我的)。 – JeffB6688 2015-07-31 03:21:20

回答

1

你有種回答你自己的問題,因爲從我可以收集的是它是對AVAudioPlayer重要的url路徑,它必須是本地的捆綁。有一個例子使用AVPlayer與通知,搜索AVPlayerDemoplayerItemDidReachEnd但我不能告訴你它是否在後臺或前臺運行。

+0

好的,謝謝。我不知道URL路徑必須是本地的捆綁。很高興知道。不幸的是,當應用程序處於後臺時,來自AVPlayer的通知將被暫停,直到它重新進入前臺,所以不會幫助 – JeffB6688 2012-02-27 15:43:14

+1

我認爲「本地」意味着「在軟件包中」還是「在設備上」是不明確的。帶有ipod-library URL的AVAudioPlayer initWithContentsOfURL似乎在iOS 6和7中可以正常工作,但我沒有看到任何官方文檔或對此更改的解釋。 – arlomedia 2013-12-16 01:26:51