当视频在 UIWebView 中开始或停止时获取通知

Posted

技术标签:

【中文标题】当视频在 UIWebView 中开始或停止时获取通知【英文标题】:Get Notification when a video starts or stops in UIWebView 【发布时间】:2011-11-24 06:46:01 【问题描述】:

你好我是新来的目标 - c

我在使用UIWebViewMPMoviePlayerController 时遇到问题:我的UIWebViewhtml 中有一个电影(它是一个本地html 文件),我正在使用html5 和视频标签。

我想要在UIWebView....中视频开始或停止时收到通知。

我尝试过使用MPMoviePlayerPlaybackDidFinishNotification,但它不会触发...

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

有没有人知道如何从uiwebview获得通知??

【问题讨论】:

【参考方案1】:

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

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

通知在其userInfo 中有键MPAVControllerNewStateParameter。播放开始前的值似乎为 0,暂停时为 1,播放时为 2,拖动播放滑块时为 3(暂时)。

- (void)playbackStateDidChange:(NSNotification *)note

    NSLog(@"note.name=%@ state=%d", note.name, [[note.userInfo objectForKey:@"MPAVControllerNewStateParameter"] intValue]);

【讨论】:

很棒的建议 - 我经常告诉人们,无法观察网络视图电影播放器​​的通知 - 哎呀,我猜我错了。 它实际上并不知道它正在观察哪个电影播放器​​。希望你只有一个可以观察。 :) 如何仅通过通知将视频从播放更改为暂停? 是否有类似上述的替代解决方案? @Susim 你有没有找到任何替代方案?【参考方案2】:

我对此进行了很多搜索..这是我找到的用于获取播放结束通知调用的解决方案。 在 iOS6.0 及以上版本测试代码。感谢@Morten

在 viewDidLoad 添加观察者

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

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

- (void)webViewDidFinishLoad:(UIWebView *)webView 
    //http://***.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 End 调用,并且可以按照您的要求进行操作。 编码快乐!!

【讨论】:

以上是关于当视频在 UIWebView 中开始或停止时获取通知的主要内容,如果未能解决你的问题,请参考以下文章

UIWebView 视频播放获取开始播放和结束播放通知

UIWebView 和 MPMoviePlayerController

在UIWebView中停止视频

如何在 UIWebview 内的播放器中获取 MPMoviePlayerPlaybackStateDidChangeNotification?

专注于输入字段时停止 uiwebview 网页内容的自动调整大小

统一获取视频的当前帧数/时间[关闭]