web-dev-qa-db-fra.com

Comment lire une vidéo en ligne avec WkWebView

Lorsque vous utilisez un iPhone et lisez une vidéo dans une vue Web, cette vidéo est ouverte dans le lecteur natif en plein écran.

Nous avons essayé UIWebView et WKWebView avec la propriété "allowInlineMediaPlayback" sur true. Mais la vidéo du contenu Web se lance en plein écran avec un iphone iOS 10.2. Avez-vous une idée de ce que je peux faire?

let webConfiguration = WKWebViewConfiguration()
// Fix Fullscreen mode for video and autoplay
webConfiguration.preferences.javaScriptEnabled = true
webConfiguration.mediaPlaybackRequiresUserAction = false
webConfiguration.allowsInlineMediaPlayback = true

webView = WKWebView(frame: CGRect(x: 0, y: 0, width:self.backgroundView.frame.width, height:self.backgroundView.frame.height), configuration: webConfiguration)

Env: Xcode 8, Swift 3

18
UBLearn

Il n'y a pas de problème pour votre code, mais vous avez besoin d'une étape supplémentaire, la vidéo URL que vous utilisez doit toujours avoir un paramètre playsinline=1.

//step1
if let videoURL:URL = URL(string: "https://somevideo.mp4?playsinline=1")
//step2
webConfiguration.allowsInlineMediaPlayback = true

alors vous pouvez faire les choses à gauche.

13
onewh

Voici une solution comme vous le souhaitez, je crée un lecteur par programmation et je change du code, pour lire la vidéo en ligne.

var myPlayer: WKWebView!

    override func viewDidLoad() {
        super.viewDidLoad()

        let webConfiguration = WKWebViewConfiguration()
        webConfiguration.allowsInlineMediaPlayback = true
        webConfiguration.mediaTypesRequiringUserActionForPlayback = []

        myPlayer = WKWebView(frame: CGRect(x: 0, y: 0, width: 375, height: 300), configuration: webConfiguration)
        self.view.addSubview(myPlayer)

        if let videoURL:URL = URL(string: "https://www.youtube.com/embed/9n1e1N0Sa9k?playsinline=1") {
             let request:URLRequest = URLRequest(url: videoURL)
             myPlayer.load(request)
        }

        //OR to show player control also, use this
        /*if let videoURL:URL = URL(string: "https://www.youtube.com/embed/9n1e1N0Sa9k?playsinline=1&controls:1") {
             let request:URLRequest = URLRequest(url: videoURL)
             myPlayer.load(request)
        }*/
    }
6
Hardik Thakkar

J'ai fini par le faire:

func load(url: String) {
    let html = "<video playsinline controls width=\"100%\" src=\"\(url)\"> </video>"
    self.webView.loadHTMLString(html, baseURL: nil)
}

Chargez la vue Web au format HTML et ajoutez des balises vidéo pour personnaliser l'UX.

4

Voici la meilleure façon de le faire sans avoir besoin d'une chaîne HTML. Nous avons également ajouté une vidéo de test hébergée sur archive.org afin que vous puissiez éviter le spectacle d'horreur vidéo de test de big buck bunny:

Swift 4:

if let mediaURL:URL = URL(string: "https://ia800307.us.archive.org/14/items/electricsheep-flock-244-32500-9/00244%3D32649%3D22645%3D23652_512kb.mp4") {
    let request:URLRequest = URLRequest(url: mediaURL);
    self.webView.load(request)
}

Obj-C:

NSURL *mediaURL = [NSURL URLWithString:@"https://ia800307.us.archive.org/14/items/electricsheep-flock-244-32500-9/00244%3D32649%3D22645%3D23652_512kb.mp4"];

NSURLRequest *request = [NSURLRequest requestWithURL:mediaURL]
[self.webView loadRequest:request];
2
crow

Cela a fonctionné pour moi:

let configuration = WKWebViewConfiguration()
if #available(iOS 10.0, *) {
   configuration.mediaTypesRequiringUserActionForPlayback = []
}
configuration.allowsInlineMediaPlayback = true
let webView = WKWebView(frame: frame, configuration: configuration)
1
Atan