Saving video to firestore and getting video url

PHOTO EMBED

Sat Jan 08 2022 09:48:57 GMT+0000 (Coordinated Universal Time)

Saved by @hasnat

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        if let videoUrl = info[UIImagePickerController.InfoKey.mediaURL] as? URL {
            HelperFunction.upload(file: videoUrl)

          self.videoURL = videoUrl
        }
        dismiss(animated: true, completion: nil)
      }

static func upload(file: URL) {
        let name = "\(Int(Date().timeIntervalSince1970)).mp4"
        do {
            let data = try Data(contentsOf: file)
            
            let storageRef =
                Storage.storage().reference().child("Videos").child(name)
            if let uploadData = data as Data? {
                let metaData = StorageMetadata()
                metaData.contentType = "video/mp4"
                storageRef.putData(uploadData, metadata: metaData
                                   , completion: { (metadata, error) in
                                    if let error = error {
                                        print("Error: \(error)")
                                    }else{
                                        storageRef.downloadURL { (url, error) in
                                            guard let downloadURL = url else {
                                                return
                                            }
                                            //                                            completion(downloadURL, nil)
                                            print("Download URL: \(downloadURL)")
                                        }
                                    }
                                   })
            }
        }catch let error {
            print(error.localizedDescription)
        }
    }


///

func convertVideo(toMPEG4FormatForVideo inputURL: URL, outputURL: URL, handler: @escaping (AVAssetExportSession) -> Void) {
        try! FileManager.default.removeItem(at: outputURL as URL)
        let asset = AVURLAsset(url: inputURL as URL, options: nil)

        let exportSession = AVAssetExportSession(asset: asset, presetName: AVAssetExportPresetHighestQuality)!
        exportSession.outputURL = outputURL
        exportSession.outputFileType = .mp4
        exportSession.exportAsynchronously(completionHandler: {
            handler(exportSession)
        })
    }
content_copyCOPY