2011-02-21 8 views
8

Estoy tratando de identificar los diferentes elementos de metadatos en un video en el iPad. Hasta el momento, pude utilizar con éxito las bibliotecas AVAsset para encontrar el archivo y generar una matriz de elementos AVMetadata utilizando metadataForFormat:. Solo los formatos de datos de usuario de iTunes y Quicktime se encontraron en el archivo. El problema ahora es que tengo esa información, no tengo forma de identificar qué es qué. Tenía la intención de cargar un diccionario con la información, indexada por la clave de metadatos, pero el uso de la propiedad key de AVMetadataItem parece no funcionar correctamente como si devolviera un número (el depurador dice que es un NSCFNumber). Aquí hay un código de ejemplo de lo que estoy haciendo:Recuperando el nombre de la clave en AVMetadataItem para un AVAsset en 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]); 
} 

Esto produce la siguiente salida en la consola depurador:

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

Por cierto, cambiando la línea NSLog para leer:

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

nos da salida como:

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

¡Cualquier ayuda es muy apreciada!

Respuesta

10

Parece que estas teclas se codifican etiquetas ID3:

1684370275 = 0x64657363 = { 'd', 'e', ​​'s', 'c'}

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

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

etc.

+0

GRAN, gracias para la respuesta, tenía un presentimiento sobre eso ... ¿Alguna idea de si hay un método para decodificarlos? – wideize

+0

Hmm .. esto no se ha probado, pero creo que algo así como tecla 'NSInteger = [tecla meta];' ' NSString * keystring = [NSString stringWithFormat: "% 4s" @, y la llave]' debería funcionar. – tundrabot

+4

Gracias ... Esto es lo que terminé haciendo: NSUInteger akey = NSSwapInt ([(NSNumber *) [meta key] unsignedIntegerValue]); NSString * keyString = [NSString stringWithFormat: @ "%. 4s", &akey]; – wideize

Cuestiones relacionadas