为什么共享视频仅向其他一些应用发送?

问题描述 投票:0回答:1

我使用Swift 4的iOS应用程序可以保存或分享从前置或后置摄像头拍摄的视频。在我拍摄自拍视频,使用前置摄像头并将视频分享到另一个应用程序的情况下,即使它以正确的方向保存,它也会将其上下颠倒。据我所知,在保存或发送之前,所有必要的转换都会发生。

更新 - 我发现视频显示翻转共享到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( )
    })
}

共享 - 发送错误的方向

共享到其他应用程序时,视频URL(self.fileURL)中的NSData将写入文件路径,在该文件路径中创建新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")
ios swift video file-sharing phphotolibrary
1个回答
2
投票

一些相机传说可能会解释你的问题

所有相机都会颠倒拍摄图像。这是由于光线如何进入镜头并撞击传感器(exhibit 1)。因此,您会发现将视频保存到您的照片库,因为PHAsset可能会将图片(不是您理论上的保留)转换为正确的方向。您没有显示捕获视频的代码,但您可能会发现它是一个原始捕获,并且您不对其进行处理,因此它被反转。

© www.soinside.com 2019 - 2024. All rights reserved.