MPMoviePlayerController的initialPlaybackTime属性在iOS 8.4中无效

15

设置了 initialPlaybackTime 属性后, 视频(HTTP 流媒体)仍从开头播放。

iOS <= 8.3 中相同的代码可以正常工作:

 self.moviePlayer.initialPlaybackTime = self.lastPlaybackTime;
[self.moviePlayer play];

3
我也遇到了同样的问题,而且现在不能播放所有文件类型。此外,这里有一个雷达 http://www.openradar.me/20762442,显示该组件存在问题。看起来苹果在那个版本中破坏了已弃用的mpmoviewplayer,你需要转移到AVKit。 - Nikita Took
setCurrenPlaybackTime 似乎也出现了故障。 - JDL
我已经尝试了几个小时,但完全没有运气,社区的普遍反应似乎是它目前已经损坏了。 - Philip Laine
我已向苹果提交了一个错误报告,但还没有收到回复。 - freestyler
3个回答

6
这对我有用,基本上当电影开始播放时,你需要使用setCurrentPlaybackTime。但你还需要一个标记playbackDurationSet,当你呈现movieplayer时,它设置为NO,并在第一次将电影搜索到playbackDuration时设置为YES。 注意: 这个标志是必需的,因为当你从搜索滑动条搜索电影时,moviePlayerPlaybackStateChanged会以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;
}

0

我也遇到了一些这样的问题。由于MPMoviePlayerController在iOS 9中被弃用,它们不太可能得到修复。


0

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;
}

虽然这些都是一种变通方法,但它能完成工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接