Сохранение видео для разбора и воспроизведения

Итак, я использую этот пользовательский класс для записи своего видео — https://github.com/piemonte/PBJVision. Я пытаюсь записать видео в своем приложении для iOS, и мне не удается получить правильный код для загрузки файла на мой сервер синтаксического анализа. Несколько вещей:

  • В классе PBJVision он позволяет использовать NSURL(fileWithPath:videoPath) для доступа к активу после того, как видео было записано.

  • Чтобы получить доступ к данным в активе и сохранить их в Parse, я использую следующую функцию:

     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()
                }
            }
        }
    }
    

    }

Затем я использую UITableView для отображения моих данных из Parse. Вот как я возвращаю свой актив из Parse в свой AVPlayer(): // Создаем проигрыватель для реакции 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()

Я копирую значение, возвращаемое из urlFromParse, которое имеет вид (http://parlayapp.herokuapp.com/parse/files/smTrXDGZhlYQGh4BZcVvmZ2rYB9kA5EhPkGbj2R2/58c0648ae4ca9900f2d835feb77f165e_file.mp4) и вставьте его в свой браузер, и видео воспроизводится в браузере. Правильно ли я предполагаю, что файл был сохранен правильно?

Когда я запускаю свое приложение, видео не воспроизводится. Любое предложение о том, что я делаю неправильно?


person Michael Westbrooks II    schedule 10.04.2016    source источник
comment
Вы можете получить локальный файл для воспроизведения в своем приложении, просто чтобы убедиться, что часть вашего кода в порядке?   -  person DogCoffee    schedule 10.04.2016
comment
Я использовал ссылку для тестирования носителя в таблице, и это сработало. Я использовал следующую ссылку: let videoUrl = NSURL(string: v .cdn.vine.co/r/videos/)!   -  person Michael Westbrooks II    schedule 10.04.2016
comment
Таким образом, фактическое воспроизведение видео в порядке (как видно из теста), а ссылка, которую вы получаете в результате синтаксического анализа, работает, когда вы вставляете ее в браузер... хитрая. PS у тебя разбор уходит через несколько месяцев?   -  person DogCoffee    schedule 11.04.2016


Ответы (1)


Я обнаружил, что воспроизведение видео с использованием pfFile.url не работает. Вы должны записать NSData из PFFIle в локальный файл, используя правильное расширение (mov), а затем воспроизвести видео, используя локальный файл в качестве источника.

person lguerra10    schedule 11.06.2016
comment
Это то, что я тоже в итоге сделал. - person Michael Westbrooks II; 14.06.2016