में HTTP लाइव स्ट्रीमिंग का उपयोग करके मेटाडेटा पढ़ना संभव है HTTP लाइव स्ट्रीमिंग विधि का उपयोग करके लाइव स्ट्रीम चलाते समय, क्या यह संभव मेटाडेटा (उदाहरण के लिए शीर्षक और कलाकार) को पढ़ सकता है? यह एक आईफोन रेडियो ऐप के लिए है।क्या आईफ़ोन एसडीके
उत्तर
यह है, लेकिन यह आसान नहीं है। ऑडियो स्ट्रीमिंग के बारे में मैट गैलाघर के पास nice post on his blog है। विषय पर उन्हें उद्धृत करने के लिए:
मेटाडेटा का सबसे आसान स्रोत HTTP शीर्षलेख से आता है। eventType: handleReadFromStream अंदर विधि, CFReadStreamCopyProperty का उपयोग CFReadStreamRef से kCFStreamPropertyHTTPResponseHeader संपत्ति को कॉपी, तो आप CFHTTPMessageCopyAllHeaderFields उपयोग कर सकते हैं प्रतिक्रिया से बाहर शीर्ष लेख फ़ील्ड कॉपी करने के लिए। कई स्ट्रीमिंग ऑडियो सर्वरों के लिए, स्ट्रीम नाम इन फ़ील्ड में से एक है।
मेटाडाटा का काफी कठिन स्रोत ID3 टैग हैं। ID3v1 फ़ाइल के अंत में हमेशा है (इसलिए स्ट्रीमिंग के दौरान बेकार है)। ID3v2 शुरुआत में स्थित है, इसलिए पहुंच योग्य हो सकता है।
मैंने कभी नहीं ID3 टैग पढ़ा लेकिन मुझे लगता है है कि यदि आप पहले कुछ सौ फ़ाइल कहीं के रूप में यह लोड करता है की किलोबाइट कैश, AudioFileGetProperty साथ AudioFileOpenWithCallbacks साथ कि कैश खोलने के लिए और तो पढ़ kAudioFilePropertyID3Tag आप आईडी 3 डेटा पढ़ने में सक्षम हो सकते हैं (यदि यह मौजूद है)। जैसा कि मैंने कहा था: मैंने को वास्तव में ऐसा नहीं किया है इसलिए मैं नहीं जानता कि यह काम करेगा।
यह सुनिश्चित नहीं है कि यह प्रश्न अभी भी अपने लेखक के लिए वास्तविक है, लेकिन हो सकता है कि यह किसी की मदद करे। दो दिनों के दर्द के बाद मैंने जांच की कि यह काफी सरल है।
AVPlayerItem* playerItem = [AVPlayerItem playerItemWithURL:[NSURL URLWithString:<here your http stream url>]];
[playerItem addObserver:self forKeyPath:@"timedMetadata" options:NSKeyValueObservingOptionNew context:nil];
AVPlayer* player = [[AVPlayer playerWithPlayerItem:playerItem] retain];
[player play];
और उसके बाद:
- (void) observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object
change:(NSDictionary*)change context:(void*)context {
if ([keyPath isEqualToString:@"timedMetadata"])
{
AVPlayerItem* playerItem = object;
for (AVMetadataItem* metadata in playerItem.timedMetadata)
{
NSLog(@"\nkey: %@\nkeySpace: %@\ncommonKey: %@\nvalue: %@", [metadata.key description], metadata.keySpace, metadata.commonKey, metadata.stringValue);
}
}
}
यह है कि यहाँ कोड है कि मेरे लिए काम करता है। मुझे नहीं पता कि ऐप्पल ने AVPlayerItem के लिए इस नमूने को स्ट्रीम के "शीर्षक" के लिए दस्तावेज़ों में क्यों प्रदान नहीं किया, जो असली दुनिया स्ट्रीमिंग ऑडियो के लिए मुख्य विशेषता है। "एवी फाउंडेशन फ्रेमवर्क संदर्भ" में वे "timedMetadata" के बारे में बताते हैं जहां कहीं भी आवश्यक है। और मैट का नमूना सभी धाराओं के साथ काम नहीं करता है (लेकिन AVPlayer करता है)।
यह सुनिश्चित नहीं है कि इसे कभी भी सही उत्तर के रूप में क्यों चिह्नित नहीं किया गया था, लेकिन इसे वास्तव में चिह्नित किया जाना चाहिए। एक सतत धारा में, रेडियो ऐप के लिए, क्या किया जा सकता है जो वर्तमान ऑडियो फ़ाइल के बाद मेटाडेटा प्राप्त कर लेता है, और नया खेलना शुरू कर देता है? – user717452
जब भी 'timedMetadata' मान बदल दिया जाता है तब उपर्युक्त कोड कॉल किया जाएगा। इस प्रकार जब एक वेब स्ट्रीम (इंटरनेट रेडियो की तरह) खेलते हैं तो 'ObsValueForKeyPath: ofObject: change: context:' परिवर्तन पर ट्रिगर किया जाएगा। – rckoenes
ऊपर सही जवाब के रूप में चुना जाना चाहिए क्यों नहीं पता, लेकिन यह मुझे बहुत मदद करता है। आपका बहुत बहुत धन्यवाद। –
:
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
//Atualiza Nome Musica
if keyPath == "timedMetadata" {
if let meta = PlayerItem.timedMetadata {
print("Novo Metadata \(meta)")
for metadata in meta {
if let nomemusica = metadata.valueForKey("value") as? String{
LB_NomeMusica.text = nomemusica
if NSClassFromString("MPNowPlayingInfoCenter") != nil {
let image:UIImage = UIImage(named: "logo.gif")!
let albumArt = MPMediaItemArtwork(image: image)
var songInfo: [String:AnyObject] = [
MPMediaItemPropertyTitle: nomemusica,
MPMediaItemPropertyArtist: "Ao Vivo",
MPMediaItemPropertyArtwork: albumArt
]
MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo = songInfo
}
}
}
}
}
}
- 1. एक UITableView (आईफ़ोन एसडीके 3.0) में स्क्रॉलिंग अक्षम करें
- 2. आईफ़ोन ब्राउज़र
- 3. आईफ़ोन से आईफोन नेटवर्किंग
- 4. सी #, एंड्रॉइड और आईफ़ोन
- 5. कस्टम आईफ़ोन कीबोर्ड
- 6. देशी आईफ़ोन डेटाबेस, आईफोन
- 7. पुनरावर्ती स्थानीय अधिसूचना (आईफ़ोन)
- 8. एक आईफ़ोन लाइब्रेरी/ढांचा बनाना
- 9. आईफ़ोन टेबल सेल लेबल misaligned
- 10. मोनो डेवलप/मोनो टच # आईफ़ोन?
- 11. "आईफ़ोन डेवलपर प्रोग्राम लाइसेंस अनुबंध"
- 12. क्या फेसबुक जावास्क्रिप्ट एसडीके
- 13. क्या आईफोन एसडीके
- 14. एसडीके क्या है? (सी ++)
- 15. क्या आईफ़ोन एप्लिकेशन स्रोत कोड देखना संभव है?
- 16. क्या मुझे जेलब्रोकन आईफ़ोन का समर्थन करना है?
- 17. अभी भी आईफ़ोन 4 नए रिज़ॉल्यूशन
- 18. Xcode iPhone - बेस एसडीके, सक्रिय एसडीके क्या अंतर है?
- 19. आईफ़ोन ओएस: NSPredicate Nsfetchrequest और कोर डेटा
- 20. क्या कोई आईपॉड एसडीके है?
- 21. क्या फेसबुक एसडीके की दीवार
- 22. एसडीके
- 23. आईफ़ोन सफारी स्क्रीन.वैलहाइट और स्टेटसबार/टूलबार/एड्रेसबार
- 24. एसडीके
- 25. एसडीके
- 26. आईफ़ोन मूल एप्लिकेशन में बटन जैसे फेसबुक
- 27. एसडीके
- 28. एसडीके
- 29. आईफ़ोन 24-घंटे की समय सेटिंग
- 30. एसडीके
आप इस काम की मिलती है, तो मुझे पता है:
इस विधि जोड़ें। – Moshe
हाँ, iTunes में जब एक .m3u फ़ाइल स्ट्रीमिंग हो रही है, तो गीत और कलाकार जानकारी स्वचालित रूप से अपडेट हो जाती है। हो सकता है कि ID3v2 पूरे ट्रैक में हो - प्रत्येक ट्रैक की शुरुआत में, जैसा कि आपने कहा था। तो हो सकता है कि यह मेटाडेटा की प्रतीक्षा करने वाले इवेंट श्रोता की बात हो - मैं देख रहा हूं। – miketucker
@ माइक हाँ।मैट कोड पर एक नज़र डालें, नवीनतम संस्करण गिटहब पर है। यह अच्छा संकेत प्रदान करना चाहिए। – Moshe