Swift - AVAsset.duration 已弃用 - 使用同步函数的异步替换

问题描述 投票:0回答:1

AVAsset.duration 和其他简单属性已被弃用。我似乎无法理解如何从同步函数更改为使用异步函数。旧的代码非常简单。加载 AVAsset 后,我执行一些健全性检查以确保电影文件没有损坏等。这是旧代码:

     self.duration = self.avAsset.duration
     let tracks = self.avPlayerItem.asset.tracks
     self.fps = tracks.first?.nominalFrameRate ?? 30

当我尝试此操作时,以下代码取决于检索到的值。所以看来我需要等待任务完成。我的脑子好痛,我错过了什么?预先感谢。

    Task
    {
        do
        {
            self.duration = try await  avAsset.load(.duration)
            self.tracks   = try await  avAsset.load(.tracks)
            self.fps      = try await  self.tracks.first?.load(.nominalFrameRate) ?? 0
        }
        catch
        {
            Globals.logger.error("MoviePlayer - loadMovie error fetching metadata")
        }
    }
asynchronous avasset
1个回答
0
投票

嗯,在睡了一觉之后,我有了一个足够好的部分解决方案。我不会尝试等待任务完成,而是将健全性检查移至任务块内。这确实会影响我的代码,因为该函数返回一个表示成功/失败的布尔值。因此结果将不包括健全性检查。至少现在足够了。

© www.soinside.com 2019 - 2024. All rights reserved.