在iPhone上播放视频是十分十分简单的。但正是由于它的简单,也带来了很多缺点。大部分缺点都与你的程序对怎样播放视频缺乏足够的控制有关。
而能让每个人痛苦的最大的一个缺点是你无法循环播放你的视频。(实际上,你可以,不过却充斥着各种陷阱以及混乱的代码和暂时性解决办法……)
一个较好的方法是提供一个已经制作好包括许多次循环的视频,然后播放出来。
等等!那不会占用许多珍贵的程序存储空间?(可能会超过10MB 3G下载限制?)
哦,不。没有更好的方法?
感谢苹果开发论坛上十分聪明的开发者,我终于发现了解决办法,(通过他的帖子,按照建议经过尝试,我发现的方法终于可以工作)。我准备在这重复一次,希望对那些在Google上找答案的人有所帮助。
首先,让我们明确一点,我在这讨论的是使用MPMoviePlayerController对象播放视频。(而不是针对逐帧动画)。这可以解决MPMoviePlayerController循环播放的大问题。但是,对于下面这种情况,却无能为力。比如,你有一段10秒长的短视频,它有很好的淡入和淡出效果,当你循环播放时,视频会再次从黑色淡入,这使得视频有一段可怕的间断,视频后的视图被显示出来。人们建议了些具有欺骗性的暂时性解决方法(我也尝试过)。大部分建议都牵涉到在播放器后的视图上使用第一帧和最后一帧的图像,以使淡出时最后一帧仍然可见(所以你并不知道视频淡出 ),然后你再次调用播放器播放。这样播放并不能十分流畅。
好了,问题就介绍到这里。解决方法是提供一个包括了所需循环的自参照(self-referencing)视频。由于它只是多次参照原视频素材,自参照视频仅比单个视频片段稍大一点。所以,你可以循环一段10秒钟的视频100次,而仅比原视频片段大几K。
怎样实现?
我们使用的是Quicktime播放器。我很确定你需要使用pro版本(只要$30,如果你的应用程序是针对各种那个视频,你可能需要用到FCP或FCPExpress)
好了,准备好在Quicktime打开你的视频文件。(假定你的视频已经是适合iPhone播放的格式)。现在你马上将要使用“File->Save as…”存储你的视频。

重点是:一定要选择’Save as self contained movie’(存储为自包含视频)。
好,你现在有了一个.mov文件,你的Quicktime看上去像这样:

注意底部的时间轴。按Command-A选择整个视频。
![]()
然后按Command-C将其拷贝到剪切板,然后Command – V粘帖你想要的次数。
![]()
然后存盘,加入到Xcode项目中。
这是增加的大小:

我们看一下,6秒钟变成4:38,大概是46次循环,仅仅多用了75k。 还不错吧。每次循环只不过用了区区不足2K。我觉得是一个很不错的选择。
太棒了,你现在可以让你的视频播放你需要的次数了。但是,如果你只需要播放一次,怎么办?我没有一个很好的答案。你有一些选择:最容易的是有一个无循环的版本,第二种方法,用定时器,在第一次循环需要的时间到后停止。



