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