【问题标题】:Detecting and intercepting video playback in UIWebView在 UIWebView 中检测和拦截视频播放
【发布时间】:2014-11-20 18:20:47
【问题描述】:

我想拦截 UIWebView 中的点击,然后使用视频的 URL。这怎么可能?我发现了一个有点相似的帖子,它指向了

webView:shouldStartLoadWithRequest:navigationType:

代表。我似乎无法使用此委托获取视频的加载 url。

我正在尝试让代码在 iOS8 中运行

【问题讨论】:

    标签: ios objective-c uiwebview video-streaming uiwebviewdelegate


    【解决方案1】:

    有一种通过监听AVPlayerItemBecameCurrentNotification 通知来查找 URL 的方法。当 UIWebView 显示媒体播放器时会触发此通知,并发送 AVPlayerItem 作为通知的对象。

    例如:

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(playerItemBecameCurrent:)
                                                 name:@"AVPlayerItemBecameCurrentNotification"
                                               object:nil];
    
    
    -(void)playerItemBecameCurrent:(NSNotification*)notification {
        AVPlayerItem *playerItem = [notification object];
        if(playerItem == nil) return;
        // Break down the AVPlayerItem to get to the path
        AVURLAsset *asset = (AVURLAsset*)[playerItem asset];
        NSURL *url = [asset URL];
        NSString *path = [url absoluteString];
    }
    

    这适用于任何视频(和音频)。但是,在媒体播放器加载后触发它是毫无价值的,因此您不能在此时阻止播放器启动(如果这是您的意图)。

    【讨论】:

    • 谁有使用 WKWebView 的更新解决方案?
    • WKWebView播放视频时,不会发送通知。您可以收听所有通知并打印日志以证明这一点。 @CharltonProvatas
    • 我可以使用 UIWindow 的通知来获取它。我认为这不适用于内联播放的视频:developer.apple.com/reference/uikit/uiwindow
    • @CharltonProvatas 您使用了哪个 UIWindow 通知?您是通过通知收到的AVPlayerItem 吗?
    • @Valdimar 我使用了 .UIWindowDidResignKey 通知。我无法通过这样做获得 AVPlayerItem 的实例,但是我能够使用这种方法抑制视频全屏显示。当从 WKWebView/UIWebview 进入全屏时,AVPlayerViewController 会创建一个额外的 UIWindow 实例,因此您可以在原始 UIWindow 实例上使用“makeKeyAndVisible”来隐藏视频。
    【解决方案2】:

    如果上述解决方案对任何人都不起作用,请尝试收听 AVPlayerItemNewAccessLogEntry 而不是 AVPlayerItemBecameCurrentNotification。 AVPlayerItemNewAccessLogEntry 似乎在之后被调用并且是我能够设置信息的地方。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-16
      • 1970-01-01
      • 2014-10-11
      • 1970-01-01
      • 2011-06-17
      • 2012-10-27
      相关资源
      最近更新 更多