gpt4 book ai didi

iOS - 无法从 Parse 后端流式传输视频

转载 作者:可可西里 更新时间:2023-11-01 03:58:58 24 4
gpt4 key购买 nike

最近我创建了自己的解析服务器,托管在 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 时最终发生的事情是这样的:

enter image description here

当我尝试流式传输我的视频时,为什么会发生这种情况?

非常感谢任何帮助!

更新

我最近尝试使用这行代码播放从不同数据库保存的视频: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 文件的直接链接,发现我可以在谷歌浏览器中播放它,但不能在 Safari 或我的 iPhone 上播放。

更新 3

我发现这是解析 api 本身的问题,与代码无关,因为当使用原始解析后端(正在关闭的后端)而不是我的自定义解析服务器时,我的代码可以完美运行.我目前没有解决方案,但随着时间的推移应该会得到解决。

最佳答案

这段代码适合我

let playerController = AVPlayerViewController()

self.addChildViewController(playerController)
self.view.addSubview(playerController.view)
playerController.view.frame = self.view.frame

file!.getDataInBackgroundWithBlock({
(movieData: NSData?, error: NSError?) -> Void in
if (error == nil) {

let filemanager = NSFileManager.defaultManager()

let documentsPath : AnyObject = NSSearchPathForDirectoriesInDomains(.DocumentDirectory,.UserDomainMask,true)[0]
let destinationPath:NSString = documentsPath.stringByAppendingString("/file.mov")
movieData!.writeToFile ( destinationPath as String, atomically:true)


let playerItem = AVPlayerItem(asset: AVAsset(URL: NSURL(fileURLWithPath: destinationPath as String)))
let player = AVPlayer(playerItem: playerItem)
playerController.player = player
player.play()
} else {
print ("error on getting movie data \(error?.localizedDescription)")
}
})

关于iOS - 无法从 Parse 后端流式传输视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35235340/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com