уменьшить размер видео в swift/iOS для загрузки на сервер

Я выбираю видео из своего быстрого приложения для iOS, используя UIImagePickerController. Я сохраняю этот URL-адрес и теперь хотел бы преобразовать его в данные для отправки на мой сервер для хранения, используя:

let messageVideoData = NSData(contentsOfURL: chosenVideoURL)

Проблема в том, что размер файла очень большой. Для 7-секундного видео, снятого на мой iPhone 6s, разрешение составляет 1280, 720, частота кадров — 30, а размер файла — более 4 МБ. Я заметил, что одно и то же изображение, отправленное с WhatsApp и другими приложениями для чата, уменьшилось до нескольких сотен КБ.

Каков наилучший способ уменьшить размер файла для внешнего хранилища? Видео в первую очередь предназначено для телефонов, поэтому можно уменьшить разрешение до 800 или меньше.

Я попытался установить качество UIImagePickerController на:

picker.videoQuality = UIImagePickerControllerQualityType.Type640x480

но это только уменьшило размер файла до 3,5 МБ.

С использованием:

picker.videoQuality = UIImagePickerControllerQualityType.TypeLow

уменьшил разрешение до значения намного ниже, чем хотелось бы.

Есть ли другой подход, который я должен использовать, чтобы уменьшить размер моего видеофайла для хранения на моем сервере?


person alionthego    schedule 31.05.2016    source источник
comment
Можете ли вы показать нам, как вы решили это точно, пожалуйста?   -  person Farid Al Haddad    schedule 04.06.2017
comment
попробуйте это: stackoverflow.com/a/62862102/4833705   -  person Lance Samaria    schedule 15.07.2020


Ответы (2)


Попробуйте этот ответ для сжатия видео. Согласно jojaba answer:

Если вы хотите сжать видео для удаленного обмена и сохранить исходное качество для локального хранения на iPhone, вам следует изучить AVAssetExportSession или AVAssetWriter.

Сжать видео Без низкого качества

Однако этот подход соответствует Objective-C.

Вам также следует прочитать о том, как iOS управляет Активы.

person onkar    schedule 31.05.2016

person    schedule
comment
Вместо этого я использовал NextLevelSessionExporter, но очень похоже. Спасибо! - person landnbloc; 30.09.2020