我正在为iPad开发一款iOS应用程序,需要在屏幕的某些部分播放视频.我有几个视频文件需要以编译时没有给出的顺序依次播放.它看起来一定只是在播放一段视频.从一个视频切换到下一个视频时,显示两个视频的最后一帧或第一帧时会有一定的延迟,但不应出现闪烁或没有内容的白色屏幕.这些视频不包含音频.考虑内存使用是很重要的.视频分辨率非常高,可以同时相邻播放多个不同的视频序列.
为了达到这个目的,我已经try 了一些解决方案.具体如下:
1.带有AVComposition的AVPlayer,其中包含所有视频
在这个解决方案中,我有一个只在AVPlayerItem上使用的AVPlayer,它使用的是一个AVComposition,其中包含彼此相邻的所有视频.当我观看特定的视频时,我会寻找下一个视频开始的时间.这个解决方案的问题是,当寻找时,玩家会快速显示它正在寻找的一些帧,这是不可接受的.似乎没有办法直接跳到作文中的特定时间.我试图通过制作刚刚完成的视频中最后一帧的图像来解决这个问题,然后在搜索时将其显示在AVPLayer前面,最后在搜索完成后将其删除.我使用AVAssetImageGenerator制作图像,但由于某些原因,图像的质量与视频不同,因此在视频上显示和隐藏图像时会有显著的变化.
2.具有多个AVPlayerItems的AVPlayer
此解决方案 for each 视频使用AVPlayerItem,并在切换到新视频时替换AVPlayer的项.问题是,当切换AVPlayer的项目时,在加载新项目时,它会在短时间内显示一个白色屏幕.为了解决这个问题,可以使用在加载时将图像放在最后一帧的前面的解决方案,但仍然存在图像和视频质量不同且值得注意的问题.
3.两名AVPlayerItem玩家轮流玩AVPlayerItem
我try 的下一个解决方案是让两个AVPlayer相互叠加,轮流玩AVPlayerItems.因此,当一个播放器打开后,它将停留在视频的最后一帧.另一个AVPlayer将被带到前面(其项目设置为nil,因此它是透明的),下一个AVPlayerItem将被插入该AVPlayer中.一旦加载,它将开始播放,两个视频之间的平滑交易的幻觉将完好无损.这个解决方案的问题是内存使用.在某些情况下,我需要同时在屏幕上播放两个视频,这将导致4个AVPlayer同时加载一个AVPlayerItem.因为视频的分辨率很高,所以内存太大了.
是否有人对上面发布的整体问题和try 过的解决方案有一些 idea 、建议、 comments 或其他东西.