URL 为什么不能在真实设备上播放视频?

Why doesn't play video in real device by URL?

我正在通过图像选择器控制器选择一个视频,然后将其保存在文档目录中。我已经保存了文件名。然后,当我尝试通过 url 播放此视频时,设备无法播放,但在模拟器中播放效果非常好。

let fm = FileManager.default
let docsurl = try! fm.url(for:.documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
let path = docsurl.appendingPathComponent(contentName[indexPath.row]+extFull)

这里,path=file:///var/mobile/Containers/Data/Application/D9878CE7-0EE5-4F67-8F3F-48772E8BBCCC/Documents/2017-11-28_18:57:25.3620.MOV

那我试试玩这个。代码如下:

playVideo(filePath: path)

var videoPlayer: AVPlayer?
var avPlayerViewController: AVPlayerViewController?
var videoView: UIView!

func playVideo(filePath: URL) {
    self.videoPlayer = AVPlayer(url: filePath)
    self.avPlayerViewController = AVPlayerViewController()
    self.avPlayerViewController?.player = self.videoPlayer

    videoView = UIView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height-53))

    self.view.addSubview(videoView)

    avPlayerViewController?.view.frame = videoView.frame
    self.addChildViewController(avPlayerViewController!)
    self.view.addSubview((avPlayerViewController?.view)!)
}

avPlayerViewController 出现了,但为什么视频无法在设备中播放?

您必须在播放视频前检查文件是否存在于路径

func playVideo(filePath: URL) {

let fileManager = FileManager.default

if fileManager.fileExists(atPath: URL) {
    print("FILE AVAILABLE")
    self.videoPlayer = AVPlayer(url: filePath)
    self.avPlayerViewController = AVPlayerViewController()
    self.avPlayerViewController?.player = self.videoPlayer

    videoView = UIView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height-53))

    self.view.addSubview(videoView)

    avPlayerViewController?.view.frame = videoView.frame
    self.addChildViewController(avPlayerViewController!)
    self.view.addSubview((avPlayerViewController?.view)!)

} else {
    print("FILE NOT AVAILABLE")
}