Why does MPMoviePlayerController setCurrentPlaybac

2019-01-15 18:39发布

问题:

I am experience some weirdness with MPMoviePlayerController.

I am trying to set the currentPlaybackTime of a video whilst it is playing (file source). Here is an example of what happens

  1. Play video
  2. hit button to jump to 9.3 seconds into the video
  3. Play state changes as follows:

a) Play state = 5 (MPMoviePlaybackStateSeekingBackward). currentPlaybackTime = 15.74 (this is the time I had got to when I pressed the button)

b) Play state = 1 (MPMoviePlaybackStatePlaying). currentPlaybackTime = 7.32

It doesn't seem to matter what I try and set currentPlaybackTime to it ends up as 7.32.

Some extra info: I get this behaviour even using the built in controls on MPMoviePlayerController. e.g. If I scroll it forward to 15 seconds it jumps back to 7.32

Any ideas? Is it something to do with the media file?

回答1:

You should seek using seekToTime or seekToTimeWithSeconds.

 CMTime npt = CMTimeMake(9,1);
 [self.player seekToTime:npt];

or

  CMTime npt = CMTimeMakeWithSeconds(9.3, 600);
   [self.player seekToTime:npt toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero];


回答2:

This is a late response, but I found a solution to my issue which was similar. You can modify the playback as follows:

#define START_TIME 50.0f
#define END_TIME   START_TIME + 20.0f  //play for 20 seconds

MPMoviePlayerController *player = [self moviePlayerController];
[player stop];
[player setInitialPlaybackTime:START_TIME];
[player setEndPlaybackTime:END_TIME];
[player play];


回答3:

cdasher pointed me in the right direction but this is what you should do:

Seek using seekToTime:toleranceBefore:toleranceAfter for sample accurate seeks. For this you must use AVPlayer not MPMediaPlayerController

CMTime npt = CMTimeMakeWithSeconds(9.3, 600);
[self.player seekToTime:npt toleranceBefore:kCMTimeZero toleranceAfter:kCMTimeZero];


回答4:

I want to share my experience for MPMoviePlayerController mediaPlayer to play MP3.

[mediaPlayer setCurrentPlaybackTime:currentPlayBackTime]; // it is not working for MP3 file. This is work only for video.

i used for MP3 and it is working for IOS 11 and later.

[mediaPlayer setInitialPlaybackTime:currentPlayBackTime]; // play MP3 file from last position