swift - 从 Parse 下载后无法流式传输视频

标签 swift video parse-platform

从 Parse 后端下载视频后,我似乎无法流式传输视频。不过我知道这些视频运行良好,因为您可以从 Chrome 播放它,但不能从 Safari 播放(我不知道为什么......)。

我在 AVPlayer 上播放视频的代码也是正确的,因为我从本地数据库测试了多个 NSUrl。

有关它的几篇帖子证实存在问题,但没有人给出答案。

iOS - Can't stream video from Parse Backend

Cant stream video (PFFile) from parse server

如果有人可以帮助我,请提前致谢。

最佳答案

secret 是获取 PFFIle 数据,使用适当的扩展名 (mov) 将其保存在本地并处理本地文件。 查看此条目 [无法从解析服务器流视频 (PFFile)][1],第二个答案。

PFFIle 是使用以下代码创建的:

let videoPath = info[UIImagePickerControllerMediaURL] as! NSURL


      let imageData = NSData (contentsOfURL:videoPath)! as NSData

            do  {

              let file = try PFFile(name: "_mov", data: imageData, contentType: "video/quicktime")
              videoSaveSelected(file )
            } catch let error as NSError {
              print("Error generating PFFile: \(error)")
            }

这是播放器的代码

import UIKit
import AVKit
import MobileCoreServices
import AssetsLibrary
import AVFoundation
import Parse
import ParseUI

class VideoPlayerViewController: UIViewController {

  var videoUrl: NSURL!
  var file: PFFile!

    override func viewDidLoad() {
        super.viewDidLoad()


      // navigation
      let backButtonCustom = UIButton( frame: CGRectMake(0, 0, 22, 22))
      let backIcon = UIImage(named: "0836-arrow-left")?.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate)
      backButtonCustom.setImage(backIcon, forState: UIControlState.Normal)
      backButtonCustom.addTarget(self, action: #selector(ReqDataEntryLgViewController.doneButtonTapped), forControlEvents: UIControlEvents.TouchUpInside)
      navigationItem.leftBarButtonItem = UIBarButtonItem(customView: backButtonCustom)

      let doneButton = UIBarButtonItem(title: "Done", style: .Done, target: self, action: #selector(ReqDataEntryLgViewController.doneButtonTapped))
      self.navigationItem.setRightBarButtonItems([doneButton], animated: true)




      // video player

      let playerController = AVPlayerViewController()

      self.addChildViewController(playerController)
      self.view.addSubview(playerController.view)
      playerController.view.frame = self.view.frame

      // get data from PFFile in database
      file!.getDataInBackgroundWithBlock({
        (movieData: NSData?, error: NSError?) -> Void in
        if (error == nil) {

                    let documentsPath : AnyObject = NSSearchPathForDirectoriesInDomains(.DocumentDirectory,.UserDomainMask,true)[0]
          let destinationPath:NSString = documentsPath.stringByAppendingString("/file.mov")

          let filemanager = NSFileManager.defaultManager()
          do {
             try filemanager.removeItemAtPath(destinationPath as String)
          } catch  {
            print("Ooops! Something went wrong: \(error)")
          }

          // write to local file
          movieData!.writeToFile ( destinationPath as String, atomically:true)

//          do {
//            let attr : NSDictionary? = try NSFileManager.defaultManager().attributesOfItemAtPath(destinationPath as String)
//            
//            if let _attr = attr {
//              let fileSize = _attr.fileSize()
//              print ("Movie Size \(fileSize)" )
//            }
//          } catch {
//            print("Ooops! Something went wrong getting size: \(error)")
//          }

          let playerItem = AVPlayerItem(asset: AVAsset(URL: NSURL(fileURLWithPath: destinationPath as String)))
          let player = AVPlayer(playerItem: playerItem)
          playerController.player = player
          player.play()
        } else {
          print ("error on getting movie data \(error?.localizedDescription)")
        }
      })




  }


  func doneButtonTapped(){

    navigationController?.popViewControllerAnimated(true)
  }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }



}

关于swift - 从 Parse 下载后无法流式传输视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37563171/

相关文章:

swift - 设置通知观察者的替代方法(使用选择器)

Swift Firebase UISearchController 索引超出范围

java - Android - 添加视频广告到应用程序

android - 带有视频源的 HTML5 Canvas drawImage 不适用于 Android

ios - 谁能帮助我理解为什么我的 PFUser 子类在 save() 上崩溃?

objective-c - 解析查询包含非精确字符串

ios - 尝试分配除自身以外的委托(delegate)时出现解析错误

ios - 如何仅在选择休息选项卡栏项目上显示选项卡栏项目的标题,在 Swift 中将没有标题

swift - UIWebView 未在 iOS 10 中加载

java - 当我从一台 PC 有双头或三头时,如何知道分辨率屏幕宽度和高度?