Свойство MPMoviePlayerController initialPlaybackTime не работает в iOS 8.4
После установки свойства initialPlaybackTime видео (потоковая передача HTTP) все еще воспроизводится с самого начала.
Тот же код хорошо работает в iOS <= 8.3:
self.moviePlayer.initialPlaybackTime = self.lastPlaybackTime;
[self.moviePlayer play];
Ответы
Ответ 1
Это работает для меня, в основном вам нужно setCurrentPlaybackTime, когда фильм начинает воспроизводиться, но вам также нужен флаг playDurationSet, который установлен в НЕТ при представлении фильма и он установлен на YES, когда фильм впервые запрашивает воспроизведение.
ПРИМЕЧАНИЕ: этот флаг требуется, потому что, когда вы ищете фильм из поискового скруббера, moviePlayerPlaybackStateChanged запускается с воспроизведениемState
MPMoviePlaybackStatePlaying.
BOOL playbackDurationSet = NO;
- (void)moviePlayerPlaybackStateChanged:(NSNotification*)notification
{
MPMoviePlayerController* player = (MPMoviePlayerController*)notification.object;
switch ( player.playbackState ) {
case MPMoviePlaybackStatePlaying:
if(!playbackDurationSet){
[self.moviePlayer setCurrentPlaybackTime:yourStartTime];
playbackDurationSet = YES;
}
break;
}
}
- (void)moviePlayerPresented
{
playbackDurationSet = NO;
}
Ответ 2
Я видел некоторые из этих проблем. Поскольку MPMoviePlayerController устарел в iOS 9, они вряд ли будут исправлены.
Ответ 3
hariszaman ответил мне:
- (void)moviePlaybackStateChanged:(NSNotification*)notif
{
//...
if (self.videoPlayer.playbackState == MPMoviePlaybackStatePlaying) {
if (self.currentBookmark) {
if ([[PSDeviceInfo sharedInstance] is_iOSatLeast84]){
NSTimeInterval toTime = [self.currentBookmark.seconds doubleValue];
[self.videoPlayer setCurrentPlaybackTime:toTime];
self.currentBookmark = nil;
}
}
}
if (self.videoPlayer.playbackState == MPMoviePlaybackStatePaused) {
//...
}
if (self.videoPlayer.playbackState == MPMoviePlaybackStateStopped) {
//...
}
}
и
- (void)configureMoviePlayer
{
if (self.currentBookmark) {
if ([[PSDeviceInfo sharedInstance] is_iOSatLeast84]){
// will set start after did start
}else {
NSTimeInterval toTime = [self.currentBookmark.seconds doubleValue];
self.videoPlayer.initialPlaybackTime = toTime;
self.currentBookmark = nil;
}
}
else {
self.videoPlayer.initialPlaybackTime = 0;
}
//...
}
метод is_iOSatLeast84:
- (BOOL)is_iOSatLeast84
{
// version 8.4
NSString *version = [[UIDevice currentDevice] systemVersion];
BOOL isAtLeast84 = [version floatValue] >= 8.35;
return isAtLeast84;
}
Хотя все это обходное решение, оно выполняет свою работу.