我正在尝试使用 QTKit 对一些视频文件进行一些元数据标记。我已经解决了标记以字符串为值的原子的问题,但很难设置以 8 位整数作为参数的原子。以下是我现在从 Apple 的文档和互联网上其他各种来源获得的信息:
-(void) setMediaKind: (NSString *) value
{
QTMetaDataRef metaDataRef;
Movie theMovie;
OSStatus status;
theMovie = [movie quickTimeMovie];
status = QTCopyMovieMetaData (theMovie, &metaDataRef );
NSAssert(status == noErr,@"QTCopyMovieMetaData failed!");
if (status == noErr)
{
int intValue = NSSwapHostIntToBig([(NSNumber *)value intValue]);
UInt8 *dataValuePtr = (UInt8*)(&intValue);
ByteCount dataSize = sizeof(int);
if (dataValuePtr)
{
OSType key = 'stik';
QTMetaDataItem outItem;
status = QTMetaDataAddItem(metaDataRef,
kQTMetaDataStorageFormatiTunes,
kQTMetaDataKeyFormatiTunesShortForm,
(const UInt8 *)&key,
sizeof(key),
dataValuePtr,
dataSize,
kQTMetaDataTypeSignedIntegerBE,
&outItem);
NSAssert(status == noErr,@"QTMetaDataAddItem failed!");
char langCodeStr[] = "en";
status = QTMetaDataSetItemProperty(
metaDataRef,
outItem,
kPropertyClass_MetaDataItem,
kQTMetaDataItemPropertyID_Locale,
strlen(langCodeStr) + 1,
langCodeStr);
}
}
}
所以原子“stik”在 iTunes 中设置了视频的类型。如果我想将视频指定为电视节目,我需要为其分配一个值 10。如果我将 @"10" 发送到此方法,我不会收到任何错误,但视频文件也没有正确标记.
我确定我的部分问题是我跳过了学习 C 并直接进入了 Objective C,所以当我不得不像这样深入研究 C 时,我遇到了问题。