#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];