6

ठीक है तो मेरे पास MPMoviePlayerController का उपयोग कर एक URL से लाइव स्ट्रीम है।MPMoviePlayerController से मेटाडेटा प्राप्त करना

Player = [[MPMoviePlayerController alloc] 
       initWithContentURL:[NSURL URLWithString:@"MY_URL_HERE_I_REMOVED"]]; 
Player.movieSourceType = MPMovieSourceTypeStreaming 

अब स्ट्रीम मेटा डेटा देता है (मुझे विश्वास है कि हर कोई इसे क्या कहता है)। उदाहरण के लिए। ट्रैक आदि का नाम

मैं यह जानकारी प्राप्त करना चाहता हूं और इसे लेबल पर प्रदर्शित करना चाहता हूं।

मुझे नहीं पता कि यह कैसे प्राप्त करने के लिए, मैं MPMoviePlayerController से नहीं कर सकते बदल दिया है और घंटे के लिए खोज करने के बाद मैं MPTimedMetadata वर्ग संदर्भ पाया, लेकिन पता नहीं कैसे यह जानकारी प्राप्त करने का उपयोग करें।

बढ़िया है यदि आप इस डेटा को हर बार ट्रिगर करने के लिए अधिसूचना का उपयोग कैसे करें, इसका उल्लेख कर सकते हैं।

उत्तर

14

मान लीजिए कि आप पहले ही जानते हैं कि स्ट्रीम से किस तरह का मेटाडेटा भेजा जा रहा है (यदि आप नहीं देखते हैं, तो वीएलसी जैसे मीडिया प्लेयर का उपयोग करें), आपको पहले समय अंतराल में मेटाडेटा प्राप्त करने के लिए अधिसूचना पंजीकृत करनी होगी और फिर उन्हें संसाधित करने के लिए एक विधि।

, अधिसूचना के साथ शुरू सिर्फ

[[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(MetadataUpdate:) 
               name:MPMoviePlayerTimedMetadataUpdatedNotification 
              object:nil]; 

MPMoviePlayerController आवंटन के बाद।

फिर MetadataUpdate विधि

- (void)MetadataUpdate:(NSNotification*)notification 
{ 
    if ([streamAudioPlayer timedMetadata]!=nil && [[streamAudioPlayer timedMetadata] count] > 0) { 
     MPTimedMetadata *firstMeta = [[streamAudioPlayer timedMetadata] objectAtIndex:0]; 
     metadataInfo = firstMeta.value; 
    } 
} 

जहां streamAudioplayer अपने MPMoviePlayerController और metadataInfo एक NSString मूल्य स्टोर करने के लिए है पर

। उपर्युक्त वर्तमान में बजाने वाले गीत के कलाकार और ट्रैक जानकारी प्राप्त करेंगे।

यह मानक मेटाडेटा के लिए एक शॉउटकास्ट या हिमकास्ट स्ट्रीम द्वारा भेजा गया मामला है। (दूसरों के लिए नहीं कह सकता क्योंकि मैंने उन्हें नहीं देखा है)

ध्यान दें कि प्रत्येक स्ट्रीम विभिन्न मेटाडेटा को संभाल और भेज सकती है। के बाद से [streamAudioPlayer timedMetadata] एक NSArray है आप कर सकते हैं

NSArray *metaArray = [streamAudioPlayer timedMetadata]; 
NSLog (@"%i", [metaArray count]); //to see how many elements in the array 
MPTimedMetadata *firstMeta = [[streamAudioPlayer timedMetadata] objectAtIndex:0]; 

उपयोग तो डिबग सांत्वना कुंजी, keyspace, टाइमस्टैम्प, मूल्य गुणों का उपयोग करके मेटाडाटा की सामग्री को दिखाने के लिए।

उपरोक्त सभी एक उदाहरण है। मेटाडेटा को संभालने का कोई भी तरीका नहीं है। विस्तृत जानकारी

https://developer.apple.com/library/ios/#DOCUMENTATION/MediaPlayer/Reference/MPTimedMetadata_Class/Reference/Reference.html

MPTimedMetadata वर्ग संदर्भ के लिए

में और वहाँ से पाया जा सकता है ... पर कोड!

+0

कमाल !!! धन्यवाद! – Genevios

+0

हाय ... चार साल बाद, लेकिन फिर भी, क्या मैं पूछ सकता हूं ... क्या कोई ऐसा मामला है जहां 'timedMetadata' विधि एक से अधिक 'MPTimedMetadata' उदाहरण के साथ एक सरणी लौटाती है? अभी मैं उन सभी को प्राप्त करने के लिए 'इन-इन' लूप का उपयोग कर रहा हूं, लेकिन मैं सोच रहा हूं कि सरणी के पहले तत्व का उपयोग करने के बजाय यह वास्तव में आवश्यक है या नहीं। धन्यवाद! –

+0

तकनीकी रूप से बोल रहा है ... यह हो सकता है। इसके लिए या तो एक कस्टम-संकलित आइसकास्ट संस्करण या एक नया शूकास्ट/आइसकास्ट रिलीज की आवश्यकता होगी जो इसे बदलता है। विशेष मामलों पर, यह * संभवतः स्टेशन के * वेब * पते के साथ एक दूसरी वस्तु वापस कर सकता है।मेरे अनुभव में, मैं 100% निश्चित हूं कि मानक शॉउटकास्ट/आइसकास्ट सर्वरों में पहले (इंडेक्स 0) ऑब्जेक्ट पर मेटाडेटा होगा। – Pericles