html5 video etiketinde kaynak değiştirme
her yerde çalışan bir video oynatıcı oluşturmaya çalışıyorum. şu ana kadar
<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>
(çeşitli sitelerde görüldüğü gibi, örneğin herkes için video) Şimdiye kadar çok iyi.
ama şimdi video oynatıcıyla birlikte diğer videoları seçebileceğim bir tür oynatma listesi / menü de istiyorum. bunlar hemen oynatıcımda açılmalı. bu yüzden "videonun kaynağını dinamik olarak değiştirmem gerekecek" (dev.opera.com/articles/everything-you-need-to-know-html5-video-audio/ - section "Let's look at another movie") javascript ile değiştirmem gerekecek. flashplayer (ve dolayısıyla IE) kısmını şimdilik unutalım, bununla daha sonra ilgilenmeye çalışacağım.
bu yüzden <source>
etiketlerini değiştirmek için JS'im şöyle bir şey olmalı:
<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>
sorun şu ki, bu tüm tarayıcılarda çalışmıyor. yani, firefox =O yaşadığım sorunu gözlemleyebileceğiniz güzel bir sayfa var: http://www.w3.org/2010/05/video/mediaevents.html
load() yöntemini tetiklediğim anda (firefox'ta, dikkatinizi çekerim), video oynatıcı ölüyor.
şimdi öğrendim ki, birden fazla <source>
etiketi kullanmadığımda, bunun yerine <video>
etiketi içinde sadece bir src niteliği kullandığımda, her şey firefox'ta çalışıyor.
Bu yüzden planım sadece src özelliğini kullanmak ve canPlayType() fonksiyonunu kullanarak uygun dosyayı belirlemek.
Bir şekilde yanlış mı yapıyorum yoksa işleri zorlaştırıyor muyum?
Tüm bu cevaplardan nefret ettim çünkü çok kısaydılar veya başka çerçevelere dayanıyorlardı.
İşte bunu yapmanın "bir" vanilya JS yolu, Chrome'da çalışıyor, lütfen diğer tarayıcılarda test edin:
http://jsfiddle.net/mattdlockyer/5eCEu/2/
HTML:
JS:
Modernizr benim için bir cazibe gibi çalıştı.
Benim yaptığım şey ` ` ve tarayıcının hangi formatı desteklediğini belirlemek için Modernizr kullandım.
kullanmamaktı. Her nasılsa bu işleri berbat etti, çünkü video yalnızca load() ilk kez çağrıldığında çalıştı. Bunun yerine video etiketinin içindeki source niteliğini kullandım ->
Umarım bu size yardımcı olur :)
Eğer Modernizr kullanmak istemiyorsanız, her zaman CanPlayType() kullanabilirsiniz.
Orijinal planınız bana iyi görünüyor. Burada W3 spec notunda belirtildiği gibi, muhtemelen
< source >
öğelerinin dinamik olarak yönetilmesiyle ilgili daha fazla tarayıcı tuhaflığı bulacaksınız:http://dev.w3.org/html5/spec/Overview.html#the-source-element
Bunu şu basit yöntemle çözdüm
Yeni dosyaları yüklemek için aynı video oynatıcıyı almak yerine, neden tüm
<amp-video>
öğesini silip yeniden oluşturmuyorsunuz? Çoğu tarayıcı, src'ler doğruysa otomatik olarak yükleyecektir.Örnek (Prototip kullanılarak):
Spesifikasyona]1 göre
Yani yapmaya çalıştığınız şeyin işe yaramaması gerekiyor.
OGG kaynağını en üste taşımayı deneyin. Firefox'un bazen kafasının karıştığını ve oynatmak istediği OGG ilk sırada olmadığında oynatıcıyı durdurduğunu fark ettim.
Denemeye değer.