เริ่มวิดีโอ HTML5 ที่ตำแหน่งใดตำแหน่งหนึ่งเมื่อโหลด?


94

ฉันต้องการวิดีโอ HTML5 เพื่อเริ่มต้น ณ จุดหนึ่ง สมมติว่าเวลา 50 วินาทีเป็นต้นไป

ฉันลองแล้ว แต่มันไม่ได้ผลตามที่คาดไว้ มีบางอย่างที่ฉันทำผิด?

นี่คือรหัส:

   <video id="vid1" width="640" height="360">
       <source src="file.webm" type="video/webm" /> 
       Your browser does not support the video tag.
   </video>
   <script>
       document.getElementById('vid1').currentTime = 50;
   </script> 

เมื่อหน้าเว็บโหลดมันจะเริ่มเล่นจากจุดเริ่มต้น อย่างไรก็ตามหากฉันเรียกสิ่งนี้ในระหว่างการเล่นเช่นหลังจากนั้นสักครู่ก็ใช้งานได้ดี มีอะไรที่ฉันขาดหายไป?


2
เบราว์เซอร์อะไร คุณได้พยายามชะลอการโทรสองสามมิลลิวินาทีหรือไม่? อาจจะใช้เวลานานกว่าเล็กน้อยในการโหลดองค์ประกอบวิดีโออย่างสมบูรณ์
Ortiga

คำตอบ:


131

คุณต้องรอจนกว่าเบราว์เซอร์จะทราบระยะเวลาของวิดีโอก่อนจึงจะสามารถหาเวลาใดเวลาหนึ่งได้ ดังนั้นฉันคิดว่าคุณต้องการรอเหตุการณ์ 'loadedmetadata' ดังนี้:

document.getElementById('vid1').addEventListener('loadedmetadata', function() {
  this.currentTime = 50;
}, false);

2
สิ่งนี้ใช้ไม่ได้ใน Safari ฉันพยายามโหลดเหตุการณ์ข้อมูลด้วย ความคิดใด ๆ ?
Simon Perepelitsa

ไม่เป็นไร. นี่เป็นปัญหาเกี่ยวกับรูปแบบ WEBM MP4 ทำงานได้ดี
Simon Perepelitsa

ใช้เหตุการณ์ 'ช่วงเวลาเปลี่ยน' และหยุดการโทรชั่วคราวก่อนทำการเปลี่ยนแปลงการเล่นวิดีโอ
Jason White

53

คุณสามารถเชื่อมโยงโดยตรงกับMedia Fragments URIเพียงแค่เปลี่ยนชื่อไฟล์เป็นfile.webm # t = 50

นี่คือตัวอย่าง

มันเจ๋งมากคุณทำอะไรได้หลายอย่าง แต่ฉันไม่ทราบสถานะปัจจุบันของการรองรับเบราว์เซอร์


การสนับสนุนเบราว์เซอร์เป็นสิ่งที่ดี ฉันคิดว่าเบราว์เซอร์ที่รองรับ HTML5 ทั้งหมดยังสนับสนุนอย่างน้อยส่วนสื่อชั่วคราวพื้นฐาน
Jim S.

@michaelhanon การเขียน polyfill สำหรับ IE เพื่อให้บรรลุนั้นค่อนข้างง่าย ตรวจหาเบราว์เซอร์หากไม่รองรับเลิก URL ค้นหาพารามิเตอร์การค้นหาใช้ Javascript เพื่อเปลี่ยนเวลาของวิดีโอ ... ฉันอาจทำเช่นนั้นถ้าฉันมีโอกาส
gdgr

มีส่วนกำหนดเวลา END หรือไม่
DGoiko

มันยังยอมให้เศษส่วนของวินาทีหลังจุด: #t=17.79^ _ ^
Klesun

51

โดยไม่ต้องใช้ JAVASCRIPT

เพียงเพิ่ม#t=[(start_time), (end_time)]ต่อท้าย URL สื่อของคุณ ความปราชัยเพียงอย่างเดียว (หากคุณต้องการดูแบบนั้น) คือคุณต้องรู้ว่าวิดีโอของคุณมีความยาวเท่าใดเพื่อระบุเวลาสิ้นสุด ตัวอย่าง:

<video>
    <source src="splash.mp4#t=10,20" type="video/mp4">
</video>

หมายเหตุ:ไม่รองรับใน IE


ตัวเลขหลักที่สองดูเหมือนจะไม่สิ้นสุดจำนวนของวิดีโอที่โหลดขึ้นต้นด้วย ... ตัวเลขแรกใช้งานได้ ความคิดใด ๆ ?
Martian2049

สิ่งนี้ไม่ได้ผลจริงๆ เบราว์เซอร์ยังคงโหลดล่วงหน้าได้มากเท่าที่ต้องการอาจจะแค่เริ่มต้นและสิ้นสุดตามที่คุณตัดสินใจ แต่การโหลดล่วงหน้าไม่ได้หยุด ...
Martian2049

29

ปรับเวลาเริ่มต้นและเวลาสิ้นสุดของวิดีโอเมื่อใช้แท็กวิดีโอใน html5

http://www.yoursite.com/yourfolder/yourfile.mp4#t=5,15

โดยที่ด้านซ้ายของลูกน้ำคือเวลาเริ่มต้นเป็นวินาทีด้านขวาของลูกน้ำคือเวลาสิ้นสุดเป็นวินาที ปล่อยลูกน้ำและเวลาสิ้นสุดเพื่อให้มีผลกับเวลาเริ่มต้นเท่านั้น


ตัวเลขหลักที่สองดูเหมือนจะไม่สิ้นสุดจำนวนของวิดีโอที่โหลดขึ้นต้นด้วย ... ตัวเลขแรกใช้งานได้ ความคิดใด ๆ ?
Martian2049

เมื่อทำงานกับเบราว์เซอร์คุณควรตรวจสอบข้อมูลจำเพาะของ W3C และ caniuse.com เพื่อดูว่าคุณลักษณะนี้ได้รับการสนับสนุนอย่างกว้างขวางเพียงใด (คำตอบ StackOverflow ที่ดีที่สุดจะเชื่อมโยงไปยังข้อกำหนด) ในกรณีนี้พวกเขาเรียกว่า 'Media Fragments' และข้อมูลจำเพาะอยู่ที่นี่ w3.org/TR/media-frags
Michael Scheper

3

ใน Safari Mac สำหรับแหล่งที่มา HLS ฉันต้องใช้เหตุการณ์ loaddata แทนเหตุการณ์ข้อมูลเมตา


ฉันคิดว่าข้อมูลเมตาที่โหลดควรจะเป็นเหตุการณ์ที่ถูกต้อง แต่ฉันก็สามารถค้นหาได้เช่นกันความยาวคลื่น 0 (เฉพาะใน Safari บน OSX) เว้นแต่ฉันจะฟัง dataloaded ขอบคุณ
Statuswoe

1
เหตุใดจึงถูกลดลง อาจไม่เกี่ยวข้องโดยตรงกับตัวอย่างที่ OP ให้ไว้ แต่ความถูกต้องตามความเป็นจริงและเกี่ยวข้องกับหัวข้อทั่วไปของคำถาม
JayPea

3

การใช้#t=10,20ชิ้นส่วนได้ผลสำหรับฉัน


1
นี่เป็นเพียงคำตอบซ้ำสองคำตอบที่ได้รับการโหวตสูงกว่าซึ่งเขียนเมื่อ 5 ปีก่อน
Michael Scheper
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.