为什么AVURLAsset无法加载文件?

时间:2018-09-27 14:39:01

标签: ios swift avfoundation

好。我有种讨厌的感觉,那就是with会发出柔和的rp声……

我将其基于thisthis

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

我在AV基金会很绿。

我有以下代码:

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 Viewer中播放。

我已经准备好接受一个巴掌拍打,然后是“ ya darn eedjut!”,但是我想知道我应该将哪个“ M”作为“ RTFM”。

1 个答案:

答案 0 :(得分:1)

问题似乎出在这行

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

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

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

希望它能解决。