如何获取在iOS应用中观看的持续时间视频

时间:2013-12-17 10:40:16

标签: ios iphone mpmediaplayercontroller

我正在制作一个iphone应用程序,其中从url服务器播放视频它工作正常,但我想让我们说视频是3分钟或4分钟用户观看视频多少时间,因为它播放视频1分钟和同样停止。< / p>

NSURL *url = [NSURL URLWithString:newString];
NSLog(@"New File name is %@",newString);            
mp = [[MPMoviePlayerViewController alloc] initWithContentURL:url];
[[mp moviePlayer] prepareToPlay];
[[mp moviePlayer] setUseApplicationAudioSession:NO];
[[mp moviePlayer] setShouldAutoplay:YES];
[[mp moviePlayer] setControlStyle:2];
//[[mp moviePlayer] setRepeatMode:MPMovieRepeatModeOne];
[self presentMoviePlayerViewControllerAnimated:mp];

3 个答案:

答案 0 :(得分:1)

我认为,您可以在提交NSTimer时启动MPMoviePlayerViewController并听取通知MPMoviePlayerPlaybackDidFinishNotificationMPMoviePlayerPlaybackDidFinishReasonUserInfoKey并计算时间。

编辑

最好的方法是使用currentPlaybackTime通知访问MPMediaPlayback的MPMoviePlayerPlaybackDidFinishNotification媒体资源

这会给你实际的时间。 在您的情况下,您可以访问此属性

  NSTimeInterval time =  mp.moviePlayer.currentPlaybackTime;

答案 1 :(得分:0)

如果您检查参考手册MPMoviePlayerController是否符合MPMediaPlayback协议

所以MPMediaPlayback协议包含属性

@property(nonatomic) NSTimeInterval currentPlaybackTime

播放头的当前位置。 (所需的)

示例

MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:movieURL];
...

NSTimeInterval timeInterval = player.currentPlaybackTime;

链接:

MPMoviePlayerController

MPMediaPlayback

希望这有帮助!

答案 2 :(得分:0)

您可以使用通知中心:

1-在viewDidLoad上:

 [[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(playbackStateDidChange:)
                                          name:@"MPAVControllerPlaybackStateChangedNotification"
                                           object:nil];

2-实现此方法(seconds为int):

- (void)playbackStateDidChange:(NSNotification *)note {
    NSLog(@"note.name=%@ state=%d", note.name, [[note.userInfo objectForKey:@"MPAVControllerNewStateParameter"] intValue]);

if ([[note.userInfo objectForKey:@"MPAVControllerNewStateParameter"] intValue] == 2) {
    timer= [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(increaseSeconds) userInfo:nil repeats:YES];
    NSLog(@"seconds: %i", seconds);
} else if([[note.userInfo objectForKey:@"MPAVControllerNewStateParameter"] intValue] == 1){
    [timer invalidate];
    NSLog(@"seconds: %i", seconds);
} else if([[note.userInfo objectForKey:@"MPAVControllerNewStateParameter"] intValue] == 0){
    NSLog(@"Total watched: %i", seconds);

    [self dismissMoviePlayerViewControllerAnimated];
}   

}

其中MPAVControllerNewStateParameter == 2(视频开始)       MPAVControllerNewStateParameter == 1(视频已停止)       MPAVControllerNewStateParameter == 0(视频已完成或按下“完成”)

3-最后实现这个方法:

-(void) increaseSeconds {
    seconds++;
}