Trong bài viết này, bạn sẽ tìm hiểu về khái niệm nâng cao hơn về việc truyền phát nội dung đa phương tiện và cuối cùng sẽ hiểu rõ về nhiều trường hợp sử dụng, giao thức và tiện ích truyền phát. Hãy bắt đầu bằng việc giải thích khái niệm truyền trực tuyến thực sự.
Phát trực tuyến nội dung nghe nhìn là một cách phân phối và phát lại từng nội dung nghe nhìn. Thay vì tải một tệp duy nhất (có thể bị chậm nếu không được tối ưu hoá cho mạng), trình phát sẽ đọc một tệp kê khai mô tả cách nội dung nghe nhìn mục tiêu được phân tách thành các phần dữ liệu riêng lẻ. Các đoạn nội dung đa phương tiện sau đó được tự động ghép lại với nhau trong thời gian chạy — có thể là ở các tốc độ bit khác nhau mà bạn sẽ tìm hiểu sau.
Xin lưu ý rằng để cung cấp tính năng truyền trực tuyến trên trang web của bạn, máy chủ phải hỗ trợ tiêu đề của yêu cầu HTTP Phạm vi. Tìm hiểu thêm về tiêu đề Accept-Ranges
trong bài viết Thẻ <video> và <source>.
Các trường hợp sử dụng phát trực tuyến
Việc tạo các đoạn nội dung đa phương tiện và tệp kê khai cần thiết mô tả luồng không hoàn toàn đơn giản, nhưng việc truyền trực tuyến sẽ mở ra một số trường hợp sử dụng thú vị mà bạn không thể đạt được chỉ bằng cách trỏ phần tử <video>
đến một tập hợp tệp nguồn tĩnh. Bạn sẽ tìm hiểu thêm về cách thêm nội dung nghe nhìn vào trang web ở phần sau. Trước tiên, bạn nên biết một số trường hợp sử dụng để truyền phát nội dung đa phương tiện nếu muốn làm được nhiều việc hơn là chỉ tải nhiều tệp vào phần tử <video>
.
- Phương thức truyền trực tuyến thích ứng là phương thức mà các đoạn nội dung nghe nhìn được mã hoá ở một số tốc độ bit và đoạn nội dung nghe nhìn chất lượng cao nhất phù hợp với băng thông hiện có của ứng dụng sẽ được trả về trình phát nội dung nghe nhìn.
- Phát sóng trực tiếp là nơi các đoạn nội dung nghe nhìn được mã hoá và cung cấp theo thời gian thực.
- Chèn nội dung nghe nhìn là khi nội dung nghe nhìn khác như quảng cáo được chèn vào một luồng mà người chơi không phải thay đổi nguồn nội dung nghe nhìn.
Giao thức phát trực tuyến
Hai giao thức truyền trực tuyến được sử dụng phổ biến nhất trên web là Truyền phát thích ứng động qua HTTP (DASH) và Phát trực tuyến dựa trên HTTP (HLS). Những trình phát hỗ trợ các giao thức này sẽ tìm nạp tệp kê khai đã tạo, tìm ra những phần nội dung đa phương tiện cần yêu cầu, sau đó kết hợp các phần đó vào trải nghiệm nội dung đa phương tiện cuối cùng.
Sử dụng <video>
để phát luồng
Nhiều trình duyệt sẽ không phát sự kiện trực tiếp của bạn như bình thường. Mặc dù có một số tính năng hỗ trợ gốc cho việc phát HLS, nhưng trình duyệt thường không hỗ trợ tính năng phát trực tuyến DASH gốc. Điều này có nghĩa là thường thì bạn không chỉ cần trỏ <source>
trong phần tử <video>
đến tệp kê khai.
<video controls>
<source src="manifest.mpd" type="application/dash+xml">
</video>
Những gì tưởng chừng là thâm hụt lại là một điểm mạnh của sự nguỵ trang. Luồng dữ liệu rất mạnh mẽ và các ứng dụng sử dụng luồng dữ liệu có nhu cầu khác nhau.
Tệp kê khai thường mô tả nhiều biến thể của một nội dung nghe nhìn. Hãy nghĩ đến nhiều tốc độ bit, nhiều bản âm thanh và thậm chí là cùng một nội dung nghe nhìn được mã hoá ở nhiều định dạng.
Một số ứng dụng có thể muốn giữ nhiều video hơn trong vùng đệm, một số ứng dụng khác có thể muốn tìm nạp trước vài giây đầu tiên của video trong một tập sắp tới và một số ứng dụng muốn triển khai logic riêng để truyền trực tuyến thích ứng. Đây là nơi bạn muốn có một số tính năng tích hợp sẵn của trình duyệt để tạo luồng nội dung đa phương tiện để phát. Và tình cờ là có một tính năng như vậy.
Tiện ích nguồn phương tiện
Rất may, W3C đã xác định một khái niệm có tên là Tiện ích nguồn nội dung đa phương tiện (MSE). Khái niệm này sẽ cho phép JavaScript tạo luồng nội dung đa phương tiện. Tóm lại, MSE cho phép nhà phát triển đính kèm đối tượng MediaSource
vào phần tử <video>
và phát lại mọi dữ liệu đa phương tiện được đưa vào vùng đệm đính kèm với thực thể MediaSource
.
Ví dụ cơ bản
const videoEl = document.querySelector('video');
const mediaSource = new MediaSource();
video.src = URL.createObjectURL(mediaSource);
mediaSource.addEventListener(
'sourceopen',
() => {
const mimeString = 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"';
const buffer = mediaSource.addSourceBuffer(mimeString);
buffer.appendBuffer( /* Video data as `ArrayBuffer` object. */ )
}
);
Ví dụ đơn giản ở trên minh hoạ một số điều:
- Đối với
<video>
, lớp này đang nhận dữ liệu đa phương tiện từ một URL. - URL được tạo chỉ là một con trỏ đến một thực thể
MediaSource
. - Thực thể
MediaSource
tạo một hoặc nhiều thực thểSourceBuffer
. - Sau đó, chúng ta chỉ cần thêm dữ liệu đa phương tiện nhị phân vào vùng đệm, ví dụ: sử dụng
fetch
.
Mặc dù các khái niệm cơ bản này rất đơn giản và chắc chắn bạn có thể viết một trình phát video tương thích với DASH và HLS từ đầu, nhưng hầu hết mọi người thường chọn một trong các giải pháp nguồn mở hoàn thiện đã có sẵn, chẳng hạn như Shaka Player, JW Player hoặc Video.js.
Tuy nhiên, chúng tôi đã tạo một PWA đa phương tiện minh hoạ có tên là Kino. PWA này minh hoạ cách bạn phát triển trang web nội dung đa phương tiện trực tuyến cơ bản của riêng mình, cung cấp tính năng phát nội dung đa phương tiện ngoại tuyến chỉ bằng cách sử dụng phần tử <video>
đơn giản. Chúng tôi có kế hoạch hỗ trợ các khung và công nghệ quản lý quyền kỹ thuật số, cùng nhiều tính năng khác trong lộ trình phát triển. Vì vậy, hãy thỉnh thoảng kiểm tra lại để biết thông tin cập nhật hoặc yêu cầu một tính năng.
Hãy đọc thêm về tính năng này trong bài viết PWA có tính năng phát trực tuyến ngoại tuyến.
Định dạng đoạn nội dung nghe nhìn
Trong một thời gian dài, DASH và HLS yêu cầu các đoạn nội dung nghe nhìn phải được mã hoá theo nhiều định dạng. Tuy nhiên, vào năm 2016, chúng tôi đã thêm chức năng hỗ trợ cho các tệp MP4 bị phân mảnh (fMP4) tiêu chuẩn vào HLS, một định dạng mà DASH cũng hỗ trợ.
Các đoạn video sử dụng vùng chứa fMP4
và bộ mã hoá và giải mã H.264
được cả hai giao thức hỗ trợ và hầu hết trình phát đều có thể phát. Nhờ đó, nhà sản xuất nội dung chỉ cần mã hoá video một lần, giúp tiết kiệm thời gian và dung lượng ổ đĩa.
Để đạt được chất lượng tốt hơn và kích thước tệp nhỏ hơn, bạn nên chọn mã hoá một số nhóm đoạn nội dung nghe nhìn bằng các định dạng hiệu quả hơn như VP9
. Tuy nhiên, trước khi đi sâu vào vấn đề này, trước tiên bạn cần tìm hiểu cách Chuẩn bị tệp nội dung nghe nhìn cho web. Chúng ta sẽ tìm hiểu về vấn đề này trong phần tiếp theo.