Cách chèn video
Trỏ phần tử <video> tới một tệp video và thêm controls để người xem có thể phát:
<video src="movie.mp4" controls width="640"></video>
controls hiển thị trình phát có sẵn của trình duyệt: phát và tạm dừng, thanh thời gian, âm lượng và toàn màn hình. Không có nó, video chỉ nằm im đó. Bản xem trước này không tải được tệp video, nên các ví dụ trên trang này cấp dữ liệu cho phần tử từ một hoạt ảnh nhỏ trên canvas do script vẽ ra; các thuộc tính hoạt động y hệt như với một tệp:
Vì nguồn là một luồng trực tiếp chứ không phải tệp, ở đây bạn không kéo được thanh thời gian và video không có độ dài cố định. Với một tệp .mp4 thật, cùng trình phát này sẽ có thanh tua đầy đủ.
Thuộc tính của video
| Thuộc tính | Tác dụng |
|---|---|
controls | Hiển thị bộ điều khiển của trình phát trình duyệt |
autoplay | Bắt đầu phát ngay khi có thể (thực tế chỉ khi có muted) |
muted | Bắt đầu ở chế độ tắt tiếng |
loop | Phát lại từ đầu khi kết thúc |
playsinline | Phát ngay trong trang trên iPhone thay vì chuyển sang toàn màn hình |
poster="thumb.jpg" | Ảnh hiển thị trước khi video phát |
preload | none, metadata (chỉ kích thước và độ dài) hoặc auto (trình duyệt tự quyết định tải bao nhiêu) |
width, height | Kích thước tính bằng pixel; đặt cả hai sẽ giữ sẵn chỗ trước khi video tải xong |
Autoplay, muted và loop
Trình duyệt chặn video tự phát có tiếng. Video đã tắt tiếng thì được tự phát, đó là cách video nền và các đoạn clip ngắn lặp lại hoạt động:
Bốn thuộc tính này đi thành một bộ: autoplay để bắt đầu, muted để trình duyệt cho phép, loop cho clip lặp lại, và playsinline để iPhone không mở toàn màn hình. Video tự phát có tiếng không chỉ bị chặn, mà còn gây khó cho người dùng trình đọc màn hình vì giọng đọc bị át đi. Nếu clip phát lâu hơn năm giây, hãy cho người xem cách tạm dừng.
Ảnh poster và preload
poster hiển thị một ảnh trước khi video phát, giống ảnh thu nhỏ. Ở đây video không có nguồn nào, nên chỉ có ảnh poster để xem:
Với preload="none", trình duyệt không tải gì cho đến khi người xem bấm phát, và ảnh poster giúp khoảng trống không trông trống trải. Dùng preload="metadata" khi bạn muốn hiển thị thời lượng trước khi phát. Không có poster, hầu hết trình duyệt hiển thị khung hình đầu tiên khi đã tải được nó.
Định dạng và dự phòng với source
Thay vì src, bạn có thể liệt kê nhiều tệp bằng các phần tử <source>. Trình duyệt phát tệp đầu tiên mà nó hỗ trợ:
<video controls width="640" poster="thumb.jpg">
<source src="movie.webm" type="video/webm">
<source src="movie.mp4" type="video/mp4">
<track kind="captions" src="captions.vtt" srclang="en" label="English">
<p>Your browser cannot play this video. <a href="movie.mp4">Download it</a>.</p>
</video>
MP4 với video H.264 phát được trên mọi trình duyệt hiện nay, nên đó là lựa chọn an toàn khi bạn chỉ có một tệp. Thuộc tính type giúp trình duyệt bỏ qua những định dạng nó không phát được mà không cần tải về. Đoạn chữ ở cuối chỉ hiện trên những trình duyệt hoàn toàn không hỗ trợ <video>.
Phụ đề với track
<track kind="captions"> tải một tệp WebVTT, tức tệp văn bản thuần chứa các dòng có mốc thời gian. Trình duyệt thêm nút phụ đề vào bộ điều khiển và vẽ chữ lên trên video:
WEBVTT
00:00:00.000 --> 00:00:03.000
Welcome to the course.
00:00:03.000 --> 00:00:06.500
Today we build our first web page.
Phụ đề giúp người khiếm thính và nghe kém, người xem khi tắt tiếng, và bất kỳ ai theo dõi video bằng ngôn ngữ thứ hai. Thêm default vào một track để hiển thị nó mà không cần bấm. Tệp phụ đề từ tên miền khác cần header CORS và thuộc tính crossorigin trên video.
Định kiểu và điều khiển bằng JavaScript
Video là một phần tử thay thế (replaced element), giống như ảnh: width: 100% cùng height: auto làm nó responsive, còn object-fit quyết định cách nó lấp đầy một khung có hình dạng khác. JavaScript có play(), pause(), currentTime, volume và các sự kiện như play, pause và ended:
play() trả về một promise bị reject khi trình duyệt chặn việc phát (ví dụ autoplay không tắt tiếng), nên code chạy thật cần catch nó. Tự xây bộ điều khiển là tùy chọn; controls có sẵn dùng được bằng bàn phím và đã được dịch sẵn, những thứ mà nút tự làm phải tự xử lý lại. Với video lưu trên YouTube hay Vimeo, bạn nhúng trình phát của họ bằng iframe.
Lỗi thường gặp
- Autoplay mà không có
muted. Trình duyệt sẽ chặn. Thêmmutedvàplaysinline. - Quên
controls. Trừ khi tự xây bộ điều khiển, người xem không có cách nào để phát video. - Không có
widthvàheight. Trang bị giật khi video tải xong. Đặt cả hai, rồi co giãn bằng CSS. - Tệp quá nặng. Nén video cho web và dùng
preload="none"hoặc"metadata"cho video nằm thấp trong trang. - Video có lời nói mà không có phụ đề. Thêm một
<track kind="captions">.
Câu hỏi thường gặp
Làm sao chèn video vào HTML?
Dùng <video src="movie.mp4" controls width="640"></video>. Thuộc tính controls hiển thị nút phát, thanh thời gian và âm lượng của trình duyệt. Không có nó, video chỉ hiện khung hình đầu tiên (hoặc ảnh poster) và người dùng không thể bấm phát.
Vì sao autoplay không hoạt động trên video?
Trình duyệt chặn tự động phát khi có tiếng. Thêm muted cạnh autoplay, và playsinline để iPhone phát video ngay trong trang thay vì toàn màn hình: <video autoplay muted loop playsinline>.
Nên dùng định dạng video nào cho web?
MP4 với video H.264 phát được trên mọi trình duyệt hiện nay, nên đó là lựa chọn mặc định an toàn. Bạn có thể liệt kê một tệp WebM nhỏ hơn trước bằng <source> và để trình duyệt chọn định dạng đầu tiên nó hỗ trợ.
Làm sao thêm ảnh thu nhỏ cho video?
Dùng thuộc tính poster với URL của một ảnh: <video poster="thumb.jpg" controls>. Ảnh hiển thị cho đến khi video bắt đầu phát.
Làm sao thêm phụ đề cho video HTML?
Thêm <track kind="captions" src="captions.vtt" srclang="en" label="English"> vào bên trong video. Tệp dùng định dạng WebVTT, và trình duyệt hiển thị nút phụ đề trong bộ điều khiển.
Làm sao để video responsive?
Đặt width: 100% và height: auto trong CSS (hoặc max-width: 100%). Video co giãn theo phần tử chứa và giữ nguyên tỉ lệ khung hình.