मुझे पता है कि एवीप्लेयर का उपयोग करके आईपॉड गाने चलाना संभव है, लेकिन मैं यह नहीं समझ सकता कि AVAudioPlayer को आइपॉड गीत यूआरएल के साथ initWithContentsOfURL का उपयोग करके कैसे प्रारंभ किया जाए। जब मैं कोशिश करता हूं, AVAudioPlayer प्रारंभ होने पर NULL देता है।

मुझे AVAudioPlayer का उपयोग करने की आवश्यकता है क्योंकि जब मेरा ऐप पृष्ठभूमि में चलता है (यानी AVAudioPlayer प्रतिनिधि विधि audioPlayerDidFinishPlaying को आगे की प्रक्रिया के लिए मुझे इसकी प्रतिनिधि विधि 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 का उपयोग करता हूं तो यह न्यूल क्यों लौटाता है, इस बारे में कोई विचार, लेकिन जब मैं AVPlayer का उपयोग करता हूं तो प्रारंभिक प्लेयर देता है?

तकनीकी प्रश्नोत्तर के अनुसार http://developer.apple.com/library /ios/#qa/qa1634/_index.html, "initWithContentsOfURL के साथ प्रयोग किया जाने वाला URL: एक फ़ाइल URL (फ़ाइल: //) होना चाहिए। यानी, एक स्थानीय पथ।"

जब मैं अपनी आईपॉड लाइब्रेरी में गाने के लिए यूआरएल प्राप्त करता हूं, तो पथ है:

आइपॉड-लाइब्रेरी: //item/item.mp3?id=-4017276016911605928

क्या आप कहेंगे कि मेरी आईपॉड लाइब्रेरी के इस पथ को "स्थानीय पथ" नहीं माना जाता है या क्या आप इसे एक बग मानेंगे कि initWithContentsOfURL NULL लौटा रहा है?

विचार किसी को?

2
JeffB6688 1 जिंदा 2012, 03:46
इसका कोई समाधान? मैं स्विफ्ट में भी ऐसा ही कर रहा हूं लेकिन किस्मत नहीं। . क्या आप कृपया बता सकते हैं कि उपरोक्त url को स्थानीय url के रूप में कैसे बनाया जाए?
 – 
Usama Sadiq
29 जुलाई 2015, 10:03
क्षमा करें, लेकिन जैसा कि आप नीचे दिए गए उत्तर से देख सकते हैं, कोई समाधान प्रतीत नहीं होता है (कम से कम कोई भी जो मेरे लिए काम नहीं करता है)।
 – 
JeffB6688
31 जुलाई 2015, 06:21

1 उत्तर

सबसे बढ़िया उत्तर

आपने अपने स्वयं के प्रश्न का उत्तर दिया है क्योंकि जो मैं इकट्ठा कर सकता हूं वह यूआरएल पथ है जो AVAudioPlayer के लिए महत्वपूर्ण है, और इसे बंडल के लिए स्थानीय होना चाहिए। सूचनाओं के साथ AVPlayer का उपयोग करने का एक उदाहरण है, AVPlayerDemo के लिए playerItemDidReachEnd खोजें लेकिन मैं आपको यह नहीं बता सकता कि यह पृष्ठभूमि में चलता है या अग्रभूमि में।

1
Dharmesh Dhorajiya 19 सितंबर 2015, 13:25
ठीक है धन्यवाद। मुझे नहीं पता था कि बंडल के लिए यूआरएल पथ स्थानीय होना चाहिए। जानकार अच्छा लगा। दुर्भाग्य से, एवीप्लेयर से सूचनाएं तब तक रोक दी जाती हैं जब ऐप पृष्ठभूमि में होता है जब तक कि यह अग्रभूमि में फिर से प्रवेश नहीं कर लेता है, इसलिए इससे मदद नहीं मिलेगी
 – 
JeffB6688
27 फरवरी 2012, 19:43
1
मुझे लगता है कि यह अस्पष्ट है कि "स्थानीय" का अर्थ "बंडल में" या "डिवाइस पर" है। एक आइपॉड-लाइब्रेरी यूआरएल के साथ AVAudioPlayer initWithContentsOfURL आईओएस 6 और 7 में ठीक काम करता प्रतीत होता है, लेकिन मुझे इस बदलाव का कोई आधिकारिक दस्तावेज या स्पष्टीकरण नहीं दिख रहा है।
 – 
arlomedia
16 पद 2013, 05:26