最近,我创建了自己的解析服务器,托管在 heroku 上,使用 mongoLab 来存储我的数据。
我的问题是我将视频保存为解析PFFile
,但是保存后我似乎无法流式传输它。
这是我的确切步骤。
首先,我保存返回的视频UIImagePicker
//Get the video URL
let videoURL = info[UIImagePickerControllerMediaURL] as? NSURL
//Create PFFile with NSData from URL
let data = NSData(contentsOfURL: videoURL!)
videoFile = PFFile(data: data!, contentType: "video/mp4")
//Save PFFile first, then save the PFUser
PFUser.currentUser()?.setObject(videoFile!, forKey: "profileVideo")
videoFile?.saveInBackgroundWithBlock({ (succeeded, error) -> Void in
print("saved video")
PFUser.currentUser()?.saveInBackgroundWithBlock({ (succeeded, error) -> Void in
if succeeded && error == nil {
print("user saved")
//Hide progress bar
UIView.animateWithDuration(0.5, animations: { () -> Void in
self.progressBar.alpha = 0
}, completion: { (bool) -> Void in
self.progressBar.removeFromSuperview()
})
}else{
//Show error if the save failed
let message = error!.localizedDescription
let alert = UIAlertController(title: "Uploading profile picture error!", message: message, preferredStyle: UIAlertControllerStyle.Alert)
let dismiss = UIAlertAction(title: "OK", style: UIAlertActionStyle.Cancel, handler: nil)
alert.addAction(dismiss)
self.presentViewController(alert, animated: true, completion: nil)
}
})
}, progressBlock: { (progress) -> Void in
self.progressBar.setProgress(Float(progress)/100, animated: true)
})
这一切都很好。问题出在我检索PFFile
并尝试流式传输视频时。这是我的代码:
//Get URL from my current user
self.videoFile = PFUser.currentUser()?.objectForKey("profileVideo") as? PFFile
self.profileVideoURL = NSURL(string: (self.videoFile?.url)!)
//Create AVPlayerController
let playerController = AVPlayerViewController()
//Set AVPlayer URL to where the file is stored on the sever
let avPlayer = AVPlayer(URL: self.profileVideoURL)
playerController.player = avPlayer
//Present the playerController
self.presentViewController(playerController, animated: true, completion: { () -> Void in
playerController.player?.play()
})
当我展示时最终发生的事情playerController
是:
为什么在我尝试流式传输视频时会发生这种情况?
任何帮助是极大的赞赏!
更新
我最近尝试使用这行代码播放从不同数据库保存的视频:let videoURL = NSURL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")
这确认是我保存的格式PFFile
导致了错误。
一定是这一行导致错误,因为"video/mp4"
格式可能不正确:videoFile = PFFile(data: data!, contentType: "video/mp4")
更新 2
我获取了位于 mongoLab 上的 .mp4 文件的直接链接,发现我可以在 google chrome 中播放它,但不能在 safari 或我的 iPhone 上播放。
更新 3
我发现这是解析 api 本身的问题,与代码无关,因为我的代码在使用原始解析后端(正在关闭的后端)而不是我的自定义解析服务器时完美运行。我目前没有解决方案,但它应该随着时间的推移得到修复。