AVPlayer 在 CI 服务器上的单元测试期间无法加载文件

AVPlayer fails to load files during unit tests on CI servers

我有一些单元测试导致 AVPlayer 加载本地文件。该文件是测试包中的一个很小的 ​​(~2KB) m4a 音频文件。这些测试对我来说都是本地工作。

在 Travis 上设置我的项目时,我注意到导致 AVPlayer 加载文件的测试失败。我尝试了其他几个 CI 服务,但遇到了同样的问题。我增加了测试超时但没有运气。所有其他测试均通过。

我加载如下文件(简化):

let path = Bundle(for: type(of: self)).path(forResource: "Pop", ofType: "m4a")!
let url = URL(fileURLWithPath: url)

self.player.replaceCurrentItem(with: AVPlayerItem(url: url))

我的代码遵守 AVPlayer.currentItem.status。当 运行 在 CI 上时,观察者以状态 .failed 开火。 player.errornilplayer.currentItem.error是:

Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo={NSUnderlyingError=0x7f86e1cd8070 {Error Domain=NSOSStatusErrorDomain Code=-101 "(null)"}, NSLocalizedFailureReason=An unknown error occurred (-101), NSLocalizedDescription=The operation could not be completed}

有趣的是,在另一个测试中,我故意尝试加载损坏的文件(断言它无法播放并且我的代码 returns 相关错误),我得到以下错误,这是预期的并且建议从文件系统读取没有问题:

Error Domain=AVFoundationErrorDomain Code=-11829 "Cannot Open" UserInfo={NSUnderlyingError=0x7f86e1cd7ba0 {Error Domain=NSOSStatusErrorDomain Code=-12848 "(null)"}, NSLocalizedFailureReason=This media may be damaged., NSLocalizedDescription=Cannot Open}

更新

我已经看到在本地测试时我偶尔(可能在一天的工作中一次)遇到类似的失败。似乎是在我打开 Xcode 并且项目是新鲜的,然后开始工作的时候。也许 AVFoundation 中的某些东西需要一段时间才能初始化?我希望能够模拟 AVPlayer,也许我会为此添加一个协议 AVPlayerItem...

我遇到了完全相同的问题和相同的错误。 我最初尝试使用视频和音频文件都没有运气。 然后,我解决了创建没有音频的视频的问题。 我怀疑这个问题是由 Travis-CI 的 vm 没有声卡导致 OS 丢失一些能够重现文件的东西引起的。

不过,我不能 100% 确定是缺少音频还是导出视频的方式解决了这个问题。

videoOnlyTest.mp4