Недавно я создал свой собственный сервер синтаксического анализа, размещенный на героку, используя 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
Я взял прямую ссылку на мой файл .mp4, расположенный в mongoLab, и обнаружил, что могу воспроизвести его в Google Chrome, но не в Safari или на моем iPhone.
ОБНОВЛЕНИЕ 3
Я обнаружил, что это была проблема с самим API синтаксического анализа и не имела ничего общего с кодом, поскольку мой код отлично работает при использовании оригинального бэкэнда синтаксического анализа (тот, который закрывается) вместо моего собственного сервера синтаксического анализа. В настоящее время у меня нет решения, однако со временем оно должно быть исправлено.