Kürzlich habe ich meinen eigenen Parse-Server erstellt, der auf Heroku gehostet wird, indem ich mongoLab verwende, um meine Daten zu speichern.iOS - Video kann nicht von Parse Backend gestreamt werden
Mein Problem ist, ich speichere ein Video als Parse PFFile
, aber ich kann nicht scheinen, um es nach dem Speichern zu streamen.
Hier sind meine genauen Schritte.
Zuerst speichere ich das Video wieder von 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)
})
Das alles gut funktioniert. Das Problem liegt, wenn ich die PFFile
abrufen und versuchen, das Video zu streamen. Hier ist mein Code dafür:
//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()
})
Was am Ende passiert, wenn ich die playerController
präsentieren, ist dies:
, warum dies geschieht, wenn ich versuche, mein Video streamen?
Jede Hilfe wird sehr geschätzt!
UPDATE
Ich habe vor kurzem versucht haben, ein Video von einer anderen Datenbank mit dieser Codezeile gespeichert spielen: let videoURL = NSURL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")
Dies bestätigt, dass es das Format ich Speichern bin mein PFFile
, dass verursacht der Fehler.
Es muss diese Linie den Fehler verursacht als "video/mp4"
wahrscheinlich nicht das richtige Format ist: videoFile = PFFile(data: data!, contentType: "video/mp4")
UPDATE 2
ich den direkten Link meiner .mp4-Datei auf mongoLab befindet sich genommen haben und gefunden Ich kann es in Google Chrome spielen, aber nicht auf Safari oder meinem iPhone.
UPDATE 3
ich gefunden habe, dass dies ein Problem mit dem Parse-api war selbst, und hatte nichts mit dem Code zu tun, wie mein Code funktioniert perfekt, wenn der Original-Parse-Backend (das, das ist Schließen) anstelle meines benutzerdefinierten Parse-Servers. Ich habe derzeit keine Lösung, aber es sollte im Laufe der Zeit behoben werden.
Ich habe eine ähnliche (gleiche?) Frage. Kannst du etwas über dein drittes Update erfahren? Wurde dies den Betreuern von GH gemeldet? – sbauch
@Josh Dies wurde oft in der GH aber vergeblich gemeldet. Sie würden es einfach als Serverproblem schließen. Einige Leute haben Erfolg gemeldet, indem sie von mLab auf S3 gewechselt haben, aber es gibt andere, die dasselbe Problem von S3 gemeldet haben. Von jetzt an parse Server -heroku- mlaab streamt kein Audio, Videodateien sind das, was wir schließen konnten. Wenn irgendjemand das lösen könnte, sollten wir uns selbst helfen, indem wir die Lösung hier veröffentlichen. Ich denke nicht, dass es von Parse-Mitarbeitern gelöst wird. – Tobio