2011-12-31 1 views
2

AVPlayer를 사용하여 iPod 노래를 재생할 수 있다는 것을 알고 있지만 initWithContentsOfURL을 사용하여 iPod 노래 URL로 AVAudioPlayer을 초기화하는 방법을 알 수 없습니다. 시도 할 때 AVAudioPlayer 초기화시 NULL을 반환합니다.initWithContentsOfURL을 사용하여 iPod Song URL로 AVAudioPlayer 초기화

는 내가 추가 처리를 위해 자사의 대리자 메서드 audioPlayerDidFinishPlaying를 사용할 필요가 있기 때문에 내 앱이 배경 (앱이 백그라운드에서 실행중인 경우 호출되는 audioPlayerDidFinishPlayingAVAudioPlayer 대리자 메서드에서 실행될 때 AVAudioPlayer를 사용해야합니다.하지만 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을 사용할 때 초기화 된 플레이어를 반환합니까?

기술 Q & A http://developer.apple.com/library/ios/#qa/qa1634/_index.html에 따르면 "initWithContentsOfURL과 함께 사용되는 URL은 파일 URL (file : //)이어야합니다. 즉 로컬 경로 여야합니다." 내 아이팟 라이브러리 노래의 URL을 얻을 때

경로는 다음과 같습니다

는 는

아이팟 라이브러리 : //item/item.mp3 ID = -4017276016911605928

당신이 말할 것인가 내 iPod 라이브러리 경로가 "로컬 경로"로 간주되지 않거나 initWithContentsOfURL이 NULL을 반환하는 버그라고 생각하십니까?

아무나 생각 나세요?

+0

이 모든 솔루션은 무엇입니까? 나는 스위프트에서 같은 일을하고 있지만 행운은 없다. . 위 URL을 로컬 URL로 만드는 방법을 알려 주실 수 있습니까? –

+0

@UsamaSadiq 미안하지만, 아래의 답에서 알 수 있듯이 해결책이없는 것 같습니다 (최소한 저에게는 효과가 없습니다). – JeffB6688

답변

1

내가 수집 할 수있는 부분은 AVAudioPlayer에 중요한 URL 경로이므로 일종의 자신의 질문에 답변했습니다. 번들에 로컬이어야합니다. 알림이있는 AVPlayer을 사용하는 예가 있지만 playerItemDidReachEnd에 대해 AVPlayerDemo을 검색 할 수 있지만 백그라운드 나 포 그라운드에서 실행되는지 여부는 알 수 없습니다.

+0

좋습니다, 감사합니다. URL 경로가 번들에 국한되어야한다는 것을 알지 못했습니다. 알아 둘만한. 안타깝게도 앱이 백그라운드에있을 때 백그라운드에서 전경에 다시 들어올 때까지 AVPlayer의 알림이 보류되므로 도움이되지 않습니다. – JeffB6688

+1

"로컬"이 "번들에 있음"또는 "기기에 있음"을 의미하는지는 모호합니다. ipod-library URL이있는 AVAudioPlayer initWithContentsOfURL은 iOS 6 및 7에서 정상적으로 작동하는 것으로 보이지만이 변경 사항에 대한 공식 설명서 나 설명이 표시되지 않습니다. – arlomedia