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

3

我在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个回答

1

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接