2016-04-10 10 views
1

So verwende ich diese benutzerdefinierte Klasse, um mein Video aufzunehmen - https://github.com/piemonte/PBJVision. Ich versuche, Videos in meiner iOS-App aufzuzeichnen, und ich kann nicht den richtigen Code zum Hochladen der Datei auf meinen Parse-Server erhalten. Ein paar Dinge:Speichern von Video zu analysieren und Wiedergabe

  • In der PBJVision Klasse ermöglicht es Ihnen, NSURL zu verwenden (fileWithPath: videoPath) für den Zugriff auf den Vermögenswert, nachdem das Video aufgezeichnet wurde.

  • Um die Daten in der Asset-Zugriff und Parse speichern zu, verwende ich die folgende Funktion:

    func vision(vision: PBJVision, capturedVideo videoDict: [NSObject : AnyObject]?, error: NSError?) { 
    if error != nil { 
        print("Encountered error with video") 
        isVideo = false 
    } else { 
        let currentVideo = videoDict 
        let videoPath = currentVideo![PBJVisionVideoPathKey] as! String 
        print("The video path is: \(videoPath)") 
    
        self.player = Player() 
        self.player.delegate = self 
        self.player.view.frame = CGRect(x: cameraView.frame.origin.x, y: cameraView.frame.origin.y, width: cameraView.frame.width, height: cameraView.frame.height) 
    
        self.player.playbackLoops = true 
    
        videoUrl = NSURL(fileURLWithPath: videoPath) 
        self.player.setUrl(videoUrl) 
    
        self.cameraView.addSubview(self.player.view) 
        self.player.playFromBeginning() 
        nextButton.hidden = false 
        isVideo = true 
    
        let contents: NSData? 
        do { 
         contents = try NSData(contentsOfFile: videoPath, options: NSDataReadingOptions.DataReadingMappedAlways) 
        } catch _ { 
         contents = nil 
        } 
    
        print(contents) 
    
        let videoObject = PFObject(className: "EventChatroomMessages") 
        videoObject.setValue(user, forKey: "user") 
        videoObject.setValue("uG7v2KWBQm", forKey: "eventId") 
        videoObject.setValue(NSDate(), forKey: "timestamp") 
    
        let videoFile: PFFile? 
        do { 
         videoFile = try PFFile(name: randomAlphaNumericString(26) + ".mp4", data: contents!, contentType: "video/mp4") 
         print("VideoFile: \(videoFile)") 
        } catch _ { 
         print("error") 
        } 
    
        print(videoFile) 
    
        videoObject.setValue(videoFile, forKey: "image") 
        videoObject.saveInBackgroundWithBlock { 
         (success: Bool, error: NSError?) -> Void in 
         if success == true { 
          ProgressHUD.showSuccess("Video Saved.", interaction: false) 
          dispatch_async(dispatch_get_main_queue()) { 
           ProgressHUD.dismiss() 
          } 
         } else { 
          ProgressHUD.showError("Error Saving Video.", interaction: false) 
          dispatch_async(dispatch_get_main_queue()) { 
           ProgressHUD.dismiss() 
          } 
         } 
        } 
    } 
    

    }

mich dann einen UITableView mit meinen Daten von Parse anzuzeigen . Hier ist, wie ich mein Asset zurück von Parse und in meinem AVPlayer(): // Create Player für Reaktion let player = Player() player.delegate = self player.view.frame = CGRectMake (0.0, nameLabel. frame.origin.y nameLabel.frame.size.height + + 0,0, self.view.frame.width, 150) player.view.backgroundColor = UIColor.whiteColor()

let video = message.objectForKey("image") as! PFFile 
    let urlFromParse = video.url! 
    print(urlFromParse) 

    let url = NSURL(fileURLWithPath: video.url!) 
    print(url) 

    let playerNew = AVPlayer(URL: url!) 
    let playerLayer = AVPlayerLayer(player: playerNew) 
    playerLayer.frame = CGRectMake(0.0, nameLabel.frame.origin.y + nameLabel.frame.size.height + 0.0, self.view.frame.width, 150) 
    cell.layer.addSublayer(playerLayer) 
    playerLayer.backgroundColor = UIColor.whiteColor().CGColor 
    playerNew.play() 

I kopiert den Wert, der wird von urlFromParse zurückgegeben, das ist (http://parlayapp.herokuapp.com/parse/files/smTrXDGZhlYQGh4BZcVvmZ2rYB9kA5EhPkGbj2R2/58c0648ae4ca9900f2d835feb77f165e_file.mp4) und fügen Sie es in meinen Browser ein und das Video wird im Browser abgespielt. Darf ich annehmen, dass die Datei korrekt gespeichert wurde?

Wenn ich meine App laufen lasse, wird das Video nicht abgespielt.Ein Vorschlag, was ich falsch mache?

+0

Können Sie eine lokale Datei in Ihrer App abspielen, um sicherzustellen, dass ein Teil Ihres Codes in Ordnung ist? – DogCoffee

+0

Ich habe einen Link verwendet, um das Anzeigemedium in der Tabelle zu testen, und es hat funktioniert. Ich benutzte den folgenden Link: lassen Sie VideoUrl = NSURL (String: "https://v.cdn.vine.co/r/videos/AA3C120C521177175800441692160_38f2cbd1ffb.1.5.13763579289575020226.mp4")! –

+0

So ist die tatsächliche Wiedergabe eines Videos in Ordnung (wie im Test zu sehen), und der Link, den Sie von Parse erhalten, funktioniert, wenn Sie in einen Browser einfügen ... knifflig. PS du parsest in ein paar Monaten weg? – DogCoffee

Antwort

0

Ich habe festgestellt, dass das Abspielen von Videos mit der pfFile.url nicht funktioniert. Sie müssen die NSData von der PFFIle in eine lokale Datei mit der rechten Erweiterung (mov) schreiben und dann das Video mit der lokalen Datei als Quelle wiedergeben.

+0

Das habe ich auch gemacht. –