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

你好我是新来的目标 - c

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

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

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

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

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

【问题讨论】:

    标签: iphone uiwebview mpmovieplayercontroller


    【解决方案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://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 End 调用,并且可以按照您的要求进行操作。 编码快乐!!

    【讨论】:

      猜你喜欢
      • 2011-08-03
      • 1970-01-01
      • 2011-10-25
      • 2011-12-20
      • 2018-02-10
      • 1970-01-01
      • 2022-12-03
      • 2012-10-27
      • 1970-01-01
      相关资源
      最近更新 更多