Получить размер аудиофайла без экспорта

я разрабатываю приложение, которое экспортирует аудиофайл, хранящийся в библиотеке iPod, но я должен проверить размер файла перед экспортом и загрузкой (сервер имеет фиксированный максимальный размер загрузки):

  • я знаю, что после экспорта файла размер будет другим: есть ли способ оценить новый размер?
  • главный вопрос: могу ли я узнать исходный размер файла перед экспортом (используя MPMediaItem или что-то еще), чтобы я мог сказать пользователю, что этот файл не может быть загружен (экспорт может занять некоторое время). Благодарю.

person Red Mak    schedule 19.12.2013    source источник
comment
ваша цель развертывания из ios 6 или 5   -  person codercat    schedule 06.01.2014
comment
У меня точно такой же вопрос. предполагаемыйOutputFileLength возвращает 0 в моем случае. Есть идеи ?   -  person Awais Fayyaz    schedule 08.02.2019


Ответы (2)


Я не проверял, но AVAssetExportSession может вам в этом помочь.

MPMediaItem *curItem = musicPlayer.nowPlayingItem;

NSURL *url = [curItem valueForProperty: MPMediaItemPropertyAssetURL];

AVURLAsset *songAsset = [AVURLAsset URLAssetWithURL: url options:nil];

AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset: songAsset
                                   presetName: AVAssetExportPresetPassthrough];

exporter.estimatedOutputFileLength даст вам размер в байтах.

person cjd    schedule 06.01.2014
comment
Да, это работает, спасибо :), но нам нужно добавить timeRange в экспортер: AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset: songAsset presetName: AVAssetExportPresetAppleM4A]; Половина CMTime = CMTimeMultiplyByFloat64 (exporter.asset.duration, 1); exporter.timeRange = CMTimeRangeMake(kCMTimeZero, половина); длинный длинный размер = exporter.estimatedOutputFileLength; - person Red Mak; 06.01.2014
comment
не могу поставить +50! ссылка не работает, что делать? - person Red Mak; 06.01.2014
comment
О какой ссылке вы спрашиваете? - person cjd; 07.01.2014
comment
Вы не можете получить предполагаемую OutputFileLength с помощью AVAssetExportPresetPassthrough, и вам также нужен timeRange, если вы используете другой пресет - person Ryan Heitner; 01.12.2014
comment
У меня точно такой же вопрос. предполагаемыйOutputFileLength возвращает 0 в моем случае. Есть идеи ? Я использую свифт 4 - person Awais Fayyaz; 08.02.2019
comment
В документации говорится, что это возвращает 0, когда пресет экспорта равен AVAssetExportPresetPassthrough, и он устарел в iOS 13. - person Jordan H; 23.05.2021

Я не уверен, но я думаю, что вы могли бы использовать:

MPMediaItem *item = [[collection items] objectAtIndex:0];
NSURL *url = [item valueForProperty:MPMediaItemPropertyAssetURL];
NSData *data = [NSData dataWithContentsOfURL:url];
NSLog(@"length %d",[data length]);

С уважением,

Мариано

person Mariano    schedule 02.01.2014
comment
iOS 6, есть ли разница? - person Red Mak; 06.01.2014