【问题标题】:Saving Video to Parse & Playback将视频保存到解析和播放
【发布时间】:2016-07-31 11:53:20
【问题描述】:

所以我正在使用这个自定义类来录制我的视频 -- https://github.com/piemonte/PBJVision。我正在尝试在我的 iOS 应用程序中录制视频,但我似乎无法正确获取代码以将文件上传到我的解析服务器。几件事:

  • 在 PBJVision 类中,它允许您在录制视频后使用 NSURL(fileWithPath:videoPath) 访问资产。

  • 要访问资产中的数据并保存到 Parse,我使用以下函数:

     func vision(vision: PBJVision, capturedVideo videoDict: [NSObject : AnyObject]?, error: NSError?) {
    if error != nil {
        print("Encountered error with video")
        isVideo = false
    } else {
        let currentVideo = videoDict
        let videoPath = currentVideo![PBJVisionVideoPathKey] as! String
        print("The video path is: \(videoPath)")
    
        self.player = Player()
        self.player.delegate = self
        self.player.view.frame = CGRect(x: cameraView.frame.origin.x, y: cameraView.frame.origin.y, width: cameraView.frame.width, height: cameraView.frame.height)
    
        self.player.playbackLoops = true
    
        videoUrl = NSURL(fileURLWithPath: videoPath)
        self.player.setUrl(videoUrl)
    
        self.cameraView.addSubview(self.player.view)
        self.player.playFromBeginning()
        nextButton.hidden = false
        isVideo = true
    
        let contents: NSData?
        do {
            contents = try NSData(contentsOfFile: videoPath, options: NSDataReadingOptions.DataReadingMappedAlways)
        } catch _ {
            contents = nil
        }
    
        print(contents)
    
        let videoObject = PFObject(className: "EventChatroomMessages")
        videoObject.setValue(user, forKey: "user")
        videoObject.setValue("uG7v2KWBQm", forKey: "eventId")
        videoObject.setValue(NSDate(), forKey: "timestamp")
    
        let videoFile: PFFile?
        do {
            videoFile = try PFFile(name: randomAlphaNumericString(26) + ".mp4", data: contents!, contentType: "video/mp4")
            print("VideoFile: \(videoFile)")
        } catch _ {
            print("error")
        }
    
        print(videoFile)
    
        videoObject.setValue(videoFile, forKey: "image")
        videoObject.saveInBackgroundWithBlock {
            (success: Bool, error: NSError?) -> Void in
            if success == true {
                ProgressHUD.showSuccess("Video Saved.", interaction: false)
                dispatch_async(dispatch_get_main_queue()) {
                    ProgressHUD.dismiss()
                }
            } else {
                ProgressHUD.showError("Error Saving Video.", interaction: false)
                dispatch_async(dispatch_get_main_queue()) {
                    ProgressHUD.dismiss()
                }
            }
        }
    }
    

    }

然后我使用 UITableView 显示来自 Parse 的数据。以下是我如何从 Parse 中检索我的资产并进入我的 AVPlayer(): // 为反应创建播放器 让玩家 = 玩家() player.delegate = 自我 player.view.frame = CGRectMake(0.0, nameLabel.frame.origin.y + nameLabel.frame.size.height + 0.0, self.view.frame.width, 150) player.view.backgroundColor = UIColor.whiteColor()

    let video = message.objectForKey("image") as! PFFile
    let urlFromParse = video.url!
    print(urlFromParse)

    let url = NSURL(fileURLWithPath: video.url!)
    print(url)

    let playerNew = AVPlayer(URL: url!)
    let playerLayer = AVPlayerLayer(player: playerNew)
    playerLayer.frame = CGRectMake(0.0, nameLabel.frame.origin.y + nameLabel.frame.size.height + 0.0, self.view.frame.width, 150)
    cell.layer.addSublayer(playerLayer)
    playerLayer.backgroundColor = UIColor.whiteColor().CGColor
    playerNew.play()

我复制从 urlFromParse 返回的值 (http://parlayapp.herokuapp.com/parse/files/smTrXDGZhlYQGh4BZcVvmZ2rYB9kA5EhPkGbj2R2/58c0648ae4ca9900f2d835feb77f165e_file.mp4) 并将其粘贴到我的浏览器中,然后视频在浏览器中播放。我是否正确假设文件已正确保存?

当我运行我的应用程序时,视频无法播放。关于我做错了什么有什么建议吗?

【问题讨论】:

  • 您能否在您的应用程序中播放一个本地文件,以确保您的代码部分正常?
  • 我使用了一个链接来测试表格中的显示媒体并且它有效。我使用了以下链接: let videoUrl = NSURL(string: "v.cdn.vine.co/r/videos/…)!
  • 所以视频的实际播放很好(如测试中所见),当您粘贴到浏览器中时,您从解析获得的链接有效......棘手的一个。 PS你解析的几个月后就会消失?

标签: swift avplayer avplayerlayer pffile pbjvision


【解决方案1】:

我发现使用 pfFile.url 播放视频不起作用。您必须使用正确的扩展名 (mov) 将 PFFIle 中的 NSData 写入本地文件,然后使用本地文件作为源播放视频。

【讨论】:

  • 这也是我最终做的。
  • 那么,这是否意味着我们必须将视频下载到本地存储并播放,我们不能流式传输视频吗?
猜你喜欢
  • 2022-01-08
  • 1970-01-01
  • 2014-01-03
  • 1970-01-01
  • 2012-05-03
  • 2017-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多