2011-02-21 3 views
8

Próbuję zidentyfikować różne elementy metadanych wideo na iPadzie. Do tej pory udało mi się z powodzeniem wykorzystać biblioteki AVAsset do znalezienia pliku i wygenerować tablicę elementów AVMetadataItems przy użyciu metadataForFormat:. W pliku znaleziono tylko formaty danych użytkownika iTunes i Quicktime. Problem polega na tym, że mam te informacje, nie mam możliwości zidentyfikowania tego, co jest. Zamierzałem załadować słownik z informacją, indeksowaną przez klucz metadanych, ale użycie właściwości 01MAVMetadataItem wydaje się nie działać poprawnie, jak gdyby zwracała liczbę (debugger mówi, że jest NSCFNumber). Oto przykładowy kod, co robię:Pobieranie nazwy klucza w AVMetadataItem dla zestawu AVA w systemie iOS

ALAssetRepresentation *representation = [[valAsset defaultRepresentation] retain]; 
NSURL *url = [representation url]; 
AVURLAsset *aAsset = [[AVURLAsset URLAssetWithURL:url options:nil] retain]; 
metaDataDict = [[NSMutableDictionary dictionary] retain]; 
NSArray *fmtmetadata = [aAsset metadataForFormat:@"com.apple.itunes"]; 
for (AVMetadataItem* meta in fmtmetadata) 
{ 
    [metaDataDict setObject:[meta stringValue] 
      forKey:[meta key]]; 
    NSLog(@"metadata: key = %@", [meta key]); 
} 

To daje następujące dane wyjściowe w konsoli debuggera:

metadata: key = -1452383891 
metadata: key = -1452841618 
metadata: key = 1684370275 
metadata: key = 1818518899 
metadata: key = 1937009003 
metadata: key = -1453101708 

Nawiasem mówiąc, zmieniając linię NSLog czytać:

NSLog(@"metadata: %@", meta); 

daje nam dane wyjściowe:

metadata: keySpace=itsk, key=desc, commonKey=(null), locale=(null), value=This is the Description of the Video, time={INVALID}, duration={INVALID}, extras={ 
    dataType = 1; 
} 

Każda pomoc jest bardzo doceniana!

Odpowiedz

10

Wygląda na te klawisze są kodowane ID3:

1684370275 = 0x64657363 = { 'd', 'e', ​​'e', ​​'C'}

1818518899 = 0x6C646573 = { 'L' 'd', 'e', ​​'s'}

1937009003 = 0x7374696B = { 's'' 't', 'i', 'k'}

itp

+0

wielkie, dzięki dla odpowiedzi, miałem przeczucie co do tego ... jakiś pomysł, czy istnieje metoda ich dekodowania? – wideize

+0

Hmm .. to jest niesprawdzone, ale myślę, że coś 'klucza NSInteger = [meta key];' ' NSString * keyString = [NSString stringWithFormat "% 4s" @, & key]' powinno działać. – tundrabot

+4

Dzięki ... Oto, co zrobiłem: NSUInteger akey = NSSwapInt ([(NSNumber *) [klucz meta] unsignedIntegerValue]); NSString * keyString = [NSString stringWithFormat: @ "% .s4s", &akey]; – wideize

Powiązane problemy