观察 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行输出

schtasks /create(有一个每天运行并每小时重复的任务

如何在vue中循环嵌套数组并每5秒显示一次数据?

检查鼠标按钮是不是按下按钮/图片并每隔几秒钟继续执行一个功能直到按下按钮?