Ios AVAsset有0个曲目,即使视频存在,并且可以从摄像机滚动播放:故障排除步骤?

Ios AVAsset有0个曲目,即使视频存在,并且可以从摄像机滚动播放:故障排除步骤?,ios,swift,video,avfoundation,Ios,Swift,Video,Avfoundation,我们的应用程序允许用户录制视频并将其保存到他们的摄像机上。但是,我们似乎无法在AVPlayer中播放视频,即使已保存的视频可以从相机卷中很好地播放 由于某些原因,一个有效的视频文件会报告为具有0个曲目 代码: 我们正在测试的视频URL是: file:///var/mobile/Containers/Data/Application/F532DF34-371C-437E-A121-04C532349720/Documents/editedVideo-7325.mp4 从下面的代码和输出中可以看到,

我们的应用程序允许用户录制视频并将其保存到他们的摄像机上。但是,我们似乎无法在AVPlayer中播放视频,即使已保存的视频可以从相机卷中很好地播放

由于某些原因,一个有效的视频文件会报告为具有0个曲目

代码:

我们正在测试的视频URL是:

file:///var/mobile/Containers/Data/Application/F532DF34-371C-437E-A121-04C532349720/Documents/editedVideo-7325.mp4

从下面的代码和输出中可以看到,该文件存在,大小为419498字节

既然文件显然包含内容,为什么曲目会报告为0?除了检查磁道数量,我们还能做些什么来排除故障

func listFiles() {
    let allPaths = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
    let docsPath = allPaths[0] as! NSString
    if let files = NSFileManager.defaultManager().contentsOfDirectoryAtPath(docsPath as String, error: nil) as? [String] {

        println("Found \(files.count) file(s) in \(docsPath):")

        for filename in files {
            let filePath = docsPath.stringByAppendingFormat("/\(filename)") as String
            var attr = NSFileManager.defaultManager().attributesOfItemAtPath(filePath, error: nil)
            if let _attr:NSDictionary = attr {
                let fileSize = _attr.fileSize()
                println("\(filename) @ \(fileSize) bytes")
            }
        }
    }
}


Found 11 file(s) in /var/mobile/Containers/Data/Application/5809B294-8A54-4506-A79A-F19E7C877A4A/Documents:
editedVideo-2252.mp4 @ 732567 bytes
editedVideo-3582.mp4 @ 728485 bytes
editedVideo-5175.mp4 @ 413897 bytes
editedVideo-5366.mp4 @ 607992 bytes
editedVideo-5459.mp4 @ 350652 bytes
editedVideo-622.mp4 @ 763026 bytes
**editedVideo-7325.mp4 @ 419498 bytes**
editedVideo-7428.mp4 @ 858742 bytes
editedVideo-7948.mp4 @ 923791 bytes
editedVideo-8612.mp4 @ 429463 bytes
editedVideo-9363.mp4 @ 511307 bytes

videoUrl
参数未指向正确的文件

在本地引用视频时使用此方法:

    let filename = "yourvideo.mp4"
    let allDirs = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
    let documentsDir = allDirs[0] as! NSString
    let filePath = documentsDir.stringByAppendingPathComponent(filename)
    let fileUrl = NSURL(fileURLWithPath: filePath)
文档
目录路径(例如,/var/mobile/Containers/Data/Application/8BA180AB-2DD9-4FD8-9312-2BF006914561/Documents/)发生了明显变化

您不能期望每次都使用相同的路径,因此不能像我们一样使用完全格式的文件URL字符串,即使是出于测试目的


Documents
目录的父目录(字母数字字符串)发生了变化。

NSURL可以表示两种不同的含义:

  • 您提到的绝对文件路径,即从文件开始://

  • 从设置中获取的URL。您可以通过以下方式获得:

  • NSURL*asseturl=[asset valueForProperty:AlassetPropertyAsetUrl]

    其中“资产”为集合类型

    然后可以使用此URL获取AVAsset,方法是:

    阿瓦塞特

    请尝试第二种方法

        let filename = "yourvideo.mp4"
        let allDirs = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)
        let documentsDir = allDirs[0] as! NSString
        let filePath = documentsDir.stringByAppendingPathComponent(filename)
        let fileUrl = NSURL(fileURLWithPath: filePath)