Computer >> Máy Tính >  >> Lập trình >> IOS

Làm cách nào để tải video xuống bằng URL và lưu vào album ảnh bằng Swift?


Để tải xuống video từ URL một cách nhanh chóng, chúng tôi cần thực hiện một vài bước đồng thời lưu ý một số điều.

Những điểm cần lưu ý ở đây là,

  • Chúng tôi sẽ sử dụng internet để tải video xuống, do đó chúng tôi cần cấp quyền cho bảo mật truyền tải Ứng dụng trong Info.plist của chúng tôi

  • Chúng tôi sẽ cần lưu video đã tải xuống vào ứng dụng Ảnh, do đó, cần có quyền đối với ảnh.

  • Video phải luôn được tải xuống ở chế độ nền vì nó có thể ngăn chúng tôi sử dụng ứng dụng nếu được tải xuống ở chế độ nền.

Bây giờ, chúng tôi sẽ sử dụng mã bên dưới để lưu video từ một liên kết ngẫu nhiên trong Thiết bị của chúng tôi. Bạn cần cấp quyền cho ảnh trong khi chạy ứng dụng.

Bây giờ, trước tiên hãy thêm mã sau vào tệp info.plist của bạn.

<key>NSPhotoLibraryUsageDescription</key>
<string>saves</string>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>

Sau đó, bây giờ hãy thêm hàm được hiển thị bên dưới và gọi nó bên trong phương thức viewDidLoad của lớp bạn.

Bây giờ viewDidLoad của bạn sẽ trông giống như -

override func viewDidLoad() {
   super.viewDidLoad()
   self.downloadVideo()
}

Dưới đây là mã cho chức năng tải xuống video.

func downloadVideo() {
   let sampleURL = "https://commondatastorage.googleapis.com/gtv-videosbucket/sample/ElephantsDream.mp4"DispatchQueue.global(qos: .background).async {
      if let url = URL(string: sampleURL), let urlData = NSData(contentsOf: url) {
         let galleryPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0];
         let filePath="\(galleryPath)/nameX.mp4" DispatchQueue.main.async {
            urlData.write(toFile: filePath, atomically: true)
               PHPhotoLibrary.shared().performChanges({
               PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL:
               URL(fileURLWithPath: filePath))
            }) {
               success, error in
               if success {
                  print("Succesfully Saved")
               } else {
                  print(error?.localizedDescription)
               }
            }
         }
      }
   }
}

Vì không có phần tử giao diện người dùng nào khác trên màn hình nên không mong đợi thấy bất kỳ kết quả nào trên màn hình, chỉ các câu lệnh in sẽ được hiển thị ở đầu ra và nếu thực hiện thành công, video sẽ được lưu vào ảnh có thể xem được trong ứng dụng Ảnh .