【问题标题】:Upload a video to firebase using Swift使用 Swift 将视频上传到 firebase
【发布时间】:2020-12-19 04:06:48
【问题描述】:

我正在尝试从相机胶卷中挑选一个视频,然后将该视频上传到 Firebase 存储。到目前为止,我可以选择一个视频,但它没有上传到 firebase,我该如何将它上传到 firebase 存储?

func uploadVideoToDB(url: URL){
        let storageReference = Storage.storage().reference().child("video.mov")
        storageReference.putFile(from: url)

}

func fetchVideos(section: Int){
        imagePickerController.sourceType = .photoLibrary
        imagePickerController.delegate = self
        imagePickerController.mediaTypes = ["public.movie"]

        present(imagePickerController, animated: true, completion: nil)
    }
    
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]){
    
        let url = info[UIImagePickerController.InfoKey(rawValue: "UIImagePickerControllerReferenceURL")] as? NSURL
        DataService.instance.uploadVideoToDB(url: url! as URL)
        
        imagePickerController.dismiss(animated: true, completion: nil)
        
    }

【问题讨论】:

    标签: ios swift firebase firebase-storage


    【解决方案1】:

    调用此函数将视频上传到 Firebase 存储

    func uploadTOFireBaseVideo(url: URL,
                                      success : @escaping (String) -> Void,
                                      failure : @escaping (Error) -> Void) {
    
        let name = "\(Int(Date().timeIntervalSince1970)).mp4"
        let path = NSTemporaryDirectory() + name
    
        let dispatchgroup = DispatchGroup()
    
        dispatchgroup.enter()
    
        let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
        let outputurl = documentsURL.appendingPathComponent(name)
        var ur = outputurl
        self.convertVideo(toMPEG4FormatForVideo: url as URL, outputURL: outputurl) { (session) in
    
            ur = session.outputURL!
            dispatchgroup.leave()
    
        }
        dispatchgroup.wait()
    
        let data = NSData(contentsOf: ur as URL)
    
        do {
    
            try data?.write(to: URL(fileURLWithPath: path), options: .atomic)
    
        } catch {
    
            print(error)
        }
    
        let storageRef = Storage.storage().reference().child("Videos").child(name)
        if let uploadData = data as Data? {
            storageRef.putData(uploadData, metadata: nil
                , completion: { (metadata, error) in
                    if let error = error {
                        failure(error)
                    }else{
                        let strPic:String = (metadata?.downloadURL()?.absoluteString)!
                        success(strPic)
                    }
            })
        }
    }
    

    以下功能将视频转换为 mp4 格式,以便可以在任何设备上观看,无论是 iOS 还是安卓

    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)
        })
    }
    

    【讨论】:

    • 我在这一行Value of type 'StorageMetadata' has no member 'downloadURL' 收到此错误let strPic:String = (metadata?.downloadURL()?.absoluteString)!
    【解决方案2】:

    这就是为我做的:

    需要将url 转换为Data 然后使用putData 而不是putFile

    func uploadVideoToDB(url: URL){
            let filename = UUID().uuidString
            let ref = Storage.storage().reference().child("videos").child("\(filename).mp4")
            do {
                let videoData = try Data(contentsOf: url)
                ref.putData(videoData)
            } catch {
                print(error)
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2020-12-10
      • 2017-10-16
      • 1970-01-01
      • 2017-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-05
      • 1970-01-01
      相关资源
      最近更新 更多