如何在 UIWebview 内的播放器中获取 MPMoviePlayerPlaybackStateDidChangeNotification?
Posted
技术标签:
【中文标题】如何在 UIWebview 内的播放器中获取 MPMoviePlayerPlaybackStateDidChangeNotification?【英文标题】:How to get MPMoviePlayerPlaybackStateDidChangeNotification in player inside a UIWebview? 【发布时间】:2015-10-19 15:12:23 【问题描述】:我有这个应用程序(前同事写的),它调用视频网站显示视频列表,当用户点击一个视频时,应用程序会自动创建一个 MPMoviePlayer 并播放视频。
我被要求做的是在用户暂停视频时添加广告。但似乎我无法通过添加观察者来获得 MPMoviePlayerPlaybackStateDidChangeNotification 。
我做了一些研究并找到了以下解决方案:
Media Callbacks with Embedded YouTube Videos on ios
How to receive NSNotifications from UIWebView embedded YouTube video playback
Get Notification when a video starts or stops in UIWebView
但它们都不起作用,至少对于 ios8 而言。这是我从第三个网址的建议中使用的代码:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(playbackStateDidChange:)
name:@"MPAVControllerPlaybackStateChangedNotification"
object:nil];
- (void)playbackStateDidChange:(NSNotification *)note
NSLog(@"note.name=%@ state=%d", note.name, [[note.userInfo objectForKey:@"MPAVControllerNewStateParameter"] intValue]);
int playbackState = [[note.userInfo objectForKey:@"MPAVControllerNewStateParameter"] intValue];
switch (playbackState)
case 1: //end
;
break;
case 2: //start
;
break;
default:
break;
那我该怎么办?如果我想自己创建 MPMoviePlayer,这是否意味着我必须实现一个看起来像应用程序现在使用的视频列表 html 的视图?我认为这是很多工作要做。那么是否有任何方法可以从 UIWebview 中嵌入的 MPMoviePlayer 获取 PlaybackState 通知?
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:请显示通知触发的观察者和选择器。 还有一件事 - 尝试澄清“暂停视频”的含义 - 是暂停 webview 还是直接暂停 MoviePlayer? 播放器不发送通知应该没有任何原因,因此显示您的代码可能会有所帮助。
您研究中的第 1 点和第 2 点提出了不同的问题,最后一个问题通过正确的观察者解决,这就是方向(只要视频播放器实际上是 MPMoviePlayer 类型)。
【讨论】:
谢谢!我在上面添加了我的代码,它与第三个 url 中的代码相同。暂停是指暂停 MoviePlayer,因为该应用会在视频播放时调用 MoviePlayer。以上是关于如何在 UIWebview 内的播放器中获取 MPMoviePlayerPlaybackStateDidChangeNotification?的主要内容,如果未能解决你的问题,请参考以下文章
无法让 UIWebView 在 Xcode 中播放 .mp4
那个 UIWebView 播放器是 MPMoviePlayerController 实例,以及如何获取对该实例的引用?