美好的一天,
通过使用UIWebview,我现在有了一种在我的应用程序中显示youtube视频的工作方法(使用标记,在webview中查找播放按钮并在其上触发触摸事件)。
像魅力一样工作。视频弹出并播放。但是,我想在视频结束或用户点击完成按钮时收到一个事件。
在互联网上,我发现有一个事件:MPAVControllerItemPlaybackDidEndNotification,你可以听。然而,这个不被称为。
经过一些进一步的研究后,我发现对于通过UIWebView嵌入的Youtube视频,还调用了另一个通知(UIMoviePlayerControllerDidExitFullscreenNotification)。不幸的是,一个人不再工作了。 (found it here)
有人知道在视频播放完毕或被解雇后我如何采取行动?
由于
答案 0 :(得分:5)
用户点击DONE按钮后,使用UIMoviePlayerControllerWillExitFullscreenNotification
获取通知。在iOS6上似乎确实省略了UIMoviePlayerControllerDidExitFullscreenNotification
。
请注意 ...已... 与 ...将... 差异!
有关该主题的更多信息,请再次在您在问题中引用的帖子中查看我的更新答案。
答案 1 :(得分:0)
让我们来看看这个场景:
在您看来,您有一个按钮。点击后,您想直接播放视频。 为此,您可以打开webview作为视图的模态视图:
[self presentModalViewController:videoWebView animated:NO];
对于您的网页浏览,您应该使用Youtube API来集成和自动播放视频。请参阅此处提出的工作示例:https://stackoverflow.com/a/15538968
您会看到视频是在您的网络视图视图的模态视图中启动的。检测视频何时被解除的一种方法(单击“完成”按钮时)是使用webview视图类中的viewDidAppear
。在这种方法中,您将关闭webview视图,但是......首先启动此视图时,您不想忽略它。您可以添加一个布尔属性来避免这种情况。
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
if (_videoLaunched) {
[self dismissModalViewControllerAnimated:YES];
}
}
在viewDidLoad
方法中,将此属性设置为NO,并在webViewDidFinishLoad
方法(webview的委托方法)中将其设置为YES。
我认为它回答了你问题的一部分。关于检测到视频结束,您必须修改YT_Player.html
文件以收听状态更改。
ytPlayer = new YT.Player('media_area', {height: '100%', width: '100%', videoId: 'SbPFDcspRBA',
events: {'onReady': onPlayerReady, 'onStateChange': onPlayerStateChange}
function onPlayerStateChange(e) {
var result = JSON.parse(event.data);
if (result.info == 0) { // Video end
window.location = "videomessage://end";
}
}
});
然后,您将在webview视图中捕获该事件并将其忽略:
-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSURL *url = request.URL;
if ([[url scheme] isEqualToString:@"videomessage"]) {
[self dismissModalViewControllerAnimated:YES];
return YES;
}
return YES;
}
答案 2 :(得分:-1)
你需要的是这样的事情:
- (void)playerWillExitFullscreen:(NSNotification *)notification
{
//do something...
}
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(playerWillExitFullscreen:)
name:@"MPMoviePlayerWillExitFullscreenNotification" object:nil];