2017-08-04 34 views
-3

我正在从聊天服务器下载NSData文件,并且我知道这个文件通常是作为视频文件上传的。我想获得这个文件并将其显示为视频Safari。我认为为了做到这一点,我无法将其显示为NSData,是吗?如果没有,我可以让这个文件在我的iPhone中显示的格式是什么?如何将下载的NSData类型转换为在iPhone Swift上播放的视频类型?

所以我开始考虑再次将其转换回一个视频文件,这里是我使用了基于this answer: How to convert video data to NSURL

答案如何解释,我们可以将视频转换为URL用它来打视频稍后。我已经尝试了解决方案并获得了URL。然而,我得到的string类型的url无法在Safari上播放,所以我认为我可能会做错某些事情。我认为这个错误可能来自于我使用编码的方式,因为我不知道该如何放置它。

请注意,filePath是包含NSData文件路径的文件。

  let filePath = self.documentsPathForFileName(name: "video.mov") 


      do { try [videomessage?.url.write(toFile: filePath, atomically: true, encoding: String.Encoding.utf8)]} 
      catch{ 
       print ("error") 
      } 
      let videoFileURL = NSURL(fileURLWithPath: filePath) 

      print (videoFileURL) 

func documentsPathForFileName(name: String) -> String { 

    let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] 
    return documentsPath + name 
} 

回答

0

如果你实际上有Data的形式的视频。所以,它需要先保存并转换。试试这个:

[/*name of NSData*/ writeToFile:/*save file path*/ atomically: YES]; 
NSURL *filepath = [NSURL fileURLWithPath:/*save file path*/]; 
AVPlayerItem *player = [AVPlayerItem playerItemWithURL:filepath]; 

未经测试,但应该工作。

如果你已经有了URL那么你就可以直接播放视频:

func playVideo() { 

     // setup video player 
     let player = AVPlayer(url: videoUrl) 
     let playerViewController = AVPlayerViewController() 
     playerViewController.player = player 

     self.present(playerViewController, animated: true) { 
      playerViewController.player!.play() 
     } 

     // setup autorotate to landscape orientation 
     let value = UIInterfaceOrientation.landscapeRight.rawValue 
     UIDevice.current.setValue(value, forKey: "orientation") 
    } 
相关问题