观察当前播放时间并显示一个间隔覆盖

我正在制作一段video,以video的特定时间间隔显示叠加层。 我设法让video播放。 现在我的目标是观看/观察当前播放时间值,并在播放时间为2秒时暂停video。

经过一番研究发现,当前播放时间不支持KOV。 所以我需要实现这个解决scheme,但我不知道在哪里放置代码 – 我对Objective C非常陌生。我一直试图把它放在ViewController(我唯一的看法),但它的书面提示的方式是放置在其他地方…

我应该为它创build一个新的控制器吗? 还是我重写MediaPlayer框架的方法?

这是我的代码:

#import <UIKit/UIKit.h> #import <MediaPlayer/MediaPlayer.h> @interface ViewController : UIViewController @property (strong, nonatomic) MPMoviePlayerController *movieController; @property(nonatomic) NSTimeInterval currentPlaybackTime; @end #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (void)viewDidAppear:(BOOL)animated { self.movieController = [[MPMoviePlayerController alloc] init]; NSString *moviePath = [[NSBundle mainBundle] pathForResource:@"Movie" ofType:@"m4v"]; NSURL *movieURL = [NSURL fileURLWithPath:moviePath]; self.movieController = [[MPMoviePlayerController alloc] initWithContentURL:movieURL]; [self.movieController.view setFrame:CGRectMake (0, 0, 480, 326)]; [self.view addSubview:self.movieController.view]; [self.movieController play]; [self.movieController currentPlaybackTime]; } @end 

您可以在这个相同的视图控制器中find的解决scheme中实现以下方法。

之后

 [self.movieController play]; 

调用下面的方法

 [self BeginPlayerPolling]; 

注册这个类作为观察者,然后在viewDidAppear中初始化你的movieController

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieFinishedCallback:) name:MPMoviePlayerPlaybackDidFinishNotification object: self.movieController]; self.movieController = [[MPMoviePlayerController alloc] init]; 

并实施这个通知观察者的方法

 - (void)movieFinishedCallback:(NSNotification*)aNotification { // Remove the movie player view controller from the "playback did finish" notification observers [[NSNotificationCenter defaultCenter] removeObserver: self name:MPMoviePlayerPlaybackDidFinishNotification object: self.movieController]; [self EndPlayerPolling]; }