在UIWebView中视频启动或停止时获取通知

时间:2011-11-24 06:46:01

标签: iphone uiwebview mpmovieplayercontroller

您好我是Objective-c

的新手

我对UIWebViewMPMoviePlayerController有疑问:我的UIWebView在html中有一部电影(它是本地html文件),我&# 39; m使用html5和视频的视频标签。

我希望在UIWebView ....

中视频开始或停止时收到通知

我尝试过使用MPMoviePlayerPlaybackDidFinishNotification,但它没有开火......

我还试图让我的主要UIViewController视图成为我自己的视图,并拦截-didAddSubview:-willRemoveSubview:。但没有成功......

是否有任何机构知道如何从uiwebview发送通知

2 个答案:

答案 0 :(得分:19)

您可以观察@"MPAVControllerPlaybackStateChangedNotification"(对象使用nil)。此通知未记录,因此我不知道App Store是否会批准您的应用。

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

通知的MPAVControllerNewStateParameter中包含密钥userInfo。播放开始前的值似乎为0,暂停时为1,正在播放时为2,拖动播放滑块时为3(暂时)。

- (void)playbackStateDidChange:(NSNotification *)note
{
    NSLog(@"note.name=%@ state=%d", note.name, [[note.userInfo objectForKey:@"MPAVControllerNewStateParameter"] intValue]);
}

答案 1 :(得分:1)

我搜索了很多关于这个......这是我找到的用于获取播放结束通知呼叫的解决方案。 在iOS6.0及更高版本上经过测试的代码。一切都归功于 @Morten

在viewDidLoad中添加观察者

[[NSNotificationCenter defaultCenter] addObserver:self
 selector:@selector(playbackDidEnd:)
name:@"MPAVControllerItemPlaybackDidEndNotification"//@"MPAVControllerPlaybackStateChangedNotification"
object:nil];

然后只需添加以下javascript代码webViewDidFinishLoad委托,如下所示

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    //http://stackoverflow.com/a/12504918/860488
    [videoView stringByEvaluatingJavaScriptFromString:@"\
                                    var intervalId = setInterval(function() { \
                                        var vph5 = document.getElementById(\"video-player\");\
                                        if (vph5) {\
                                            vph5.playVideo();\
                                            clearInterval(intervalId);\
                                        } \
                                    }, 100);"];
}

- (void)playbackDidEnd:(NSNotification *)note
{
//do your stuff here
    [videoView removeFromSuperview];
    videoView.delegate = nil;
    videoView = nil;
}

您将在上面选择的内容中获得playbackDid结束通话,并且可以执行您的要求。 快乐编码!!