Мое приложение iOS, использующее Swift 4, имеет возможность сохранять или делиться видео, снятыми с передней или задней камеры.В случае, когда я делаю видео селфи, используя фронтальную камеру, и делюсь видео с другим приложением, оно отправляет его вверх ногами, даже если оно сохраняет правильную ориентацию.Все необходимые преобразования выполняются перед сохранением или отправкой, насколько мне известно.
Обновление - я обнаружил, что видео показывается перевернутым для обмена в Facebook или Messenger, но не в Почту.Я все еще могу сохранить видео, а затем загрузить его в Facebook или Messenger, и оно будет в правильной ориентации.
Я сократил его до разницы между сохранением и обменом, но я незнать, что это такое.
Сохранение - отправляет правильную ориентацию
Для сохранения URL-адрес отправляется в мою функцию сохранения.assetCollection является PHAssetCollection.Происходит запрос PHAssetCollectionChangeRequest и видео сохраняется.
func save(URL: URL, completion : @escaping () -> ()) {
if assetCollection == nil {
print("error upstream. save skipped")
return // if there was an error upstream, skip the save
}
PHPhotoLibrary.shared().performChanges({
print("saving")
let assetChangeRequest = PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: URL)
let assetPlaceHolder = assetChangeRequest?.placeholderForCreatedAsset
let albumChangeRequest = PHAssetCollectionChangeRequest(for: self.assetCollection)
let enumeration: NSArray = [assetPlaceHolder!]
if self.assetCollection.estimatedAssetCount == 0
{
albumChangeRequest!.addAssets(enumeration)
}
else {
albumChangeRequest!.insertAssets(enumeration, at: [0])
}
}, completionHandler: { status , error in
completion( )
})
}
Общий доступ - отправка неверной ориентации
При совместном использовании с другими приложениями NSData из URL-адреса видео(self.fileURL) записывается в путь к файлу, где создается новый URL-адрес и помещается в массив objectsToShare.
let urlData = NSData(contentsOf: self.fileURL)
if urlData != nil {
let paths:[String] = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
let docDirectory:String = paths[0]
let filePath:String = "\(docDirectory)/tmpVideo.mp4"
urlData?.write(toFile: filePath, atomically: true)
let videoLink = NSURL(fileURLWithPath: filePath)
let objectsToShare:[NSURL] = [videoLink]
let activity: UIActivityViewController = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)
DispatchQueue.main.async {
UIApplication.topViewController?.present(activity, animated: true, completion: nil)
}
}
Сохраняет ли PHPhotoLibrary преобразования ориентации, сделанные в видео, в то время как совместное использование - нет?Как я могу заставить его вести себя одинаково при совместном использовании?
Так же, как примечание, я также попытался сохранить видео в моей библиотеке фотографий, а затем выбрать видео из моей библиотеки в другом приложении и отправить, иориентация правильная.Только отправляет вверх дном с моим кодом обмена.
Как видео хранится временно, чтобы сохранить или поделиться позже:
Сначала я использую временный каталог.Это для предварительного просмотра видео перед сохранением или обменом.Здесь «url» - это место, где я экспортирую свое видео, которое позже используется функциями сохранения или обмена.
let tempDir = NSTemporaryDirectory()
let url = NSURL(fileURLWithPath: tempDir).appendingPathComponent("tmpMov.mov")