Pouvez-vous lire automatiquement les vidéos HTML5 sur l'iPad?
L'attribut <video>
tags autoplay="autoplay"
fonctionne bien dans Safari.
Lors du test sur un iPad, La vidéo doit être activée manuellement.
Je pensais que c'était un problème de chargement, alors j'ai lancé une boucle pour vérifier l'état du média:
videoPlay: function(){
var me = this;
console.log('STATE: ' + $("#periscopevideo").get(0).readyState);
if ($("#periscopevideo").get(0).readyState != 4){
setTimeout(function(){me.videoPlay();}, 300);
}
else {
$("#periscopevideo").get(0).play();
}
}
L'état reste à 0
sur l'iPad. Sur mon bureau safari, il passe par 0
, 1
et enfin 4
.
Sur l'iPad, il n'atteint 4
que si je tape manuellement sur la flèche "play".
De plus, en appelant $("#periscopevideo").get(0).play()
à partir d'un clic via onClick
fonctionne aussi.
Y at-il des restrictions par Apple en ce qui concerne autoplay? (Je cours iOS 5+ en passant).
6 réponses
Mise à jour IOS 10
L'interdiction de lecture automatique a été levée à partir d'iOS 10 - mais avec certaines restrictions (par exemple, A peut être Lecture automatique s'il n'y a pas de piste audio).
Pour voir la liste complète de ces restrictions, consultez les documents officiels: https://webkit.org/blog/6784/new-video-policies-for-ios/
IOS 9 et avant de
Depuis iOS 6.1, il n'est plus possible de lire automatiquement des vidéos sur l'iPad.
Mon hypothèse quant à pourquoi ils ont désactivé la fonction de lecture automatique?
Eh bien, comme de nombreux propriétaires d'appareils ont des limites d'utilisation des données/bande passante sur leurs appareils, Je pense Qu'Apple a estimé que l'utilisateur lui-même devrait décider quand ils initient l'utilisation de la bande passante.
Après un peu de recherche, j'ai trouvé l'extrait suivant dans la documentation D'Apple en ce qui concerne la lecture automatique sur les appareils iOS pour confirmer mon hypothèse:
"Apple a pris la décision de désactiver la lecture automatique de la vidéo sur iOS périphériques, à travers les implémentations de script et d'attribut.
Dans Safari, sur iOS (pour tous les appareils, y compris l'iPad), où l'utilisateur peut être sur un réseau cellulaire et être chargé par unité de données, précharge et la lecture automatique est désactivée. Aucune donnée n'est chargée tant que l'utilisateur ne l'a pas initiée." - la documentation d'Apple.
Voici un avertissement distinct présenté sur le Safari HTML5 page de référence pourquoi les médias intégrés ne peuvent pas être lus dans Safari sur iOS:
Avertissement : pour empêcher les téléchargements non sollicités sur les réseaux cellulaires à frais de l'utilisateur, les médias intégrés ne peuvent pas être lus automatiquement dans Safari sur iOS-l'utilisateur lance toujours la lecture. Un contrôleur est automatiquement fourni sur iPhone ou iPod touch Une fois la lecture en lancé, mais pour iPad, vous devez soit définir l'attribut controls ou fournir un contrôleur en utilisant JavaScript.
Ce que cela signifie en termes de code) est les méthodes play()
et load()
de Javascript sont inactives jusqu'à ce que l'utilisateur initie la lecture, à moins que la méthode play()
ou load()
ne soit déclenchée par une action de l'utilisateur (par exemple un événement de clic).
Fondamentalement, un bouton de lecture initié par l'utilisateur fonctionne, mais
un événement onLoad="play()"
ne le fait pas.
Par exemple, cela jouerait le film:
<input type="button" value="Play" onclick="document.myMovie.play()">
Alors que ce qui suit ne ferait rien sur iOS:
<body onload="document.myMovie.play()">
Je veux commencer par dire en disant que je me rends compte que cette question Est ancienne et a déjà une réponse acceptée; mais, en tant qu'internaute malheureux qui a utilisé cette question comme un moyen de finir seulement pour être prouvé mal peu de temps après (mais pas avant que je fâche un peu mon client) je veux ajouter mes pensées et
Alors que @ DSG et @Giona sont corrects, et qu'il n'y a rien de mal à leurs réponses, il existe un mécanisme créatif que vous pouvez utiliser pour "se déplacer", pour ainsi dire, ceci limitation. Ce n'est pas dire que je tolère le contournement de cette fonctionnalité, bien au contraire, mais juste quelques mécanismes pour qu'un utilisateur "se sente" comme si un fichier vidéo ou audio était "lecture automatique"."
Le travail rapide consiste à cacher une balise vidéo quelque part sur la page mobile, puisque j'ai construit un site réactif, Je ne le fais que pour les petits écrans. La balise vidéo (exemples HTML et jQuery):
HTML
<video id="dummyVideo" src="" preload="none" width="1" height="2"></video>
JQuery
var $dummyVideo = $("<video />", {
id: "dummyVideo",
src: "",
preload: "none",
width: "1",
height: "2"
});
Avec cela caché sur la page, lorsqu'un utilisateur "clics" pour regarder un film (toujours l'interaction de l'utilisateur, il n'y a aucun moyen de contourner cette exigence) au lieu de naviguer vers une page de montre secondaire, je charge la vidéo cachée. Cela fonctionne principalement parce que la balise media n'est pas vraiment utilisée mais plutôt promue à une instance Quicktime, donc avoir un élément vidéo visible n'est pas nécessaire du tout. Dans le gestionnaire pour "click" (ou "touchend" sur mobile).
$(".movie-container").on("click", function() {
var url = $(this).data("stream-url");
$dummyVideo.attr("src", url);
$dummyVideo.get(0).load(); // required if src changed after page load
$dummyVideo.get(0).play();
});
Et Alto. En ce qui concerne UX va, un utilisateur clique sur une vidéo pour jouer et QuickTime ouvre la lecture la vidéo qu'ils ont choisi. Cela reste dans la limite que les vidéos ne peuvent être lues que via l'action de l'utilisateur, donc je ne force pas les données sur quiconque ne décide pas de regarder une vidéo avec ce service. J'ai découvert cela en essayant de comprendre comment exactement Youtube a tiré cela avec leur mobile qui est essentiellement un très bon bâtiment de page Javascript et un élément de fantaisie se cachant comme dans le cas de la balise vidéo.
Tl; dr Voici une "solution de contournement" pour essayer de créer un UX" autoplay" fonctionnalité sur les appareils iOS sans aller au-delà des limites D'Apple et toujours avoir les utilisateurs décident s'ils veulent regarder une vidéo (ou audio plus likey, bien que je ne l'ai pas testé) eux-mêmes sans avoir un juste chargé sans leur permission.
Aussi, à la personne qui a commenté cela est de sleep.fm, cela n'aurait malheureusement pas été une solution à vos problèmes qui est la lecture audio basée sur le temps.
J'espère que quelqu'un trouvera cette information utile, il aurait m'a sauvé une semaine de mauvaise livraison de nouvelles à un client qui était catégorique qu'ils ont cette fonctionnalité et j'ai été heureux de trouver un moyen de le livrer à la fin.
Modifier
D'autres résultats indiquent que la solution de contournement ci-dessus concerne uniquement les appareils iPhone/iPod. L'iPad lit la vidéo dans Safari avant qu'elle ne soit entièrement visionnée, vous aurez donc besoin d'un mécanisme pour redimensionner la vidéo en cliquant avant de la lire, sinon vous finirez avec de l'audio et aucune vidéo.
Juste ensemble
webView.mediaPlaybackRequiresUserAction = NO;
La lecture automatique fonctionne pour moi sur iOS.
Depuis iOS 10, les vidéos maintenant peuvent lecture automatique, mais seulement d'entre elles sont soit en sourdine, ou n'ont pas de piste audio. Yay!!!
En bref:
-
<video autoplay>
les éléments honoreront maintenant l'attribut autoplay, pour éléments qui remplissent les conditions suivantes:-
<video>
les éléments seront autorisés à jouer automatiquement sans geste de l'utilisateur si leur support source ne contient pas de pistes audio. -
<video muted>
les éléments seront également autorisés à la lecture automatique sans geste de l'utilisateur. - Si un
<video>
l'élément gagne une piste audio ou devient désactivé sans un geste de l'utilisateur, la lecture s'arrête. -
<video autoplay>
les éléments ne commencent à jouer que lorsqu'ils sont visibles à l'écran, par exemple lorsqu'ils défilent dans la fenêtre, visible via CSS, et inséré dans le DOM. -
Les éléments
<video autoplay>
font une pause s'ils deviennent non visibles, par exemple en faisant défiler la fenêtre.
-
Plus d'infos ici: https://webkit.org/blog/6784/new-video-policies-for-ios/
Dans cette référence Safari HTML5 , Vous pouvez lire
Pour empêcher les téléchargements non sollicités sur les réseaux cellulaires frais, les médias intégrés ne peuvent pas être lus automatiquement dans Safari sur iOS - l'utilisateur lance toujours la lecture. Un contrôleur est automatiquement fourni sur iPhone ou iPod touch Une fois la lecture initiée, mais pour iPad vous devez définir l'attribut controls ou fournir un contrôleur utilisant JavaScript.
Laissez d'abord la vidéo en sourdine pour assurer la lecture automatique dans ios, puis activez-la si vous le souhaitez.
<video autoplay loop muted playsinline>
<source src="video.mp4?123" type="video/mp4">
</video>
<script type="text/javascript">
$(function () {
if (!navigator.userAgent.match(/(iPod|iPhone|iPad)/)) {
$("video").prop('muted', false);
}
});
</script>