WKWebView 视频不支持内联播放。

4
根据苹果的文档:https://developer.apple.com/documentation/webkit/wkwebviewconfiguration/1614793-allowsinlinemediaplayback
使用Swift 4应该很容易在内联视频中播放视频,但是无论我做什么操作,它总是在本地视频播放器中打开。
这是我的代码:
convenience init(style: UITableViewCell.CellStyle, reuseIdentifier: String?, url: String = "", title: String) {
        self.init(style: style, reuseIdentifier: reuseIdentifier)
        self.videoTitleLabel.text = title
        self.urlToVideo = url
        setUpUI()
        setUpLayout()
        webView.backgroundColor = .smalt
        webView.translatesAutoresizingMaskIntoConstraints = false
        webView.configuration.allowsInlineMediaPlayback = true
        webView.configuration.preferences.javaScriptEnabled = true
        webView.load(URLRequest(url: URL(string: self.urlToVideo + "?playsinline")! ))
    }

我做错了什么?


你尝试过使用 "-playsinline=1" 吗?以防它无法按预期默认播放。 - Mick
@Mick 是的。我已经尝试过playinline=1,但它没有起作用。我也尝试了controls=0来去掉控件,但那也没有起作用。 - Matias Barrios
1个回答

11
根据其他人报告的问题和苹果文档中的细节,我认为问题在于必须在创建WKWebView之前设置WKWebViewConfiguration。
根据苹果文档:
使用WKWebViewConfiguration类,您可以确定网页何时呈现,如何处理媒体播放,用户可以选择的项目的粒度以及许多其他选项。
仅在首次初始化Web视图时使用WKWebViewConfiguration。您不能使用此类在创建后更改Web视图的配置。
这与苹果提供的使用WKWebView的示例(https://developer.apple.com/documentation/webkit/wkwebview)相符,您可以看到将WKWebViewConfiguration传递给WKWebView进行设置。我已经添加了playsinline作为您的示例。
import UIKit
import WebKit
class ViewController: UIViewController, WKUIDelegate {
    
    var webView: WKWebView!
    
    override func loadView() {
        let webConfiguration = WKWebViewConfiguration()
        webConfiguration.allowsInlineMediaPlayback = true //** Added as an example for your case
        webView = WKWebView(frame: .zero, configuration: webConfiguration)
        webView.uiDelegate = self
        view = webView
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let myURL = URL(string:"https://www.apple.com")
        let myRequest = URLRequest(url: myURL!)
        webView.load(myRequest)
    }}

似乎更合理的做法是禁止后续设置属性,以避免混淆,但从文档中看来,这就是它的工作方式。

谢谢您的回复。它完美地解决了我的问题。我现在唯一遇到的问题是,如果允许用户使用本机播放器进行播放,控件将永远不会被禁用,用户可以跳过整个视频。 - Matias Barrios
@MatiasBarrios - 你能详细解释一下吗?因为我不确定我理解了。 - Mick
@MatiasBarrios - 好的,我想你指的是现在可以禁用嵌入YouTube视频上的控件吗?如果是的话,我会发布一个新问题专门询问这个问题,尽管我认为你可能会发现当前的YouTube政策并不支持这一点(例如 https://dev59.com/pFUK5IYBdhLWcg3w4jMv#52767228)。 - Mick
这花费了我4个小时的生命——非常感谢你解决了它! - MichiZH
1
我发现如果WKWebView在xib中创建,更新的配置可能无效,我必须在XIB的“Attribute inspector”中“勾选”“Inline Playback”,然后它就可以正常工作了。 - benleung
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接