Bắt đầu video HTML5 ở một vị trí cụ thể khi tải?


91

Tôi cần video HTML5 để bắt đầu tại một số điểm nhất định. Giả sử tại thời điểm 50 giây trở đi.

Tôi đã thử nhưng nó không hoạt động như mong đợi. có điều gì đó tôi đang làm sai?

Đây là mã:

   <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> 

Khi tải trang, nó sẽ bắt đầu phát từ đầu. Tuy nhiên, nếu tôi gọi điều này trong khi phát lại như sau một thời gian, nó hoạt động tốt. Có điều gì tôi đang thiếu không?


2
Những trình duyệt nào? Bạn đã thử hoãn cuộc gọi vài mili giây chưa? Có thể mất thêm một chút thời gian để tải đầy đủ phần tử video
Ortiga

Câu trả lời:


130

Bạn phải đợi cho đến khi trình duyệt biết thời lượng của video trước khi bạn có thể tìm đến một thời điểm cụ thể. Vì vậy, tôi nghĩ bạn muốn đợi sự kiện 'loadmetadata' như sau:

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

2
Điều này không hoạt động trong Safari. Tôi cũng đã thử sự kiện tải dữ liệu. Có ý kiến ​​gì không?
Simon Perepelitsa

Đừng bận tâm. Đây là vấn đề với định dạng WEBM. MP4 hoạt động tốt.
Simon Perepelitsa

Sử dụng sự kiện 'thay đổi thời lượng' và luôn tạm dừng cuộc gọi trước khi thực hiện thay đổi để phát video
Jason White

53

Bạn có thể liên kết trực tiếp với URI Media Fragment , chỉ cần thay đổi tên tệp thành file.webm # t = 50

Đây là một ví dụ

Điều này khá tuyệt, bạn có thể làm tất cả mọi thứ. Nhưng tôi không biết tình trạng hỗ trợ trình duyệt hiện tại.


Hỗ trợ trình duyệt là tốt. Tôi nghĩ rằng tất cả các trình duyệt hỗ trợ HTML5 cũng hỗ trợ ít nhất các đoạn phương tiện cơ bản tạm thời.
Jim S.

@michaelhanon, sẽ dễ dàng hơn nếu viết một polyfill cho IE để đạt được điều đó. Phát hiện trình duyệt, nếu không được hỗ trợ, hãy chia nhỏ URL, tìm tham số truy vấn, sử dụng Javascript để thay đổi thời gian của video ... Tôi có thể làm điều đó nếu có cơ hội
gdgr 23/02/16

có một mảnh để đặt thời gian END không?
DGoiko

Nó thậm chí còn cho phép các phần nhỏ của giây sau dấu chấm: #t=17.79^ _ ^
Klesun

51

KHÔNG SỬ DỤNG JAVASCRIPT

Chỉ cần thêm #t=[(start_time), (end_time)]vào cuối URL phương tiện của bạn. Hạn chế duy nhất (nếu bạn muốn xem theo cách đó) là bạn sẽ cần biết video của bạn có thời gian kết thúc là bao lâu. Thí dụ:

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

Lưu ý: Không được hỗ trợ trong IE


chữ số thứ hai dường như không kết thúc số lượng video được tải để bắt đầu bằng ... chữ số đầu tiên đã làm việc tho. Có suy nghĩ gì không?
Martian2049

điều này không thực sự hoạt động tốt. Trình duyệt vẫn preload nhiều như nó muốn, có lẽ chỉ cần bắt đầu và kết thúc tại nơi bạn quyết định, nhưng tải trước đã không ngừng ...
Martian2049

28

điều chỉnh thời gian bắt đầu và kết thúc video khi sử dụng thẻ video trong html5;

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

trong đó bên trái dấu phẩy là thời gian bắt đầu tính bằng giây, bên phải dấu phẩy là thời gian kết thúc tính bằng giây. thả dấu phẩy và thời gian kết thúc để chỉ thời gian bắt đầu.


chữ số thứ hai dường như không kết thúc số lượng video được tải để bắt đầu bằng ... chữ số đầu tiên đã làm việc tho. Có suy nghĩ gì không?
Martian2049

Khi làm việc với các trình duyệt, tốt hơn hết là bạn nên kiểm tra thông số kỹ thuật W3C và caniuse.com để xem tính năng được hỗ trợ rộng rãi như thế nào. (Các câu trả lời StackOverflow tốt nhất liên kết đến các thông số kỹ thuật.) Trong trường hợp này, chúng được gọi là 'Media Fragment' và thông số kỹ thuật ở đây. w3.org/TR/media-frags
Michael Scheper

3

Trên Safari Mac cho nguồn HLS, tôi cần sử dụng sự kiện dữ liệu đã tải thay vì sự kiện siêu dữ liệu.


Tôi nghĩ rằng siêu dữ liệu được tải phải là sự kiện chính xác, nhưng tôi cũng nhận được seekable.length 0 (chỉ trong Safari trên OSX) trừ khi tôi lắng nghe dữ liệu được tải. Cảm ơn
Statuswoe

1
Tại sao điều này bị phản đối? Nó có thể không liên quan trực tiếp đến ví dụ do OP cung cấp, nhưng nó thực sự chính xác và có liên quan đến chủ đề chung của câu hỏi.
JayPea

3

Sử dụng một #t=10,20mảnh đã làm việc cho tôi.


1
Đây chỉ là sự lặp lại của hai câu trả lời khác được bình chọn cao hơn đã được viết cách đây 5 năm.
Michael Scheper
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.