Can anyone suggest a method by which you can achieve a completely smooth and seamless looping of a video clip in iOS? I have tried two methods, both of which produce a small pause when the video loops
1) AVPlayerLayer with the playerItemDidReachEnd notification setting off seekToTime:kCMTimeZero
I prefer to use an AVPlayerLayer (for other reasons), but this method produces a noticeable pause of around a second between loops.
2) MPMoviePlayerController with setRepeatMode:MPMovieRepeatModeOne
This results in a smaller pause, but it is still not perfect.
I'm not sure where to go from here. Can anyone suggest a soultion?
To avoid the gap when the video is rewound, using multiple copies of the same asset in a composition worked well for me.
I can concur @SamBrodkin's findings.
and
fixed the non-looping issue on iOS 5 for me too.
To see an example that shows seamless looping of a background video (from an animated GIF) and switching between a pair of foreground character animations (with alpha channel), have a look at seamless-video-looping-on-ios. I tried to use AVPlayer in the past and had to give up on AVPlayer related solutions as they did not work well enough. See this SO question also iphone-smooth-transition-from-one-video-to-another.
I investigated the same problem as reported by the original poster (small pause in the loop that was breaking the seamlessness). By luck I had another video sample that didn't had this behavior and found the explanation/different only later:
The sound track.
I suspect a very slow sound initialisation (routing?).
Removing the sound track was the easiest solution for me (no sound needed) but I will have to dig further (audio mixing options and testing the solution that have been posted in this thread).
Eric
I just got this working on my iPad 3 running iOS 5.1.1, base SDK iOS 5.1
When setting up the movie player, set the repeat mode to MPMovieRepeatModeNone then add the notification
Then set up your selector to filter when the movie finishes playing
Apple made some large changes to how the MPMoviePlayerController handles loading movie files when they changed from iOS 4 to iOS 5, so I do not know if this method will work when they release iOS 6