Pobieranie metadanych ze strumienia audio
Chciałbym uzyskać nazwę pliku i, jeśli to możliwe, obraz albumu z strumieniowego adresu URL w AVPlayerItem, który gram z AVQueuePlayer, ale nie wiem, jak to zrobić.
Również jeśli okaże się, że mój streaming URL nie ma żadnych metadanych, Czy Mogę umieścić metadane w moim NSURL*
przed przekazaniem go do AVPlayerItem?
2 answers
Dziwi mnie, że nikt nie odpowiedział na to pytanie. W rzeczywistości nikt nie odpowiedział na żadne z moich innych pytań. Zastanawiam się, ile wiedzy ludzie tutaj naprawdę mają.
W każdym razie, odpowiem na własne pytanie. Dowiedz się, jak uzyskać metadane, wykonując następujące czynności:AVPlayerItem *playerItem = [AVPlayerItem playerItemWithURL:url];
NSArray *metadataList = [playerItem.asset commonMetadata];
for (AVMetadataItem *metaItem in metadataList) {
NSLog(@"%@",[metaItem commonKey]);
}
Co daje mi listę w następujący sposób:
title
creationDate
artwork
albumName
artist
Z tej listy Teraz wiem, jak uzyskać dostęp do metadanych z Mojego strumienia audio. Wystarczy przejrzeć NSArray
i spojrzeć dla AVMetadataItem
, który ma commonKey
, które chcę (na przykład, title
). Kiedy znajdę AVMetadataItem
, po prostu zdobędę z niego value
własność.
Teraz, to działa świetnie, ale może być możliwe, że gdy spróbujesz uzyskać dane, zajmie to chwilę. Możesz załadować dane asynchronicznie, wysyłając loadValuesAsynchronouslyForKeys:completionHandler:
do AVMetadataItem
, który właśnie znalazłeś.
Nadzieję, że to pomoże każdemu, kto może znaleźć się z tym samym problemem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-20 05:05:40
Podczas pobierania konkretnej pozycji używałbym stałej metadata common keys zadeklarowanej w AVMetadataFormat.h, czyli: AVMetadataCommonKeyTitle .
NSUInteger titleIndex = [avItem.asset.commonMetadata indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
AVMutableMetadataItem *metaItem = (AVMutableMetadataItem *)obj;
if ([metaItem.commonKey isEqualToString:AVMetadataCommonKeyTitle]) {
return YES;
}
return NO;
}];
AVMutableMetadataItem *item = [avItem.asset.commonMetadata objectAtIndex:titleIndex];
NSString *title = (NSString *)item.value;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-09 16:11:26