Подтвердить что ты не робот

Почему MPMoviePlayerController setCurrentPlaybackTime идет не в то время?

Я испытываю некоторую странность с MPMoviePlayerController.

Я пытаюсь установить currentPlaybackTime видео во время воспроизведения (источник файла). Вот пример того, что происходит

  • Воспроизвести видео
  • нажмите кнопку, чтобы перейти к 9.3 секундам в видео
  • Состояние воспроизведения изменяется следующим образом:

a) Состояние воспроизведения = 5 (MPMoviePlaybackStateSeekingBackward). currentPlaybackTime = 15.74 (это время, когда я нажал кнопку)

b) Состояние воспроизведения = 1 (MPMoviePlaybackStatePlaying). currentPlaybackTime = 7.32

Кажется, не имеет значения, что я пытаюсь установить currentPlaybackTime и заканчивается как 7.32.

Дополнительная информация: Я получаю это поведение даже с помощью встроенных элементов управления на MPMoviePlayerController. например Если я прокручу его вперед до 15 секунд, он вернется к 7.32

Любые идеи? Это как-то связано с медиа файлом?

4b9b3361

Ответ 1

Вам следует искать с помощью seekToTime или seekToTimeWithSeconds.

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

или

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

Ответ 2

Это поздний ответ, но я нашел решение моей проблемы, которое было похоже. Вы можете изменить воспроизведение следующим образом:

#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 указал мне в правильном направлении, но это то, что вы должны сделать:

Ищите с использованием метода seekToTime: toleranceBefore: toleranceAfter для выборочного точного поиска. Для этого вы должны использовать AVPlayer, а не MPMediaPlayerController

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