5

再会,

通过使用 UIWebview,我现在有了一种在我的应用程序中显示 youtube 视频的工作方法(使用标签,在 webview 中找到播放按钮并触发触摸事件)。

奇迹般有效。视频弹出并播放。但是,我想在视频结束或用户单击完成按钮时收到一个事件。

在互联网上我发现有一个事件: MPAVControllerItemPlaybackDidEndNotification 可以收听。但是,这个不会被调用。

经过进一步研究,我发现对于通过 UIWebView 嵌入的 Youtube 视频,另一个通知被调用( UIMoviePlayerControllerDidExitFullscreenNotification )。不幸的是,那个也不再起作用了。(在这里找到

有谁知道在视频播放完毕或被关闭后我可以如何做一些动作?

谢谢

4

3 回答 3

5

用户点击完成按钮后,使用UIMoviePlayerControllerWillExitFullscreenNotification获取通知。在UIMoviePlayerControllerDidExitFullscreenNotificationiOS6 上似乎确实被省略了。

请注意...做了......将...不同!

有关该主题的更多信息,请再次检查您在问题中引用的帖子中的更新答案。

于 2012-10-01T21:38:14.150 回答
0

让我们看一下这个场景:

在此处输入图像描述

在您看来,您有一个按钮。单击它时,您想直接播放视频。为了做到这一点,你打开 webview 作为你的视图的模式视图:

[self presentModalViewController:videoWebView animated:NO];

对于您的 webview,您应该使用 Youtube API 来集成和自动播放视频。在此处查看建议的工作示例:https ://stackoverflow.com/a/15538968

您将看到视频在您的 webview 视图的模态视图中启动。检测视频何时关闭(单击“完成”按钮时)的一种方法是使用viewDidAppearwebview 视图类。在这种方法中,您也将关闭 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;
}
于 2013-08-21T08:44:22.053 回答
-1

你在这里需要的是这样的:

- (void)playerWillExitFullscreen:(NSNotification *)notification
{
//do something...
}

[[NSNotificationCenter defaultCenter] addObserver:self
                                     selector:@selector(playerWillExitFullscreen:) 
name:@"MPMoviePlayerWillExitFullscreenNotification" object:nil];
于 2012-09-25T18:58:31.163 回答