Estou tentando criar um player de vídeo que funcione em qualquer lugar. até agora eu estaria indo com:
<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 visto em vários sites, por exemplo, vídeo para todos ) até agora, tudo bem.
mas agora também quero algum tipo de playlist / menu junto com o player de vídeo, no qual posso selecionar outros vídeos. esses devem ser abertos dentro do meu player imediatamente. então terei que "mudar dinamicamente a fonte do vídeo" (como pode ser visto em dev.opera.com/articles/everything-you-need-to-know-html5-video-audio/ - section "Vamos ver outro filme ") com javascript. vamos esquecer a parte do flashplayer (e, portanto, o IE) por enquanto, tentarei lidar com isso mais tarde.
então meu JS para alterar as <source>
tags deve 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>
O problema é que isso não funciona em todos os navegadores. ou seja, firefox = O existe uma página agradável, onde você pode observar o problema que estou tendo: http://www.w3.org/2010/05/video/mediaevents.html
Assim que eu acionar o método load () (no firefox, lembre-se), o player de vídeo morre.
agora descobri que quando não uso várias <source>
tags, mas apenas um atributo src dentro da <video>
tag, tudo funciona no firefox.
portanto, meu plano é apenas usar esse atributo src e determinar o arquivo apropriado usando a função canPlayType () .
estou fazendo errado de alguma forma ou complicando as coisas?
fonte
<source>
tags. Então suponho que seria mais fácilRespostas:
Eu odiava todas essas respostas porque eram muito curtas ou dependiam de outras estruturas.
Aqui está o "one" modo JS de baunilha JS de fazer isso, trabalhando no Chrome, teste em outros navegadores:
http://jsfiddle.net/mattdlockyer/5eCEu/2/
HTML:
JS:
fonte
Modernizr funcionou como um encanto para mim.
O que eu fiz é que não usei
<source>
. De alguma forma, isso estragou tudo, pois o vídeo funcionou apenas na primeira vez em que load () foi chamado. Em vez disso, usei o atributo source dentro da tag video -><video src="blabla.webm" />
e usei o Modernizr para determinar qual formato o navegador suportava.Espero que isso ajude você :)
Se você não quiser usar o Modernizr , sempre poderá usar CanPlayType () .
fonte
Seu plano original soa bem para mim. Você provavelmente encontrará mais peculiaridades do navegador que lidam com o gerenciamento dinâmico dos
<source>
elementos, conforme indicado aqui na nota de especificação do W3:http://dev.w3.org/html5/spec/Overview.html#the-source-element
fonte
Eu resolvi isso com este método simples
fonte
Em vez de fazer com que o mesmo player de vídeo carregue novos arquivos, por que não apagar o
<video>
elemento inteiro e recriá-lo. A maioria dos navegadores irá carregá-lo automaticamente se os src's estiverem corretos.Exemplo (usando Prototype ):
fonte
Basta colocar uma div e atualizar o conteúdo ...
fonte
De acordo com as especificações
Então, aparentemente, o que você está tentando fazer não deve funcionar.
fonte
Yaur: Embora o que você copiou e colou seja um bom conselho, isso não significa que é impossível alterar o elemento de origem de um elemento de vídeo HTML5 com elegância, mesmo no IE9 (ou IE8). (Esta solução NÃO envolve substituindo todo o elemento de vídeo, pois é uma prática ruim de codificação).
Uma solução completa para alterar / alternar vídeos em tags de vídeo HTML5 via javascript pode ser encontrada aqui e é testada em todos os navegadores HTML5 (Firefox, Chrome, Safari, IE9, etc.).
Se isso ajudar, ou se você estiver com problemas, entre em contato.
fonte
Eu venho com isso para mudar a fonte de vídeo dinamicamente. O evento "canplay" em algum momento não é acionado no Firefox, então eu adicionei "loadingmetadata". Também faço uma pausa no vídeo anterior, se houver um ...
fonte
canplay
nemcanplaythrough
elodedmetadata
necessidades a ser adicionado (e removido mais tarde) para os manipuladores de vídeo :-(Esta é a minha solução:
fonte
O uso das
<source />
tags foi difícil para mim no Chrome 14.0.835.202 especificamente, embora tenha funcionado bem no FireFox. (Essa pode ser minha falta de conhecimento, mas achei que uma solução alternativa poderia ser útil de qualquer maneira.) Então, acabei usando uma<video />
tag e definindo o atributo src diretamente na tag de vídeo. ocanPlayVideo('<mime type>')
função foi usada para determinar se o navegador específico poderia ou não reproduzir o vídeo de entrada. O seguinte funciona no FireFox e no Chrome.Incidentemente, o FireFox e o Chrome estão reproduzindo o formato "ogg", embora o Chrome recomende "webm". Marquei primeiro o suporte ao navegador "ogg" apenas porque outras postagens mencionaram que o FireFox prefere a fonte ogg primeiro (ou seja
<source src="..." type="video/ogg"/>
). Mas não testei (e duvido muito) se a ordem no código faz alguma diferença ao definir o "src" na tag de vídeo.HTML
Javascript
fonte
Eu tenho pesquisado isso por um bom tempo e estou tentando fazer a mesma coisa, então espero que isso ajude outra pessoa. Eu tenho usado o crossbrowsertesting.com e literalmente testando isso em quase todos os navegadores conhecidos pelo homem. A solução que tenho atualmente funciona no Opera, Chrome, Firefox 3.5+, IE8 +, iPhone 3GS, iPhone 4, iPhone 4s, iPhone 5, iPhone 5s, iPad 1+, Android 2.3+, Windows Phone 8.
Fontes de mudança dinâmica
A alteração dinâmica do vídeo é muito difícil e, se você quiser um substituto do Flash, será necessário remover o vídeo do DOM / página e adicioná-lo novamente para que o Flash seja atualizado, pois o Flash não reconhecerá atualizações dinâmicas nos vars do Flash. Se você usar o JavaScript para alterá-lo dinamicamente, eu removeria completamente todos os
<source>
elementos e apenascanPlayType
osrc
definiria em JavaScript e /break
oureturn
após o primeiro tipo de vídeo suportado, e não esqueça de atualizar dinamicamente o flash var mp4. Além disso, alguns navegadores não registram que você alterou a fonte, a menos que você liguevideo.load()
. Acredito que o problema que.load()
você estava enfrentando pode ser corrigido ligando primeirovideo.pause()
. A remoção e a adição de elementos de vídeo podem desacelerar o navegador, porque ele continua armazenando o buffer do vídeo removido, mas há uma solução alternativa .Suporte entre navegadores
Quanto à parte real do navegador, cheguei ao Video For Everybody também. Eu já experimentei o plugin MediaelementJS Wordpress, que acabou causando muito mais problemas do que resolveu. Eu suspeito que os problemas foram devido ao plug-in Wordpress e não a biblioteca realmente. Estou tentando encontrar algo que funcione sem JavaScript, se possível. Até agora, o que eu vim é esse HTML simples:
Notas importantes :
<source>
porque o Mac OS Firefox pára de tentar reproduzir o vídeo se encontrar um MP4 como o primeiro<source>
.video/ogg
, não devem servideo/ogv
.iphone.mp4
arquivo é para o iPhone 4+, que reproduz apenas vídeos MPEG-4 com vídeo H.264 Baseline 3 Video e áudio AAC. O melhor transcodificador que encontrei para esse formato é o Handbrake, usando a predefinição do iPhone e iPod Touch funcionará no iPhone 4+, mas para que o iPhone 3GS funcione, é necessário usar a predefinição do iPod, que possui uma resolução muito mais baixa que eu adicioneivideo.iphone3g.mp4
.media
atributo nos<source>
elementos para segmentar dispositivos móveis com consultas de mídia, mas agora os dispositivos Apple e Android mais antigos não o suportam o suficiente.Editar :
fonte
Eu tenho um aplicativo da web semelhante e não estou enfrentando esse tipo de problema. O que eu faço é algo como isto:
Então, quando eu quero mudar as fontes, tenho uma função que faz algo como isto:
Eu faço isso para que o usuário possa percorrer uma lista de reprodução, mas você pode verificar o userAgent e carregar o arquivo apropriado dessa maneira. Tentei usar várias tags de origem, como todo mundo sugeriu na internet, mas achei muito mais limpo e muito mais confiável manipular o atributo src de uma única tag de origem. O código acima foi gravado a partir da memória, portanto, posso ter encoberto alguns detalhes do hte, mas a idéia geral é alterar dinamicamente o atributo src da tag de origem usando javascript, quando apropriado.
fonte
Tente mover a fonte OGG para o topo. Notei que o Firefox às vezes fica confuso e para o player quando o que ele quer tocar, OGG, não é o primeiro.
Vale a pena tentar.
fonte
Outra maneira de fazer no Jquery.
HTML
Jquery
fonte
Usando JavaScript e jQuery:
fonte