代码之家  ›  专栏  ›  技术社区  ›  Chris Marshall

为什么avurlaste没有加载文件?

  •  0
  • Chris Marshall  · 技术社区  · 6 年前

    好 啊。我有一种不愉快的感觉,这将与蟋蟀的温柔啁啾。。。

    this this .

    我想知道这是不是一个功能,而不是一个错误,因为可能有一个安全问题,加载一个电影本地,然后播放它。我想不是这样的,但也许。应该注意,加载的资产来自与服务器的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

    问题是我永远也演不出那部该死的电影。文件就在它应该在的地方。我可以找到临时文件,加上“.m4v”扩展名,然后在QT查看器中播放它。

    我已经准备好接受一记耳光,接着是“你个该死的家伙”,但是我想知道我应该选哪个“M”来“RTFM”。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Bhavin Kansagara    6 年前

    问题似乎出在这条线上

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

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

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