为什么 AVURLAsset 没有加载文件?

Why is AVURLAsset Not Loading the File?

好的。我有一种不祥的预感,这会被蟋蟀温柔的唧唧声所满足...

我基于 this and this

我真的想知道这是否是一个功能,而不是一个错误,因为在本地加载电影然后播放可能存在安全问题。我认为情况并非如此,但也许吧。需要注意的是,加载的资源来自与服务器的 REST 交互,其中电影数据实际上只是数据查询响应的一部分。它不是直接从视频流页面加载的东西(不过它是 SSL)。

我在 AV Foundation 还很新手。

我有以下代码:

do {
    // We create a path to a unique temporary file to grab the media.
    let url = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(UUID().uuidString)
    // Store the media in the temp file.
    try myData.write(to: url, options: .atomic)
    let options = [AVURLAssetPreferPreciseDurationAndTimingKey: true]
    let asset = AVURLAsset(url: url, options: options)

    if 0 < asset.tracks.count {
        print("YOU GET \(asset.tracks.count) TRACKS!")
    } else {
        print("NO TRACKS FOR YOU!")
    }
} catch let error {
    NSLog("Error Encoding AV Media: %@", error._domain)
}

很基础,嗯? "myData" 变量包含已下载的 MP4 电影 (.m4v)。我将其写入一个临时文件,然后使用 AVURLAsset 加载该临时文件,就像它说的那样。

问题是我永远无法播放 dangblammit 电影。文件在它应该在的地方。我可以找出临时文件,加上“.m4v”扩展名,然后在 QT 查看器中播放它。

我已经准备好接受一个耳光,然后是"ya darn eedjut!",但我想知道我应该"RTFM".

"M" ]

问题似乎出在这一行

let url = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(UUID().uuidString)

您应该为文件添加扩展名。

let videoName = UUID().uuidString + ".mp4"
let url = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(videoName)

希望它能修复。