快速下载后如何修改视频格式

时间:2019-01-18 17:47:18

标签: json swift file-manager

从videoplayback下载到mp4并保存到相机后,我在修改视频格式时遇到问题。

这是我的下载代码,但是我下载了一些具有不同格式示例的视频:“ videoplayback”。我无法保存到相机,因为我想将视频格式更改为mp4。

enter image description here

func SessionDownload(URLSession : String) {
    MBProgressHUD.hideAllHUDs(for: view, animated: true)

    let hud =  MBProgressHUD.showAdded(to: self.view, animated: true)
    // Set the bar determinate mode to show task progress.
    progress = 0.0
    hud?.mode = MBProgressHUDMode.determinateHorizontalBar
    hud?.isUserInteractionEnabled = true;
    hud?.labelText = NSLocalizedString("Downloading...", comment: "HUD loading title")
    DispatchQueue.global(qos: .default).async(execute: {() -> Void in
        // Do something useful in the background and update the HUD periodically.
        self.doSomeWorkWithProgress()
        DispatchQueue.main.async(execute: {() -> Void in
            //hud?.hide(true)
            hud?.labelText = NSLocalizedString("Just Wait...", comment: "HUD loading title")
        })
    })



    let videoPath = URLSession
    print(videoPath)

    let s = videoPath
    let url = NSURL(string:s)!
    let req = NSMutableURLRequest(url:url as URL)
    let config = URLSessionConfiguration.default
    let task = self.session.downloadTask(with: req as URLRequest)
    self.task = task
    task.resume()

}

//MARK:- share video
func doSomeWorkWithProgress() {
    // This just increases the progress indicator in a loop.
    while progress < 1.0 {
        DispatchQueue.main.async(execute: {() -> Void in

            print(self.progress)
            MBProgressHUD(for: self.view).progress = self.progress
        })
        usleep(50000)
    }
}

//MARK:- URL Session delegat
func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) {
    print("downloaded \(100*totalBytesWritten/totalBytesExpectedToWrite)")
    taskTotalBytesWritten = Int(totalBytesWritten)
    taskTotalBytesExpectedToWrite = Int(totalBytesExpectedToWrite)
    percentageWritten = Float(taskTotalBytesWritten) / Float(taskTotalBytesExpectedToWrite)
    print(percentageWritten)

    let x = String(format:"%.2f", percentageWritten)
    print(x)
    self.progress = Float(x)!
    print(progress)

}

func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didResumeAtOffset fileOffset: Int64, expectedTotalBytes: Int64) {
    // unused in this example
}

func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
    print("completed: error: \(error)")
}

func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) {
    print("Finished downloading!")
    let fileManager = FileManager()
    // this can be a class variable
    let directoryURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]


    print(directoryURL)
    let docDirectoryURL = NSURL(fileURLWithPath: "\(directoryURL)")
    print(docDirectoryURL)


    //Save To Photos
    PHPhotoLibrary.shared().performChanges({
        PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL:directoryURL)
    }) { saved, error in
        if saved {
            let alertController = UIAlertController(title: "Your video was successfully saved", message: nil, preferredStyle: .alert)
            let defaultAction = UIAlertAction(title: "OK", style: .default, handler: nil)
            alertController.addAction(defaultAction)
            self.present(alertController, animated: true, completion: nil)
        }
    }



    let destinationFilename = downloadTask.originalRequest?.url?.lastPathComponent
    print(destinationFilename!)
    // append that to your base directory
    let destinationURL =  docDirectoryURL.appendingPathComponent("\(destinationFilename!)")
    print(destinationURL!)
    /* check if the file exists, if so remove it. */
    if let path = destinationURL?.path {
        if fileManager.fileExists(atPath: path) {
            do {
                try fileManager.removeItem(at: destinationURL!)

            } catch let error as NSError {
                print(error.debugDescription)
            }

        }
    }

    do
    {
        try fileManager.copyItem(at: location, to: destinationURL!)
    }
    catch {
        print("Error while copy file")

    }
    DispatchQueue.main.async(execute: {() -> Void in
        MBProgressHUD.hide(for: self.view, animated: true)
    })
    // let videoLink = NSURL(fileURLWithPath: filePath)
    let objectsToShare = [destinationURL!] //comment!, imageData!, myWebsite!]
    let activityVC = UIActivityViewController(activityItems: objectsToShare , applicationActivities: nil)
    activityVC.setValue("Video", forKey: "subject")
    //New Excluded Activities Code
    if #available(iOS 9.0, *) {
        activityVC.excludedActivityTypes = [UIActivity.ActivityType.airDrop, UIActivity.ActivityType.addToReadingList, UIActivity.ActivityType.assignToContact, UIActivity.ActivityType.copyToPasteboard, UIActivity.ActivityType.mail, UIActivity.ActivityType.message, UIActivity.ActivityType.openInIBooks, UIActivity.ActivityType.postToTencentWeibo, UIActivity.ActivityType.postToVimeo, UIActivity.ActivityType.postToWeibo, UIActivity.ActivityType.print]
    } else {
        // Fallback on earlier versions
        activityVC.excludedActivityTypes = [UIActivity.ActivityType.airDrop, UIActivity.ActivityType.addToReadingList, UIActivity.ActivityType.assignToContact, UIActivity.ActivityType.copyToPasteboard, UIActivity.ActivityType.mail, UIActivity.ActivityType.message, UIActivity.ActivityType.postToTencentWeibo, UIActivity.ActivityType.postToVimeo, UIActivity.ActivityType.postToWeibo, UIActivity.ActivityType.print ]
    }
    if let popoverController = activityVC.popoverPresentationController {
        popoverController.sourceView = self.BtnDownloadVideo
        popoverController.sourceRect = self.BtnDownloadVideo.bounds

    }
    self.present(activityVC, animated: true, completion: nil)
}

1 个答案:

答案 0 :(得分:0)

我假设当您从Internet下载文件时,确定要在这种情况下下载视频吗?而您真正想要的只是更改格式,即PathExtension,例如.mp4,.png,jpeg等。

如果是这种情况,则可以将文件扩展名添加到路径组件上。

let destinationURL = docDirectoryURL.appendingPathComponent("\(destinationFilename!)").appendingPathExtension("mp4")

现在,当您检查保存的文件时,它将包含“ .mp4”

同样,我假设您有110%的信心从互联网上下载“ .mp4”。