La lecture automatique de fichiers audio sur un iPad avec HTML5
Je vais essayer d'obtenir un fichier audio pour la lecture automatique de Safari sur l'iPad. Si je vais à la page à l'aide de Safari sur mon Mac, c'est bien. Sur l'iPad, la lecture automatique ne fonctionne pas.
- Ce n'est pas une réponse, mais juste une observation. Quand j'ai mis WireShark sur ma connexion à l'iPad, j'ai remarqué que ça ne serait pas la lecture automatique, mais est toujours téléchargé le fichier Wave de toute façon. La première HTTP Get demande juste pour les 2 premiers octets du fichier, mais alors l'iPad demande pour le reste de la Vague de fichier de plus de requêtes Get. Ce qui est encore plus étrange, c'est lorsque vous cliquez sur le bouton "Jouer" de la composante Audio de l'iPad recharge le fichier Wave de nouveau.
Vous devez vous connecter pour publier un commentaire.
Mise à JOUR: C'est un hack et il ne marche plus sur IOS 4.X et au-dessus. Ce un travaillé sur IOS 3.2.X.
Il n'est pas vrai. Apple ne veut pas de lecture automatique de la vidéo et l'audio sur IPad en raison de la forte quantité de trafic que vous pouvez utiliser sur les réseaux mobiles. Je ne voudrais pas utiliser l'exécution automatique pour le contenu en ligne. Hors ligne d'un site HTML c'est une grande fonctionnalité et c'est ce que je l'ai utilisé pour.
Voici une "javascript faux cliquez sur" solution: http://www.roblaplaca.com/examples/html5AutoPlay/
Copie & Collé le Code du site:
Ce n'est pas ma source. J'ai trouvé ça il y a quelques temps et testé le code sur un IPad et un IPhone avec IOS 3.2.X.
Je tiens aussi à souligner que la raison pour laquelle vous ne pouvez pas le faire c'est une décision d'affaires que Apple a fait, pas une décision technique. À savoir, il n'y avait pas rationnel justification technique pour Apple pour désactiver le son de web apps sur l'iPod Touch. C'est un appareil WiFi uniquement, pas un téléphone qui peut engager de coûteux frais de bande passante, pour que l'argument n'a aucun mérite pour ce périphérique. Ils peuvent dire qu'ils aident avec le réseau WiFi de gestion, mais des problèmes avec la bande passante sur mon réseau WiFi est mon problème, pas d'Apple.
Aussi, si ce qu'ils se souciaient vraiment de a été contre les, excessive consommation de bande passante, ils fournissent un cadre pour permettre aux utilisateurs d'opt-in pour les applications web de sons. Aussi, ils devaient faire quelque chose pour restreindre les sites web de la consommation de l'équivalent de la bande passante par d'autres moyens. Mais il n'y a pas de telles restrictions. Un site web peut télécharger de gros fichiers en arrière-plan sur et sur et Apple ne s'intéressent pas à ce sujet. Et enfin, je crois que les sons peuvent être téléchargés de toute façon, donc PAS de bande PASSANTE EST en FAIT ENREGISTRÉ! Apple vient de ne pas leur permettre de jouer automatiquement sans interaction de l'utilisateur, les rendant inutilisables pour les jeux, ce qui est leur véritable intention.
Apple a bloqué son, parce qu'ils ont commencé à remarquer que les applications HTML5 peuvent être tout aussi capables que les applications natives, si ce n'est plus. Si vous voulez du son dans les Applications Web, vous devez hall d'Apple d'arrêter d'être anti-concurrentiel comme Microsoft. Il n'y a pas de problème technique qui peut être fixe ici.
Apple fâcheusement rejette beaucoup de HTML5 standards du web sur leurs appareils iOS, pour une variété de raisons. En fin de compte, vous ne pouvez pas pré-charge ou de l'auto-lire des fichiers audio avant un événement de touche, il ne joue qu'un seul son à la fois, et il ne prend pas en charge le format Ogg/Vorbis. Cependant, j'ai trouvé une chouette solution pour vous permettre d'avoir un peu plus de contrôle sur l'audio.
Fondamentalement, vous commencez à jouer le fichier audio sur le tout premier événement de touche, alors vous interrompez immédiatement. Maintenant, vous pouvez utiliser le soundHandle.play() et soundHandle.pause() commandes tout au long de votre Javascript et de contrôle de l'audio sans toucher les événements. Si vous pouvez de temps à la perfection, juste le mettre en pause viennent juste après le son est plus. Alors la prochaine fois que vous jouerez à nouveau, il va revenir au début. Cela ne va pas résoudre tous les mess Apple a fait ici, mais c'est une solution.
Comme de l'iOS 4.2.1, ni le faux cliquez sur ni l' .load() astuce va travailler pour la lecture automatique de l'audio sur n'importe quel appareil iOS. La seule option que je connaisse est d'amener l'utilisateur à effectuer une action du clic et de commencer la lecture dans le gestionnaire d'événements click sans emballage de la .play() appel dans quoi que ce soit asynchrone (ajax, setTimeout, etc).
Quelqu'un s'il vous plaît dites-moi si je me trompe. J'ai eu de travail des échappatoires pour iPad et iPhone avant la plus récente mise à jour, et tous regardent comme ils ont été fermés.
<video>
avec 4.2.1, j'ai vérifié que tant que le.load()
puis.play()
venir à l'intérieur d'un synchrone cliquez/appuyez sur gestionnaire, il va fonctionner. Sinon, il échoue.Je confirme que l'audio ne fonctionne pas comme décrit (au moins sur iPad exécutant 4.3.5). La question spécifique de l'est de l'audio ne se charge pas dans une méthode asynchrone (ajax, événement timer, etc) mais il jouera s'il a été préchargé. Le problème est la charge doit être sur un déclenchées par l'utilisateur de l'événement. Donc, si vous pouvez avoir un bouton permettant à l'utilisateur de lancer la lecture, vous pouvez faire quelque chose comme:
Alors à jouer, par exemple, dans une requête ajax, vous pouvez le faire
Pas la plus grande solution, mais il peut aider, surtout en sachant que le coupable est la fonction de charge dans un non-utilisateur-événement déclenché.
Edit: j'ai trouvé d'Apple explication, et elle affecte iOS 4+:
http://developer.apple.com/library/safari/#documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/Device-SpecificConsiderations/Device-SpecificConsiderations.html
Essayez d'appeler le .la méthode load() avant de l' .méthode play() sur l'audio ou de la vidéo tag... qui sera HTMLAudioElement ou HTMLVideoElement respectivement. C'était la seule façon dont il pourrait fonctionner sur l'iPad pour moi!
De lecture automatique ne fonctionne pas sur iPad ou iPhone pour la vidéo ou de l'audio tags. C'est une restriction mise en place par Apple pour enregistrer les utilisateurs de la bande passante.
Il me semble que la réponse à cette question est (au moins maintenant) clairement documenté sur le Safari HTML5 docs:
De Contrôle de l'utilisateur de Téléchargements Sur les Réseaux Cellulaires
Dans Safari sur iOS (pour tous les appareils, y compris iPad), où l'utilisateur peut être sur un réseau cellulaire, et facturés par unité de données, de précontrainte et de la lecture automatique sont désactivées. Aucune donnée n'est chargé jusqu'à ce que l'utilisateur lance il en. Cela signifie que le JavaScript play() et les méthodes load() sont également inactif jusqu'à ce que l'utilisateur procède à la lecture, à moins que le play() ou la méthode load() est déclenchée par l'action de l'utilisateur. En d'autres termes, une initiative de l'utilisateur bouton de lecture des œuvres, mais onLoad="play()" ne.
Ce joue le film:
<input type="button" value="Play" onClick="document.myMovie.play()">
Cela ne veut rien sur iOS:
<body onLoad="document.myMovie.play()">
Ont perplexe sur ce, tout en développant un prototype rapide web app sous iOS4.2 (dev build). La Solution est en fait assez simple. Notez que vous ne pouvez pas semblent déjà avoir la balise dans votre page HTML, vous devez insérer la balise dans le document de manière dynamique (remarque: cet exemple utilise Prototype de 1,7 pour un peu de Javascript snazziness):
Que vous n'avez pas défini un contrôleur, il ne devrait pas y avoir besoin de faire quelque chose tricksy avec CSS pour masquer /position de hors-écran.
Cela semble fonctionner parfaitement.
Apple ne prend pas en charge la norme complètement, mais il existe une solution de contournement. Leur justification est un réseau cellulaire de la congestion, peut-être parce que vous atterrissez sur les pages de jouer random audio. Ce comportement ne change pas lorsque l'appareil passe sur le wifi, peut-être pour des raisons de cohérence. Par ailleurs, ces pages sont généralement une mauvaise idée de toute façon. Vous ne devriez pas être en train d'essayer de mettre une bande sur chaque page web. C'est tout simplement faux. 🙂
audio html5 va jouer si il est lancé comme le résultat d'une action de l'utilisateur. Le chargement d'une page ne comptent pas. Si vous avez besoin de restructurer votre application web pour être un tout-en-un-page app. Au lieu d'un lien qui ouvre une page qui joue audio, vous avez besoin de ce lien pour le lire sur la page en cours, sans un changement de page. Cette "interaction de l'utilisateur" règle s'applique à l'html5 méthodes que vous pouvez appeler sur un fichier audio ou vidéo de l'élément. Les appels de retour sans aucun effet si elles sont alimentées automatiquement au chargement de la page, mais lorsqu'ils sont appelés à partir de gestionnaires d'événements.
Ma solution est de déclenchement à partir d'un contact réel événement dans un menu précédent. Ils ne vous force pas à utiliser une interface de lecteur de cours. Pour ma part, cela fonctionne bien. Si vous ne disposez pas d'un interface à utiliser, autant que je sache, vous êtes enculer. Peut-être que vous pourriez essayer de l'inclinaison des événements ou quelque chose...
Si vous créez un élément Audio à l'aide de:
Et ajouter un
suspend
écouteur d'événement via:Et puis charger le fichier dans le navigateur Safari mobile (iPad ou iPhone), vous verrez le "suspendu" se connecté à la console développeur. Selon la spec HTML5, ce qui signifie, "l'agent de L'utilisateur est intentionnellement pas actuellement l'extraction de données des médias, mais ne dispose pas de l'ensemble de ressources multimédia téléchargés."
L'appel d'une suite un.load(), le test de la "en jeu" de l'événement, puis à l'aide d'un.play() semble être une méthode appropriée pour l'auto déclencher le son.
Fonctionne avec jQuery, testé sur Ipad, v. 5.1.1
Vous avez à ajouter/supprimer l'élément vidéo à partir de la page.
J'ai traité ce par la fixation d'un gestionnaire d'événements pour tous les événements pour lesquels vous êtes autorisé à déclencher un signal audio de l'élément de corps qui déclenche tout code html des éléments audio avec la lecture automatique à jouer une fois.
Cela semble fonctionner:
Le voir en action ici: http://www.johncoles.co.uk/ipad/test/1.html (Archivé)
Comme de l'iOS 4.2, ce ne sont plus des œuvres. Désolé.