2016-10-05 5 views
1

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

Однако, теперь мне нужно добавить атом, содержащийся в 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 Безразлично» t появляется в выходном файле. Что здесь происходит?

ответ

1

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

AVAssetWriter * writer = [AVAssetWriter assetWriterWithURL:url fileType:AVFileTypeQuickTimeMovie error:nil]; 
Смежные вопросы