iOS - Can't stream video from Parse Backend -


recently have created own parse server hosted on heroku using mongolab store data.

my problem saving video parse pffile, can not seem able stream after saving it.

here exact steps.

first, save video returned uiimagepicker

//get video url let videourl = info[uiimagepickercontrollermediaurl] as? nsurl  //create pffile nsdata url let data = nsdata(contentsofurl: videourl!) videofile = pffile(data: data!, contenttype: "video/mp4")  //save pffile first, save 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 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)             }) 

this works well. problem lies when retrieve pffile , try stream video. here code that:

//get url 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 file stored on sever let avplayer = avplayer(url: self.profilevideourl) playercontroller.player = avplayer  //present playercontroller self.presentviewcontroller(playercontroller, animated: true, completion: { () -> void in  playercontroller.player?.play() }) 

what ends happening when present playercontroller this:

enter image description here

why happening when try stream video?

any appreciated!

update

i have tried playing video saved different database using line of code: let videourl = nsurl(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")

this confirms format saving pffile in causing error.

it must line causing error "video/mp4" not right format : videofile = pffile(data: data!, contenttype: "video/mp4")

update 2

i have taken direct link of .mp4 file located on mongolab , found can play in google chrome, not on safari or iphone.

update 3

i have found issue parse api itself, , had nothing code code works when using original parse backend (the 1 closing down) instead of custom parse server. have no solution should fixed on time.

this code works me

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 string, atomically:true)             let playeritem = avplayeritem(asset: avasset(url: nsurl(fileurlwithpath: destinationpath string)))           let player = avplayer(playeritem: playeritem)           playercontroller.player = player           player.play()         } else {           print ("error on getting movie data \(error?.localizeddescription)")         }       }) 

Comments

Popular posts from this blog

sublimetext3 - what keyboard shortcut is to comment/uncomment for this script tag in sublime -

java - No use of nillable="0" in SOAP Webservice -

ubuntu - Laravel 5.2 quickstart guide gives Not Found Error -