观察 currentPlaybackTime 并每隔一段时间显示一个覆盖
Posted
技术标签:
【中文标题】观察 currentPlaybackTime 并每隔一段时间显示一个覆盖【英文标题】:Observing currentPlaybackTime and showing an overlay at intervals 【发布时间】:2013-12-27 21:14:26 【问题描述】:我正在制作一个视频,它会在视频的特定间隔显示叠加层。我设法让视频播放。现在我的目标是观看/观察 currentPlaybackTime 值并在视频达到 2 秒时暂停视频。
经过一番研究发现currentPlaybackTime不支持KOV。所以我需要实现this solution,但我不知道把代码放在哪里——我对Objective C很陌生。我一直试图把它放在ViewController(我唯一的视图)中,但是它的书面提示方式被放在别的地方……
我应该为它创建一个新的控制器吗?还是我要覆盖 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
【问题讨论】:
【参考方案1】:您可以在同一个视图控制器中在您找到的解决方案中实现以下方法。
紧接着
[self.movieController play];
调用下面的方法
[self BeginPlayerPolling];
在你初始化你的movieController的viewDidAppear中注册这个类作为观察者
[[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];
【讨论】:
您好,非常感谢您的帮助:)。不幸的是,在 viewDidAppear 中将类注册为观察者时出现错误“使用未声明的标识符 movieController”。这很奇怪,因为我以为我在头文件中声明了它。 现在试试,我错误地将movieController作为ivar而不是属性访问。希望它现在可以工作。 好的,所以现在没有错误:),谢谢。那么我不使用链接中的代码吗?我可以用你的代码观察 currentPlaybackTime 的值吗? 添加了观察者来跟踪电影播放器何时完成播放电影。你仍然需要那些 BeginPlayerPolling 和 EndPlayerPolling 来跟踪 currentPlaybackTime 的值。 由于 pollPlayerTimer 似乎是一个时间,它应该被声明为遵循 @property(nonatomic, strong) NSTimer *pollPlayerTimer;以上是关于观察 currentPlaybackTime 并每隔一段时间显示一个覆盖的主要内容,如果未能解决你的问题,请参考以下文章
AVPlayer 向后搜索时不更新 currentPlaybackTime
MPMoviePlayerController currentPlaybackTime 在设置 setCurrentPlaybackTime 时跳转
java-打印101-200之间的素数(PrimeNumber),并统计个数,并每5行输出