2012-06-19 10 views
5

मैं एवीप्लेयर का उपयोग करके अपने आईफोन संगीत पुस्तकालय से एक गाना बजाने की कोशिश कर रहा हूं। सब कुछ खेलने के लिए तैयार लगता है, लेकिन खिलाड़ी बस कोई आवाज नहीं बनाएगा। मैं थोड़ी देर के लिए इसके साथ संघर्ष कर रहा हूं, किसी भी मदद की सराहना की जाएगी!एवीप्लेयर संगीत पुस्तकालय से नहीं खेल रहा है

नोट: मुझे एहसास है कि मैं AVAudioPlayer का उपयोग कर सकता हूं, लेकिन मैं अपनी संगीत लाइब्रेरी से फ़ाइल को पढ़ना चाहता हूं और मेरी समझ में, AVAudioPlayer इसका समर्थन नहीं करता है (मुझे पहले गाने को निर्यात करना होगा, उठाना होगा ज्यादा समय)। मैं MPMusicPlayerController का उपयोग नहीं कर सकता क्योंकि अंतिम लक्ष्य गीत को NSData में बदलना और इसे किसी अन्य डिवाइस पर चलाना है।

इन सबसे ऊपर, मुझे पता है कि क्यों इस कोड नहीं चल रहा है करना चाहते हैं:

NSArray *itemsFromQuery = [[MPMediaQuery songsQuery] items]; 
MPMediaItem *song = [itemsFromQuery objectAtIndex:29]; 
NSURL *songURL = [song valueForProperty:MPMediaItemPropertyAssetURL]; 
AVURLAsset *urlAsset = [[AVURLAsset alloc] initWithURL:songURL options:nil]; 

NSArray *keyArray = [[NSArray alloc] initWithObjects:@"tracks", nil]; 

[urlAsset loadValuesAsynchronouslyForKeys:keyArray completionHandler:^{ 

    AVPlayerItem *playerItem = [[AVPlayerItem alloc] initWithAsset:urlAsset]; 

    AVPlayer *player = [[AVPlayer alloc] initWithPlayerItem:playerItem]; 

    while (true) { 
     if (player.status == AVPlayerStatusReadyToPlay && playerItem.status == AVPlayerItemStatusReadyToPlay) { 
      break; 
     } 
    } 

    if (player.status == AVPlayerStatusReadyToPlay && playerItem.status == AVPlayerItemStatusReadyToPlay) { 
     NSLog(@"Ready to play"); 
     [player play]; 
    } 
    else 
     NSLog(@"Not ready to play"); 
}]; 

उत्पादन "खेलने के लिए तैयार" है, और "दर" AVPlayer की संपत्ति 1.0 है के बाद मैं फोन नाटक विधि। MPMediaItem मौजूद है, और मैं सही शीर्षक, कलाकार इत्यादि प्राप्त करने के लिए valueForProperty विधि का उपयोग कर सकता हूं। कोई विचार क्यों खिलाड़ी से कोई आवाज नहीं आ रही है?

+1

आप AVPlayer और AVPlayerItem ब्लॉक के बाहर की घोषणा, सही होने के बाद 'NSArray * keyArray' तरह की कोशिश की? – meggar

+0

मैंने किया। उन्हें घोषित करना और उन्हें प्रारंभ करना कोई फर्क नहीं पड़ता है। उन्हें बाहर घोषित करना और हैंडलर के भीतर उन्हें प्रारंभ करना स्पष्ट रूप से प्रतिबंधित है। हालांकि विचार के लिए धन्यवाद! – JohnG

उत्तर

12

मिले कुछ है कि काम किया:

  1. मैं AVPlayer एक संपत्ति (! टिप meggar के लिए धन्यवाद)
  2. मुझे यकीन है कि AVPlayer initWithAsset विधि का उपयोग करने से पहले नहीं के बराबर था बनाया।

    NSArray *itemsFromQuery = [[MPMediaQuery songsQuery] items]; 
    MPMediaItem *song = [itemsFromQuery objectAtIndex:0]; 
    NSURL *songURL = [song valueForProperty:MPMediaItemPropertyAssetURL]; 
    AVURLAsset *urlAsset = [[AVURLAsset alloc] initWithURL:songURL options:nil]; 
    
    NSArray *keyArray = [[NSArray alloc] initWithObjects:@"tracks", nil]; 
    
    [urlAsset loadValuesAsynchronouslyForKeys:keyArray completionHandler:^{ 
    
        AVPlayerItem *playerItem = [[AVPlayerItem alloc] initWithAsset:urlAsset]; 
    
        player = nil; 
        player = [[AVPlayer alloc] initWithPlayerItem:playerItem]; 
    
        while (true) { 
         if (player.status == AVPlayerStatusReadyToPlay && playerItem.status == AVPlayerItemStatusReadyToPlay) 
          break; 
        } 
    
        [player play]; 
    
    }]; 
    

आशा इस किसी को बाहर मदद करता है!

+1

बहुत बहुत धन्यवाद। वास्तव में। धन्यवाद। बहुत। – duci9y

1

एक अन्य कारण AVAudioSession को कॉन्फ़िगर कर रहा है। मेरे लिए काम किया

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; 
    [[AVAudioSession sharedInstance] setActive: YES error: nil]; 
संबंधित मुद्दे