如何用AVAssetWriter编写自定义udta原子?

时间:2016-10-05 17:57:49

标签: ios mp4 avassetwriter

我在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原子在输出文件中根本不出现。这里出了什么问题?

1 个答案:

答案 0 :(得分:1)

终于找到了问题。如果您在纯MP4(AVFileTypeMPEG4)模式下创建资产编写器,则自定义元数据似乎会静默地丢弃在地板上。解决方案是使用QuickTime容器文件类型:

AVAssetWriter * writer = [AVAssetWriter assetWriterWithURL:url fileType:AVFileTypeQuickTimeMovie error:nil];