YouTube解雇事件(iOS)

5

你好,

通过使用UIWebview,我现在有了一种在我的应用程序中显示YouTube视频的工作方法(使用标签,在webview中找到播放按钮并触发该事件)。效果非常好。视频弹出并播放。但是,我想在视频结束或用户点击完成按钮时接收到事件。

在互联网上,我发现有一个事件:MPAVControllerItemPlaybackDidEndNotification,您可以监听此事件。但是这个事件没有被调用。

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

有人知道如何在视频播放完成或取消后执行某些操作吗?

谢谢

3个回答

5
使用UIMoviePlayerControllerWillExitFullscreenNotification,在用户点击“完成”按钮后得到通知。在iOS6中,似乎确实省略了UIMoviePlayerControllerDidExitFullscreenNotification
请注意:...Did......Will...的区别!
如需了解更多相关信息,请再次查看您问题中引用的帖子中我更新的答案。

0

让我们来看看这种情况:

enter image description here

在您的视图中,您有一个按钮。当它被点击时,您想直接播放视频。 为了实现这一点,您将Webview作为模态视图打开:

[self presentModalViewController:videoWebView animated:NO];

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

您会发现视频是在Webview视图的模态视图中启动的。检测视频何时被关闭(当单击“完成”按钮时)的一种方法是在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;
}

-1
这里需要的是类似这样的东西:
- (void)playerWillExitFullscreen:(NSNotification *)notification
{
//do something...
}

[[NSNotificationCenter defaultCenter] addObserver:self
                                     selector:@selector(playerWillExitFullscreen:) 
name:@"MPMoviePlayerWillExitFullscreenNotification" object:nil];

你试过iOS 6吗?之前尝试过,但这里通知没有触发。 - fabb
MPMoviePlayerWillExitFullscreenNotification在iOS 6上对我有效。你能检查一下它是否对你有效吗? - defactodeity
很遗憾,它对我不起作用。也许这与我在UIWebView中使用Youtube视频有关? - fabb
@fabb,这当然是正确的,但是当在UIWebView中使用Youtube视频时,这个答案并没有帮助——这个答案的作者可能在原始问题中错过了那一部分。 - Till

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接