我正在尝试播放本地视频文件并继续获取以下日志:
[framework] CUICatalog:提供的资产名称无效:'(null)'
我的视频文件位于项目目录中,也位于主捆绑资源中。我尝试了多种语法版本来播放视频。这是我现在在测试项目中的代码:
@IBAction func buttonAction(_ sender: Any) {
if let path = Bundle.main.path(forResource: "slipMovement", ofType:
"mp4") {
let video = AVPlayer(url: URL(fileURLWithPath: path))
let videoPlayer = AVPlayerViewController()
videoPlayer.player = video
present(videoPlayer, animated: true, completion: {
video.play()
})
}
}
当我使用AVplayer和PlayerLayer时,我没有收到'null'消息。它只发生在我使用AVPlayerViewController时。
我对编程很新,任何帮助都会非常感激,因为我在网上找不到合适的解决方案。
从AWS S3播放下载的文件时遇到了同样的问题。
我没有解释错误消息背后的含义。 但在我的情况下,这是因为该文件实际上不可播放。
我没有使用Bundle
。
我把文件放在Documents目录下,然后使用FileManager
来设置路径:
let documentsUrl: URL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let localFileName: String = "recording.mp4"
let localFileUrl = documentsUrl.appendingPathComponent(localFileName)
print("Playing \(localFileUrl.absoluteString)")
这会打印出这样的东西:
file:///var/mobile/Containers/Data/Application/D8AF92BD-D736-4B86-9FF4-C60ABA6C741B/Documents/recording.mp4
为此,我想检查文件存储在设备上时的实际内容。 事实证明该文件已“损坏”(例如复制/下载中断),因此它确实无法播放。
AVPlayer
要查看支持的AVPlayer格式,请使用print(AVURLAsset.audiovisualTypes())
。
参考: https://developer.apple.com/documentation/avfoundation/avurlasset/1386800-audiovisualtypes
一旦路径,文件和格式都正常,我就可以使用AVPlayer
和AVPlayerViewController
正常播放。
let player = AVPlayer(url: localFileUrl)
let playerViewController = AVPlayerViewController()
playerViewController.player = player
self.present(playerViewController, animated: true) {
playerViewController.player!.play()
}