Ios 如何使用AVPlayer播放数据类型视频?

Ios 如何使用AVPlayer播放数据类型视频?,ios,swift,avplayer,Ios,Swift,Avplayer,我试图播放视频后,我从远程下载使用以下代码 let player = AVPlayer(url: URL(dataRepresentation: VideoService.instance.videoInfoArray[0].video, relativeTo: nil)!) let playerController = AVPlayerViewController() playerController.player = player present(playerController, anim

我试图播放视频后,我从远程下载使用以下代码

let player = AVPlayer(url: URL(dataRepresentation: VideoService.instance.videoInfoArray[0].video, relativeTo: nil)!)
let playerController = AVPlayerViewController()
playerController.player = player
present(playerController, animated: true) {
player.play()
}
我的VideoService类是单例类,视频变量类型是
Data()
。然而,当我尝试用下面的代码播放视频时,它不起作用。如何使用data Representation播放视频

根据初始值设定项
init?(dataRepresentation:relativeTo:IsaSolute:)
接受
数据
参数,是的,但该数据应该是URL字符串的ASCII表示,而不是您想要播放的实际数据

您需要做的是将视频数据保存到文件中,并使用文件的URL初始化
AVPlayer

guard let url = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)?.first else { return }
url.appendPathComponent("video.mpeg") // or whatever extension the video is
VideoService.instance.videoInfoArray[0].video.write(to: url) // assuming video is of Data type
let player = AVPlayer(url: url)
// other stuff with the player
要确定播放机无法播放您的文件的原因,请使用。如果观察到对
AVPlayer.Status.failed
的更改,则可以检查播放机的
error
属性以查看本地化原因和错误代码

var playerStatusContext = 0
player.addObserver(player, forKeyPath: "status", options: [.new, .initial], context: &playerStatusContext)

// (...)

override func observeValue(forKeyPath keyPath: String?,
                       of object: Any?,
                       change: [NSKeyValueChangeKey : Any]?,
                       context: UnsafeMutableRawPointer?) {

    // Only handle observations for the playerItemContext
    guard context == &playerStatusContext else {
        super.observeValue(forKeyPath: keyPath,
                           of: object,
                           change: change,
                           context: context)
        return
    }

    if keyPath == #keyPath(AVPlayer.status) {
        let status: AVPlayer.Status
        if let statusNumber = change?[.newKey] as? NSNumber {
            status = AVPlayer.Status(rawValue: statusNumber.intValue)!
        } else {
            status = .unknown
        }

        if status == .failed {
            print(player.error)
        }
    }
}

感谢现在它是工作,我添加了不必要的文件路径,但现在它是确定的。然而,若我想将视频保存到核心数据中,那个么将路径保存到核心数据中就足够了吗?