ฉันค้นคว้าเรื่องนี้มาระยะหนึ่งแล้วและฉันก็พยายามทำสิ่งเดียวกันนี้ดังนั้นหวังว่าสิ่งนี้จะช่วยคนอื่นได้ ฉันใช้ crossbrowsertesting.com และทดสอบสิ่งนี้ในเกือบทุกเบราว์เซอร์ที่มนุษย์รู้จัก โซลูชันที่ฉันใช้งานได้ใน Opera, Chrome, Firefox 3.5+, IE8 +, iPhone 3GS, iPhone 4, iPhone 4s, iPhone 5, iPhone 5s, iPad 1+, Android 2.3+, Windows Phone 8
การเปลี่ยนแหล่งที่มาแบบไดนามิก
การเปลี่ยนวิดีโอแบบไดนามิกเป็นเรื่องยากมากและหากคุณต้องการใช้ Flash สำรองคุณจะต้องนำวิดีโอออกจาก DOM / เพจและเพิ่มเข้าไปใหม่เพื่อให้ Flash อัปเดตเนื่องจาก Flash จะไม่รู้จักการอัปเดตแบบไดนามิกสำหรับ Flash vars หากคุณจะใช้ JavaScript เพื่อเปลี่ยนแปลงแบบไดนามิกฉันจะลบ<source>
องค์ประกอบทั้งหมดออกทั้งหมดและใช้canPlayType
เพื่อตั้งค่าsrc
ใน JavaScript และbreak
หรือreturn
หลังจากประเภทวิดีโอแรกที่รองรับและอย่าลืมอัปเดต flash var mp4 แบบไดนามิก video.load()
นอกจากนี้เบราว์เซอร์บางอย่างจะไม่ลงทะเบียนที่คุณเปลี่ยนแหล่งที่มาจนกว่าคุณจะเรียก ฉันเชื่อว่าปัญหาที่.load()
คุณพบสามารถแก้ไขได้ด้วยการโทรครั้งแรกvideo.pause()
. การถอดและการเพิ่มองค์ประกอบวิดีโอสามารถชะลอเบราว์เซอร์เพราะมันยังคงบัฟเฟอร์วิดีโอออก แต่มีวิธีแก้ปัญหา
การสนับสนุนข้ามเบราว์เซอร์
ในส่วนของข้ามเบราว์เซอร์จริงฉันก็มาถึงVideo For Everybodyเช่นกัน ฉันได้ลองใช้ปลั๊กอิน MediaelementJS Wordpress แล้วซึ่งทำให้เกิดปัญหามากกว่าที่จะแก้ไขได้ ฉันสงสัยว่าปัญหาเกิดจากปลั๊กอิน Wordpress ไม่ใช่ไลบรารีจริง ฉันพยายามค้นหาสิ่งที่ใช้งานได้โดยไม่ใช้ JavaScript ถ้าเป็นไปได้ จนถึงตอนนี้สิ่งที่ฉันคิดคือ HTML ธรรมดานี้:
<video width="300" height="150" controls="controls" poster="http://sandbox.thewikies.com/vfe-generator/images/big-buck-bunny_poster.jpg" class="responsive">
<source src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.ogv" type="video/ogg" />
<source src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4" type="video/mp4" />
<source src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.webm" type="video/webm" />
<source src="http://alex-watson.net/wp-content/uploads/2014/07/big_buck_bunny.iphone.mp4" type="video/mp4" />
<source src="http://alex-watson.net/wp-content/uploads/2014/07/big_buck_bunny.iphone3g.mp4" type="video/mp4" />
<object type="application/x-shockwave-flash" data="http://releases.flowplayer.org/swf/flowplayer-3.2.1.swf" width="561" height="297">
<param name="movie" value="http://releases.flowplayer.org/swf/flowplayer-3.2.1.swf" />
<param name="allowFullScreen" value="true" />
<param name="wmode" value="transparent" />
<param name="flashVars" value="config={'playlist':['http://sandbox.thewikies.com/vfe-generator/images/big-buck-bunny_poster.jpg',{'url':'http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4','autoPlay':false}]}" />
<img alt="No Video" src="http://sandbox.thewikies.com/vfe-generator/images/big-buck-bunny_poster.jpg" width="561" height="297" title="No video playback capabilities, please download the video below" />
</object>
<strong>Download video:</strong> <a href="video.mp4">MP4 format</a> | <a href="video.ogv">Ogg format</a> | <a href="video.webm">WebM format</a>
</video>
หมายเหตุสำคัญ :
- จบลงด้วยการวาง OGG เป็นครั้งแรก
<source>
เพราะ Mac OS Firefox สละพยายามที่จะเล่นวิดีโอหากพบข้อ MP4 <source>
เป็นครั้งแรก
- ประเภท MIME ที่ถูกต้องมีความสำคัญ.ogvไฟล์ควรเป็น
video/ogg
, ไม่ video/ogv
- หากคุณมีวิดีโอ HD ตัวแปลงรหัสที่ดีที่สุดที่ฉันพบสำหรับไฟล์ OGG คุณภาพ HD คือFirefogg
.iphone.mp4
ไฟล์สำหรับ iPhone 4 + ซึ่งจะเพียงเล่นวิดีโอที่มีรูปแบบ MPEG-4 ด้วย H.264 พื้นฐาน 3 วีดีโอและเสียง AAC ตัวแปลงรหัสที่ดีที่สุดที่ฉันพบสำหรับรูปแบบนั้นคือ Handbrake โดยใช้พรีเซ็ตของiPhone และ iPod Touchจะทำงานบน iPhone 4+ แต่เพื่อให้ iPhone 3GS ทำงานได้คุณต้องใช้iPod ที่ตั้งไว้ล่วงหน้าซึ่งมีความละเอียดต่ำกว่ามากซึ่งฉันได้เพิ่มเป็นvideo.iphone3g.mp4
ไฟล์.
- ในอนาคตเราจะสามารถใช้
media
แอตทริบิวต์กับ<source>
องค์ประกอบเพื่อกำหนดเป้าหมายไปยังอุปกรณ์มือถือที่มีข้อความค้นหาสื่อได้ แต่ตอนนี้อุปกรณ์ Apple และ Android รุ่นเก่ายังไม่รองรับคุณสมบัตินี้ดีพอ
แก้ไข :
- ฉันยังคงใช้วิดีโอสำหรับทุกคน แต่ตอนนี้ฉันได้เปลี่ยนไปใช้ FlowPlayer เพื่อควบคุม Flash ทางเลือกซึ่งมีJavaScript APIที่ยอดเยี่ยมที่สามารถใช้ควบคุมได้