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
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.
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)
}*/
}
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.
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];
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)