在上传到服务器之前压缩视频和图像

iPh*_*e 7 4 iphone video upload ios swift

将图像和视频一起上传到服务器。用户最多可以选择 5 个图像和 5 个视频。所以需要在上传前减小视频和图片的大小。请指导。下面是我正在尝试的。对图像做了一些事情,但不知道视频压缩。

// images

if  let imageData1 = UIImageJPEGRepresentation(User.sharedInstance.arrRoomGalleryImages.objectAtIndex(index) as! UIImage, 0.6) {              
    multipartFormData.appendBodyPart(data: imageData1, name: "image_path[]", fileName: strImgName, mimeType: "image/png")
}
Run Code Online (Sandbox Code Playgroud)

// 视频

let strVidName = "vid" + String(index) // + ".mov"

multipartFormData.appendBodyPart(data: User.sharedInstance.arrRoomGalleryVideos.objectAtIndex(index) as! NSData, name: "video_path[]", fileName: strVidName, mimeType: "application/octet-stream")
Run Code Online (Sandbox Code Playgroud)

Jor*_*rez 5

在将视频上传到服务器之前,您可以将每个原始 .mov 文件转换为 .mp4 压缩文件。以下是 SWIFT 3 中的方法:

首先,创建这个封装压缩过程的函数。请注意,压缩文件是一项异步任务:

func compressVideo(inputURL: URL, outputURL: URL, handler:@escaping (_ exportSession: AVAssetExportSession?)-> Void) {
                let urlAsset = AVURLAsset(url: inputURL, options: nil)
                guard let exportSession = AVAssetExportSession(asset: urlAsset, presetName: AVAssetExportPresetMediumQuality) else {
                    handler(nil)
                    return
                }

                exportSession.outputURL = outputURL
                exportSession.outputFileType = AVFileTypeMPEG4 //AVFileTypeQuickTimeMovie (m4v)
                exportSession.shouldOptimizeForNetworkUse = true
                exportSession.exportAsynchronously { () -> Void in
                    handler(exportSession)
                }
            }
Run Code Online (Sandbox Code Playgroud)

现在您可以这样使用 compressVideo:

// Put in fileURL the URL of the original .mov video
let compressedURL = NSURL.fileURL(withPath: NSTemporaryDirectory() + NSUUID().uuidString + ".mp4")
let compressedFileData : Data? =  nil

// Encode to mp4
compressVideo(inputURL: fileURL, outputURL: compressedURL, handler: { (_ exportSession: AVAssetExportSession?) -> Void in

    switch exportSession!.status {
        case .completed:

        print("Video compressed successfully")
        do {
            compressedFileData = try Data(contentsOf: exportSession!.outputURL!)
            // Call upload function here using compressedFileData
        } catch _ {
            print ("Error converting compressed file to Data")
        }

        default:
            print("Could not compress video")
    }
} )
Run Code Online (Sandbox Code Playgroud)

现在您可以像往常一样将压缩文件数据上传为多部分“图像/mp4”文件

  • 这是用于转换为 mp4 而不是视频压缩。答案下次应该会更清楚。 (2认同)