Как написать пользовательский udta-атом с помощью AVAssetWriter?

#ios #mp4 #avassetwriter

#iOS #МР4 #avassetwriter

Вопрос:

Я использую AVAssetWriter iOS 9.3 SDK для записи AAC, упакованного в контейнер MP4. Довольно стандартный материал. Он работает хорошо.

Однако теперь мне нужно добавить атом, содержащийся в 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:

Наконец-то нашел проблему. Если вы создаете свой asset writer в чистом режиме MP4 ( AVFileTypeMPEG4 ), то пользовательские метаданные, похоже, беззвучно сбрасываются на пол. Решение заключается в использовании типа файла контейнера QuickTime:

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