为啥 AVURLAsset 不加载文件?

Posted

技术标签:

【中文标题】为啥 AVURLAsset 不加载文件?【英文标题】:Why is AVURLAsset Not Loading the File?为什么 AVURLAsset 不加载文件? 【发布时间】:2018-09-27 14:39:01 【问题描述】:

好的。我有一种讨厌的感觉,这将与蟋蟀的温柔啁啾相会......

我基于this 和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!”,但我想知道我应该使用哪个“M”“RTFM”。

【问题讨论】:

只是为了记录,这部电影相当小。也许4MB。这是一部很小很小的电影,将在 240 处播放。 【参考方案1】:

问题似乎出在这一行

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

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

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

希望能解决。

【讨论】:

是的,做到了。该死。这意味着我需要编写一堆代码来对数据进行分类。谢谢!

以上是关于为啥 AVURLAsset 不加载文件?的主要内容,如果未能解决你的问题,请参考以下文章

AVURLAsset 加载 webvtt 文件

AVURLAsset 拒绝加载视频

AVURLAsset 拒绝加载视频

为啥我的 AVURLAsset 没有持续时间?

从 url (AVURLAsset) 加载后,我的肖像视频会旋转

iOS-如何使用 AVAsset 或 AVURLAsset 获取 .mp4 文件的持续时间