如何确定用户在MPMoviePlayer实例中的当前位置?

时间:2009-07-29 00:02:38

标签: iphone mpmovieplayercontroller

我有一部很长的电影,我将放在一个应用程序中,我想知道什么是让用户回到他们中断点的最佳方式。有人能指出我正确的方向吗?

因此,如果用户正在观看电影,点击完成,是否有当前时间的通知或我可以存储的内容并在那个时间再次加载实例?

谢谢!

4 个答案:

答案 0 :(得分:5)

我发现了一种不使用私有API组件的OS 3.0技术。

您可以注册接收MPAVControllerTimeDidJumpNotification通知,并从该通知的userInfo字典中获取MPAVControllerTimeParameter NSNumber。

例如,在您开始播放注册以接收通知之前:

#define MPAVControllerTimeDidJumpNotification @"MPAVControllerTimeDidJumpNotification"

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleTimeChanged:) name:MPAVControllerTimeDidJumpNotification object:nil];

然后开始播放电影。添加一个方法,在电影播放时为每次更改时调用该方法:

-(void)handleTimeChanged:(NSNotification *)notification
{
    NSDictionary * userInfo = notification.userInfo;
    int lastPositionInSeconds = [[userInfo valueForKey:@"MPAVControllerTimeParameter"] intValue];
    NSLog( @"Last time was %d", lastPositionInSeconds );
}

当电影停止播放时(通过侦听MPMoviePlayerPlaybackDidFinishNotification通知你知道这一点)停止监听MPAVControllerTimeDidJumpNotification通知。

答案 1 :(得分:2)

此问题与以下其他问题重复或相关:

要重申这些问题的答案,目前没有公共API可以在特定的帧或时间点启动电影。虽然有可用的私有API(-currentTime-setCurrentTime),但它们可能会发生变化,并会在审批过程中拒绝您的应用。

答案 2 :(得分:1)

    `NSDictionary * userInfo = notification.userInfo;
    int lastPositionInSeconds = [[userInfo valueForKey:@"MPAVControllerTimeParameter"] intValue];
`// saving an NSInteger
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    [prefs setInteger:lastPositionInSeconds forKey:@"currentMovieTime"];

    // getting an NSInteger
        NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
        NSInteger myInt = [prefs integerForKey:@"currentMovieTime"]; // default is zero if nil
        currentMovieTime = myInt;
        self.streamMoviePlayer.initialPlaybackTime = currentMovieTime;

您可以使用它来设置/获取变量并使用它来在正确的时间启动电影。即使用户重新启动手机或重新启动应用程序,这也会有效。

答案 3 :(得分:0)

斯拉瓦,

我实际上看过所有在电影播放过程中被系统触发的事件,并没有看到任何可能有帮助的事情。 MPAVControllerTimeDidJumpNotification会在播放过程中定期触发,但不会像每秒钟那样频繁地触发。每个关键帧可能会被解雇,但我不确定。