J'essaye de construire un lecteur vidéo, qui fonctionne partout. jusqu'à présent, j'irais avec:
<video>
<source src="video.mp4"></source>
<source src="video.ogv"></source>
<object data="flowplayer.swf" type="application/x-shockwave-flash">
<param name="movie" value="flowplayer.swf" />
<param name="flashvars" value='config={"clip":"video.mp4"}' />
</object>
</video>
(comme vu sur plusieurs sites, par exemple la vidéo pour tout le monde ) jusqu'à présent, tout va bien.
mais maintenant je veux aussi une sorte de liste de lecture / menu avec le lecteur vidéo, à partir duquel je peux sélectionner d'autres vidéos. ceux-ci devraient être ouverts immédiatement dans mon lecteur. donc je devrai "changer dynamiquement la source de la vidéo" (comme vu sur dev.opera.com/articles/everything-you-need-to-know-html5-video-audio/ - section "Regardons un autre film ") avec javascript. oublions pour le moment la partie flashplayer (et donc IE), j'essaierai de m'en occuper plus tard.
donc mon JS pour changer les <source>
balises devrait être quelque chose comme:
<script>
function loadAnotherVideo() {
var video = document.getElementsByTagName('video')[0];
var sources = video.getElementsByTagName('source');
sources[0].src = 'video2.mp4';
sources[1].src = 'video2.ogv';
video.load();
}
</script>
Le problème est que cela ne fonctionne pas dans tous les navigateurs. à savoir, firefox = O il y a une belle page, où vous pouvez observer le problème que j'ai: http://www.w3.org/2010/05/video/mediaevents.html
dès que je déclenche la méthode load () (dans Firefox, remarquez), le lecteur vidéo meurt.
maintenant, j'ai découvert que lorsque je n'utilise pas plusieurs <source>
balises, mais qu'un seul attribut src dans la <video>
balise, tout fonctionne dans Firefox.
donc mon plan est d'utiliser simplement cet attribut src et de déterminer le fichier approprié en utilisant la fonction canPlayType () .
est-ce que je fais mal ou complique les choses?
la source
<source>
balises. alors je suppose que ce serait plus facileRéponses:
J'ai détesté toutes ces réponses parce qu'elles étaient trop courtes ou reposaient sur d'autres cadres.
Voici "une" façon vanilla JS de faire cela, fonctionnant dans Chrome, veuillez tester dans d'autres navigateurs:
http://jsfiddle.net/mattdlockyer/5eCEu/2/
HTML:
JS:
la source
Modernizr a fonctionné comme un charme pour moi.
Ce que j'ai fait, c'est que je ne l'ai pas utilisé
<source>
. D'une manière ou d'une autre, cela a foiré les choses, car la vidéo ne fonctionnait que la première fois que load () était appelée. Au lieu de cela, j'ai utilisé l'attribut source à l'intérieur de la balise vidéo -><video src="blabla.webm" />
et utilisé Modernizr pour déterminer le format pris en charge par le navigateur.J'espère que cela vous aidera :)
Si vous ne souhaitez pas utiliser Modernizr , vous pouvez toujours utiliser CanPlayType () .
la source
Votre plan original me convient. Vous trouverez probablement plus de bizarreries de navigateur traitant de la gestion dynamique des
<source>
éléments, comme indiqué ici par la note de spécification W3:http://dev.w3.org/html5/spec/Overview.html#the-source-element
la source
J'ai résolu cela avec cette méthode simple
la source
Au lieu d'avoir le même lecteur vidéo pour charger de nouveaux fichiers, pourquoi ne pas effacer tout l'
<video>
élément et le recréer. La plupart des navigateurs le chargeront automatiquement si les src sont corrects.Exemple (avec Prototype ):
la source
Il suffit de mettre un div et de mettre à jour le contenu ...
la source
Selon les spécifications
Donc, ce que vous essayez de faire n'est apparemment pas censé fonctionner.
la source
Yaur: Bien que ce que vous avez copié et collé soit un bon conseil, cela ne signifie pas qu'il est impossible de changer l'élément source d'un élément vidéo HTML5 avec élégance, même dans IE9 (ou IE8 d'ailleurs). (Cette solution n'implique PAS remplacer tout l'élément vidéo, car il s'agit d'une mauvaise pratique de codage).
Une solution complète pour changer / changer de vidéo dans les balises vidéo HTML5 via javascript peut être trouvée ici et est testée dans tous les navigateurs HTML5 (Firefox, Chrome, Safari, IE9, etc.).
Si cela vous aide ou si vous rencontrez des problèmes, faites-le moi savoir.
la source
Je viens avec cela pour changer la source vidéo de manière dynamique. L'événement "canplay" ne se déclenche parfois pas dans Firefox, j'ai donc ajouté "sharedmetadata". Aussi je mets en pause la vidéo précédente s'il y en a une ...
la source
canplay
nicanplaythrough
etlodedmetadata
doit être ajouté (et supprimé plus tard) aux gestionnaires vidéo :-(Voici ma solution:
la source
L'utilisation des
<source />
balises s'est avérée difficile pour moi dans Chrome 14.0.835.202 en particulier, même si cela a bien fonctionné pour moi dans FireFox. (Cela pourrait être mon manque de connaissances, mais je pensais qu'une solution alternative pourrait être utile de toute façon.) Donc, j'ai fini par utiliser simplement une<video />
balise et définir l'attribut src directement sur la balise vidéo elle-même. LacanPlayVideo('<mime type>')
fonction a été utilisée pour déterminer si le navigateur spécifique pouvait ou non lire la vidéo d'entrée. Ce qui suit fonctionne dans FireFox et Chrome.Incidemment, FireFox et Chrome utilisent le format "ogg", bien que Chrome recommande "webm". J'ai mis la vérification du support du navigateur de "ogg" en premier uniquement parce que d'autres messages ont mentionné que FireFox préfère la source ogg en premier (c'est-à-dire
<source src="..." type="video/ogg"/>
). Mais, je n'ai pas testé (et je doute fortement) que l'ordre dans le code fasse une différence lors de la définition du "src" sur la balise vidéo.HTML
JavaScript
la source
Je fais des recherches sur ce sujet depuis un bon moment et j'essaie de faire la même chose, alors j'espère que cela aidera quelqu'un d'autre. J'utilise crossbrowsertesting.com et je le teste littéralement dans presque tous les navigateurs connus de l'homme. La solution dont je dispose actuellement fonctionne sous Opera, Chrome, Firefox 3.5+, IE8 +, iPhone 3GS, iPhone 4, iPhone 4s, iPhone 5, iPhone 5s, iPad 1+, Android 2.3+, Windows Phone 8.
Sources à changement dynamique
La modification dynamique de la vidéo est très difficile, et si vous voulez une solution de secours Flash, vous devrez supprimer la vidéo du DOM / page et la rajouter pour que Flash se mette à jour car Flash ne reconnaîtra pas les mises à jour dynamiques des variables Flash. Si vous allez utiliser JavaScript pour le modifier dynamiquement, je supprimerais complètement tous les
<source>
éléments et je l'utiliserais simplementcanPlayType
pour définir lesrc
dans JavaScript et /break
oureturn
après le premier type de vidéo pris en charge et n'oubliez pas de mettre à jour dynamiquement le flash var mp4. De plus, certains navigateurs n'enregistrent pas que vous avez changé la source à moins que vous n'appeliezvideo.load()
. Je pense que le problème que.load()
vous rencontrez peut être résolu en appelant d'abordvideo.pause()
. La suppression et l'ajout d'éléments vidéo peuvent ralentir le navigateur car il continue de mettre en mémoire tampon la vidéo supprimée, mais il existe une solution de contournement .Prise en charge de plusieurs navigateurs
En ce qui concerne la partie réelle de plusieurs navigateurs, je suis également arrivé à Video For Everybody . J'ai déjà essayé le plugin MediaelementJS Wordpress, qui s'est avéré causer beaucoup plus de problèmes qu'il n'en a résolu. Je soupçonne que les problèmes étaient dus au plug-in Wordpress et non à la bibliothèque. J'essaie de trouver quelque chose qui fonctionne sans JavaScript, si possible. Jusqu'à présent, ce que j'ai trouvé est ce HTML simple:
Remarques importantes :
<source>
parce que Mac OS Firefox arrête d'essayer de lire la vidéo s'il rencontre un MP4 comme premier<source>
.video/ogg
, nonvideo/ogv
.iphone.mp4
fichier est destiné à l'iPhone 4+, qui ne lira que les vidéos MPEG-4 avec vidéo H.264 Baseline 3 et audio AAC. Le meilleur transcodeur que j'ai trouvé pour ce format est Handbrake, l'utilisation du préréglage iPhone et iPod Touch fonctionnera sur iPhone 4+, mais pour que l'iPhone 3GS fonctionne, vous devez utiliser le préréglage iPod qui a une résolution beaucoup plus basse que j'ai ajoutéevideo.iphone3g.mp4
.media
attribut sur les<source>
éléments pour cibler les appareils mobiles avec des requêtes multimédias, mais pour le moment, les anciens appareils Apple et Android ne le prennent pas suffisamment en charge.Modifier :
la source
J'ai une application Web similaire et je ne suis pas du tout confronté à ce genre de problème. Ce que je fais est quelque chose comme ceci:
puis quand je veux changer les sources, j'ai une fonction qui fait quelque chose comme ceci:
Je fais cela pour que l'utilisateur puisse se frayer un chemin dans une liste de lecture, mais vous pouvez vérifier userAgent puis charger le fichier approprié de cette façon. J'ai essayé d'utiliser plusieurs balises source comme tout le monde le suggérait sur Internet, mais j'ai trouvé beaucoup plus propre et beaucoup plus fiable de manipuler l'attribut src d'une seule balise source. Le code ci-dessus a été écrit à partir de la mémoire, donc j'ai peut-être passé sous silence certains détails, mais l'idée générale est de changer dynamiquement l'attribut src de la balise source en utilisant javascript, le cas échéant.
la source
Essayez de déplacer la source OGG vers le haut. J'ai remarqué que Firefox se confond parfois et arrête le joueur lorsque celui à qui il veut jouer, OGG, n'est pas le premier.
Ça vaut le coup d'essayer.
la source
Une autre façon de le faire dans Jquery.
HTML
Jquery
la source
Utilisation de JavaScript et jQuery:
la source