我在iOS 9.3 SDK上使用AVAssetWriter
编写了一个打包在MP4容器中的AAC。很标准的东西。它运作良好。
但是,现在我需要添加udta
原子中包含的原子(本例中称为mine
),所以我这样做了:
AVAssetWriter * writer =....
NSData * valueData = [NSJSONSerialization dataWithJSONObject:obj options:0 error:nil];
AVMutableMetadataItem * item = [AVMutableMetadataItem metadataItem];
item.keySpace = AVMetadataKeySpaceQuickTimeUserData; //udta
item.key = @"mine";
item.value = valueData;
writer.metadata = @[item];
[writer startWriting];
...
然后最后,udta原子在输出文件中根本不出现。这里出了什么问题?
答案 0 :(得分:1)
终于找到了问题。如果您在纯MP4(AVFileTypeMPEG4
)模式下创建资产编写器,则自定义元数据似乎会静默地丢弃在地板上。解决方案是使用QuickTime容器文件类型:
AVAssetWriter * writer = [AVAssetWriter assetWriterWithURL:url fileType:AVFileTypeQuickTimeMovie error:nil];