2016-06-01 10 views
0

パーズバックエンドからダウンロードした動画をストリーミングできないようです。しかし、私はあなたがChromeから再生できますがSafariでは再生できないのでビデオがうまく動作していることを知っています(私は理由はわかりません...)。Parseからダウンロードした後にビデオをストリーミングできない

ローカルデータベースから複数のNSUrlをテストするので、AVPlayerでビデオを再生するコードも正しいです。

問題が発生しているものの、誰も回答がないことを確認した投稿がいくつかあります。事前に

iOS - Can't stream video from Parse Backend

Cant stream video (PFFile) from parse server

おかげで、誰かが私を助けることができるかどうか。

答えて

0

秘密は、PFFIleデータを取得し、適切な拡張子(mov)でローカルに保存し、ローカルファイルをトリミングすることです。 このエントリーをみる[パースサーバーからのビデオ(PFFile)] [2]、2番目のアンサー。

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. 
    } 



} 
のコードです
関連する問題