我是一名新的 iOS 开发人员,我正在为视频共享网站开发视频播放器应用程序,有时录制由两个视频流组成(一个显示演示者,另一个显示他的屏幕录制)。我正在尝试使用 AVFoundation 播放第二个视频,创建一个 AVPlayer。有些视频效果很好,但有些视频内存不足。经过大量调查后,我发现它试图将整个视频缓冲到内存中。
我花了几个小时在谷歌上搜索它,但找不到任何东西。
我创建了一个小项目来证明这一点: github project。它为两个不同的视频流设置了两个 AVPlayer,并更新了 UI 以显示播放器的 AVPlayerItem 的加载时间范围。对于第一个视频,它只缓冲约 60 秒,这很好,但对于第二个视频,它一直在缓冲。
self.player1 = [AVPlayer playerWithURL:url1];
self.player2 = [AVPlayer playerWithURL:url2];
和两个文本标签:
self.data1.text = [NSString stringWithFormat:@"Player 1 loadedTimeRanges: %@",
self.player1.currentItem.loadedTimeRanges];
self.data2.text = [NSString stringWithFormat:@"Player 2 loadedTimeRanges: %@",
self.player2.currentItem.loadedTimeRanges];
也许这很重要:过度缓冲的视频没有音轨,只有视频。
更新:我重现了使用 MPMoviePlayerController 而不是 AVPlayer 的问题,并检查了 playableDuration 属性。第一部电影停止大约 60 秒,第二部电影继续播放,然后内存不足。
UPDATE2:我得到了实际的视频文件并将它们放到 Dropbox 中,并尝试流式传输这些文件:那么我没有问题!它缓冲整部电影,但不会耗尽内存。如果我从原始站点(我们的视频共享站点)流式传输它们,它只会耗尽内存。URL 位于 github 项目中。
我真的很期待任何可能导致这种情况的提示。
谢谢!