One of my components makes heavy use of MPMoviePlayerController and recently showed a weird bug; when using the standard user interface (e.g. MPMoviePlayerController.controlStyle = MPMovieControlStyleFullscreen;
) the player never changes the state of the play/pause button (that thingy in the middle of my screenshot).
The functionality stays intact but the player state is not reflected by the UI.
When bringing up the controls by tapping on the screen while a movie is playing, I see a play-symbol. What I expect would be a pause-symbol as the player is currently playing. When tapping onto the play-symbol, the player goes into pause-mode. The symbol however does not change. When tapping again onto that play symbol, the player continues the playback, just as expected.
The problem has been introduced with iOS5 and did not occur on previous iOS versions.
For validating an iOS5 issues, I created a minimalistic player that is not using my own framework and sure enough the problem did not occur, hence it must be my code triggering this quirk. Unfortunately, my code is pretty damn large (about 3k lines) so I can not post it here.
I know chances of someone being able to answer this question without source code are pretty slim as it seems to be directly connected to my code. Being desperate as I am by now, I just took the chances and hope for a little wonder, somebody actually had such issue and knows how to trigger / remove it.
Well, it seems I found the answer (and what I would call an iOS5 bug)...
The reason for MPMoviePlayerController getting irritate on the status of the play button simply was the order of my initializing code.
For triggering this issue, all you have to do is run this code;
You will see a player UI which does not change its Pay/Pause state.
For getting things to work properly again, you have to move the setContentURL call before setting the playback-time.
I did submit a bug at Apple (Radar Bug ID# 10484668) - will keep you posted on their answer.
OpenRadar Bug Report
I also was frequently seeing this behavior, but unfortunately simply switching the order of calls to setContentURL and setting initial and playback times made no difference.
I discovered what I was doing wrong though. I was setting the playback times to -1 to indicate start of the stream when I should have been specifying zero. Changing this fixed the problem for me.