本文介绍了如何检测 AVplayer 并从 WKWebView 获取当前视频的 url?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用下面的代码从 UIWebView 中提取 url:它工作正常,但是用于 WKWebView 的相同代码不再工作.谁能帮我?在 WKWebView 中播放的视频是 Inlineplacyback 而非全屏.

I'm using below code to extract url from UIWebView: it is working fine but, this same code using for WKWebView it's not working anymore. Can anyone help me? The video playing in WKWebView is Inlineplacyback not in fullscreen.

我的代码是:

 NotificationCenter.default.addObserver(self, selector: #selector(self.playerItemBecameCurrent(_:)), name: NSNotification.Name("AVPlayerItemBecameCurrentNotification"), object: nil)

 @objc func playerItemBecameCurrent(_ sender : NSNotification){
    let playerItem: AVPlayerItem? = sender.object as? AVPlayerItem
    if playerItem == nil {
        print("player item nil")
        return
    }
    // Break down the AVPlayerItem to get to the path
    let asset = playerItem?.asset as? AVURLAsset
    let url: URL? = asset?.url
    let path = url?.absoluteString

    print(path!,"video url")
}

响应网址:

https://r2---sn-po4g5uxa-5hql.googlevideo.com/videoplayback=3amp;tx4sprams=clen%2Cdur%2Cei%2Cgir%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2CMPt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cpcm2%2Cpl%2Cratebypass%2Cip1&5Cratebypass%2Cipsources.5.5&5.5&2C; ratebypass = YES和ID =邻AM9UWIaxopyYZX4gikGuswG8EMi3dhH_PPBMIqY5cbXj&安培;到期= 1554400796和C = MWEB&安培; fvip = 4和; initcwndbps = 481250&安培; ipbits = 0&安培; MIME =视频%2Fmp4&安培; DUR = 60.093&安培; LMT = 1554142002789460&安培;键= yt6&安培;MT = 1554379078&安培; ITAG = 18&安培;源= YouTube和安培; GIR = YES&安培; requiressl = YES&安培;签名= 6C68366FC249958BB8E95A5D88074FF8BCB99745.DA113E66DD0B46863BAE52DAA3CAB31FD141F0E5&安培; CLEN = 2708520&安培;毫米= 31%2C29&安培; MN = SN-po4g5uxa-5hql%2Csn-cvh7knek&安培; EI =vPGlXPOWHIWD8QOO1KBo&ms=au%2Crdu&pcm2=no&pl=24&mv=m&cpn=I9d32bNmeq3kf0jn&cver=2.20190403&ptk=youtube_none=m&cpn>

https://r2---sn-po4g5uxa-5hql.googlevideo.com/videoplayback?txp=5531432&sparams=clen%2Cdur%2Cei%2Cgir%2Cid%2Cinitcwndbps%2Cip%2Cipbits%2Citag%2Clmt%2Cmime%2Cmm%2Cmn%2Cms%2Cmv%2Cpcm2%2Cpl%2Cratebypass%2Crequiressl%2Csource%2Cexpire&ip=103.37.181.55&ratebypass=yes&id=o-AM9UWIaxopyYZX4gikGuswG8EMi3dhH_PPBMIqY5cbXj&expire=1554400796&c=MWEB&fvip=4&initcwndbps=481250&ipbits=0&mime=video%2Fmp4&dur=60.093&lmt=1554142002789460&key=yt6&mt=1554379078&itag=18&source=youtube&gir=yes&requiressl=yes&signature=6C68366FC249958BB8E95A5D88074FF8BCB99745.DA113E66DD0B46863BAE52DAA3CAB31FD141F0E5&clen=2708520&mm=31%2C29&mn=sn-po4g5uxa-5hql%2Csn-cvh7knek&ei=vPGlXPOWHIWD8QOO1KBo&ms=au%2Crdu&pcm2=no&pl=24&mv=m&cpn=I9d32bNmeq3kf0jn&cver=2.20190403&ptk=youtube_none&pltype=contentugc

它是视频 URL 不是网页 URL,所以,请帮助我如何获取它.谢谢.

It's video URL not Webpage URL so, please help me how to get this.Thanks.

推荐答案

这有点像黑客,但这是我找到的唯一方法.

This is kind of a hack, but the only way I found to accomplish this.

首先将自己设置为 WKWebView 导航委托:

self.webView?.navigationDelegate = self

现在收听所有导航更改,并保存请求的网址:

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
        if let urlStr = navigationAction.request.url?.absoluteString {
            //Save presented URL
            //Full path can be accessed via self.webview.url
        }

        decisionHandler(.allow)
    }

现在您只需要知道新屏幕何时可见,并使用您保存的 URL(要知道新可见屏幕的视频 URL).

Now you only need to know when does the new screen become visible, and use the URL you saved (To know the video URL of the new visible screen).

您可以通过收听 UIWindowDidBecomeVisibleNotification 通知来做到这一点:

You can do this via listening to UIWindowDidBecomeVisibleNotification notification:

NotificationCenter.default.addObserver(self, selector: #selector(windowDidBecomeVisibleNotification(notif:)), name: NSNotification.Name("UIWindowDidBecomeVisibleNotification"), object: nil)

然后检查导航窗口是否不是您的窗口,这意味着确实打开了一个新屏幕:

@objc func windowDidBecomeVisibleNotification(notif: Notification) {
        if let isWindow = notif.object as? UIWindow {
            if (isWindow !== self.view.window) {
            print("New window did open, check what is the currect URL")
            }
        }
    }

这篇关于如何检测 AVplayer 并从 WKWebView 获取当前视频的 url?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!