Estoy tratando de construir un reproductor de video, que funcione en todas partes. Hasta ahora estaría con:
<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>
(como se ve en varios sitios, por ejemplo, video para todos ) hasta ahora, todo bien.
pero ahora también quiero algún tipo de lista de reproducción / menú junto con el reproductor de video, desde el cual puedo seleccionar otros videos. esos deben abrirse dentro de mi reproductor de inmediato. así que tendré que "cambiar dinámicamente la fuente del video" (como se ve en dev.opera.com/articles/everything-you-need-to-know-html5-video-audio/ - sección "Veamos otra película ") con javascript. Olvidémonos de la parte del flashplayer (y, por lo tanto, IE) por el momento, intentaré lidiar con eso más adelante.
entonces mi JS para cambiar las <source>
etiquetas debería ser algo como:
<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>
El problema es que esto no funciona en todos los navegadores. a saber, firefox = O hay una buena página, donde puedes observar el problema que estoy teniendo: http://www.w3.org/2010/05/video/mediaevents.html
Tan pronto como active el método load () (en Firefox, eso sí), el reproductor de video muere.
ahora he descubierto que cuando no uso varias <source>
etiquetas, sino que solo un atributo src dentro de la <video>
etiqueta, todo funciona en firefox.
así que mi plan es usar ese atributo src y determinar el archivo apropiado usando la función canPlayType () .
¿Lo estoy haciendo mal de alguna manera o estoy complicando las cosas?
fuente
<source>
etiquetas entonces supongo que sería más fácilRespuestas:
Odiaba todas estas respuestas porque eran demasiado cortas o dependían de otros marcos.
Aquí hay una "forma" de JS de vainilla de hacer esto, trabajando en Chrome, pruebe en otros navegadores:
http://jsfiddle.net/mattdlockyer/5eCEu/2/
HTML:
JS:
fuente
Modernizr funcionó como un encanto para mí.
Lo que hice es que no lo usé
<source>
. De alguna manera esto arruinó las cosas, ya que el video solo funcionó la primera vez que se llamó a load (). En cambio, utilicé el atributo de origen dentro de la etiqueta de video -><video src="blabla.webm" />
y utilicé Modernizr para determinar qué formato admitía el navegador.Espero que esto te ayude :)
Si no desea usar Modernizr , siempre puede usar CanPlayType () .
fuente
Tu plan original me suena bien. Probablemente encontrará más peculiaridades del navegador relacionadas con la gestión dinámica de los
<source>
elementos, como se indica aquí en la nota de especificaciones de W3:http://dev.w3.org/html5/spec/Overview.html#the-source-element
fuente
Resolví esto con este método simple
fuente
En lugar de hacer que el mismo reproductor de video cargue nuevos archivos, ¿por qué no borrar todo el
<video>
elemento y recrearlo? La mayoría de los navegadores lo cargarán automáticamente si los src son correctos.Ejemplo (usando Prototype ):
fuente
Simplemente ponga un div y actualice el contenido ...
fuente
De acuerdo a la especificación
Entonces, lo que estás tratando de hacer aparentemente no debe funcionar.
fuente
Yaur: Aunque lo que ha copiado y pegado es un buen consejo, esto no significa que sea imposible cambiar el elemento fuente de un elemento de video HTML5 de manera elegante, incluso en IE9 (o IE8 para el caso). (Esta solución NO involucra reemplazar todo el elemento de video, ya que es una mala práctica de codificación).
Aquí se puede encontrar una solución completa para cambiar / cambiar videos en etiquetas de video HTML5 a través de JavaScript y se prueba en todos los navegadores HTML5 (Firefox, Chrome, Safari, IE9, etc.).
Si esto ayuda, o si tiene problemas, hágamelo saber.
fuente
Vengo con esto para cambiar la fuente de video dinámicamente. El evento "canplay" en algún momento no se activa en Firefox, así que he agregado "metadatos cargados" También detengo el video anterior si hay uno ...
fuente
canplay
tampococanplaythrough
ylodedmetadata
debe agregarse (y eliminarse más tarde) a los controladores de video :-(Esta es mi solución:
fuente
Usar las
<source />
etiquetas me resultó difícil en Chrome 14.0.835.202 específicamente, aunque funcionó bien para mí en Firefox. (Esta podría ser mi falta de conocimiento, pero pensé que una solución alternativa podría ser útil de todos modos). Así que terminé usando una<video />
etiqueta y configurando el atributo src directamente en la etiqueta de video. LacanPlayVideo('<mime type>')
función se usó para determinar si el navegador específico podía reproducir el video de entrada o no. Lo siguiente funciona en Firefox y Chrome.Incidentalmente, tanto FireFox como Chrome reproducen el formato "ogg", aunque Chrome recomienda "webm". Puse el cheque para el soporte del navegador de "ogg" primero solo porque otras publicaciones han mencionado que FireFox prefiere primero la fuente ogg (es decir
<source src="..." type="video/ogg"/>
). Pero no he probado (y dudo mucho) si el orden en el código hace alguna diferencia o no al configurar el "src" en la etiqueta de video.HTML
JavaScript
fuente
He estado investigando esto durante bastante tiempo y estoy tratando de hacer lo mismo, así que espero que esto ayude a alguien más. He estado usando crossbrowsertesting.com y literalmente probé esto en casi todos los navegadores conocidos por el hombre. La solución que tengo actualmente funciona en Opera, Chrome, Firefox 3.5+, IE8 +, iPhone 3GS, iPhone 4, iPhone 4s, iPhone 5, iPhone 5s, iPad 1+, Android 2.3+, Windows Phone 8.
Fuentes que cambian dinámicamente
Cambiar dinámicamente el video es muy difícil, y si desea una copia de seguridad de Flash, tendrá que eliminar el video del DOM / página y volver a agregarlo para que Flash se actualice porque Flash no reconocerá las actualizaciones dinámicas de Flash vars. Si usted va a utilizar JavaScript para cambiar de forma dinámica, me gustaría eliminar por completo todos los
<source>
elementos y sólo tiene que utilizarcanPlayType
para establecer elsrc
en JavaScript ybreak
oreturn
después de que el primer tipo de vídeo compatible y no se olvide de actualizar dinámicamente el mp4 de destello var. Además, algunos navegadores no registrarán que ha cambiado la fuente a menos que llamevideo.load()
. Creo que el problema.load()
que estabas experimentando se puede solucionar llamando primerovideo.pause()
. Eliminar y agregar elementos de video puede ralentizar el navegador porque continúa almacenando el video eliminado, pero hay una solución alternativa .Soporte de navegador cruzado
En cuanto a la porción real entre navegadores, también llegué a Video For Everybody . Ya probé el complemento MediaelementJS Wordpress, que resultó causar muchos más problemas de los que resolvió. Sospecho que los problemas se debieron al complemento de Wordpress y no a la biblioteca en realidad. Estoy tratando de encontrar algo que funcione sin JavaScript, si es posible. Hasta ahora, lo que se me ocurrió es este HTML simple:
Notas importantes :
<source>
porque Mac OS Firefox deja de intentar reproducir el video si encuentra un MP4 como el primero<source>
.video/ogg
, novideo/ogv
.iphone.mp4
archivo es para iPhone 4+ que solo reproducirá videos que sean MPEG-4 con H.264 Baseline 3 Video y audio AAC. El mejor transcodificador que encontré para ese formato es Handbrake, usar el preajuste de iPhone y iPod Touch funcionará en iPhone 4+, pero para que el iPhone 3GS funcione, debe usar el preajuste de iPod que tiene una resolución mucho más baja que agreguévideo.iphone3g.mp4
.media
atributo en los<source>
elementos para dirigir dispositivos móviles con consultas de medios, pero en este momento los dispositivos Apple y Android más antiguos no lo admiten lo suficientemente bien.Editar :
fuente
Tengo una aplicación web similar y no estoy enfrentando ese tipo de problema en absoluto. Lo que hago es algo como esto:
entonces, cuando quiero cambiar las fuentes, tengo una función que hace algo como esto:
Hago esto para que el usuario pueda abrirse camino a través de una lista de reproducción, pero puede verificar el UserAgent y luego cargar el archivo apropiado de esa manera. Intenté usar varias etiquetas de origen como sugirieron todos en Internet, pero me pareció mucho más limpio y mucho más confiable manipular el atributo src de una sola etiqueta de origen. El código anterior se escribió desde la memoria, por lo que es posible que haya pasado por alto algunos de los detalles, pero la idea general es cambiar dinámicamente el atributo src de la etiqueta fuente usando JavaScript, cuando sea apropiado.
fuente
Intenta mover la fuente OGG a la parte superior. He notado que Firefox a veces se confunde y detiene al jugador cuando el que quiere jugar, OGG, no es el primero.
Vale la pena intentarlo.
fuente
Otra forma de hacerlo en Jquery.
HTML
Jquery
fuente
Usando JavaScript y jQuery:
fuente