Загружать видео из галереи с помощью фреймворка

Каков наилучший способ загрузки видеороликов из галереи с помощью фреймворка? Прежде чем использовать ALAssetRepresentation и следующий метод:

- (**********)getBytes:(******* *)buffer fromOffset:(long long)offset length:(**********)length error:(NSError **)error;

это позволило загрузить файл без предварительного копирования его в каталог приложения temp. Не видите альтернативы в рамке Фотографии. Только путь, по-видимому, использует AVAssetExportSession → экспорт в локальный каталог → upload, но для этого требуется дополнительное пространство для хранения (может быть проблема, если видео слишком велико)

1 ответ

Кажется, единственный допустимый способ - запросить AVAsset из PHImageManager и проверить, является ли возвращаемый актив AVURLAsset. В этом случае URL-адрес может использоваться для прямого доступа к файлу и получения необходимого количества байтов:

[[PHImageManager defaultManager] requestAVAssetForVideo:videoAsset options:nil resultHandler:^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) {
 if ([asset isKindOfClass:[AVURLAsset class]]) {
 NSURL *URL = [(AVURLAsset *)asset URL];
 // use URL to get file content
 }
}];

Это не будет работать с медленными видеороликами, потому что возвращается AVComposition вместо AVURLAsset. Возможным решением является использование версии видео PHVideoRequestOptionsVersionOriginal:

PHVideoRequestOptions *options = [[PHVideoRequestOptions alloc] init];
options.version = PHVideoRequestOptionsVersionOriginal;
[[PHImageManager defaultManager] requestAVAssetForVideo:videoAsset options:options resultHandler:^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) {
 if ([asset isKindOfClass:[AVURLAsset class]]) {
 NSURL *URL = [(AVURLAsset *)asset URL];
 // use URL to get file content
 }
}];

И для получения полного изображения изображения:

PHContentEditingInputRequestOptions *options = [[PHContentEditingInputRequestOptions alloc] init];
options.canHandleAdjustmentData = ^BOOL(PHAdjustmentData *adjustmentData) {
 return YES;
};
[imageAsset requestContentEditingInputWithOptions:options completionHandler:^(PHContentEditingInput *contentEditingInput, NSDictionary *info) {
 // use contentEditingInput.fullSizeImageURL
}];

licensed under cc by-sa 3.0 with attribution.