最近、mongoLab を使用して heroku でホストされる独自の解析サーバーを作成し、データを保存しました。
私の問題は、ビデオを parse として保存している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 では再生できますが、サファリや iPhone では再生できないことがわかりました。
更新 3
これは解析 API 自体の問題であり、カスタム解析サーバーの代わりに元の解析バックエンド (閉じているもの) を使用するとコードが完全に機能するため、コードとは何の関係もないことがわかりました。現在のところ解決策はありませんが、時間の経過とともに修正されるはずです。