Hướng dẫn này cho biết cách triển khai tính năng đánh dấu bằng SDK IMA DAI khi sử dụng tính năng Chèn quảng cáo động (DAI) cho luồng video theo yêu cầu (VOD). Điều này giả định bạn đã triển khai IMA DAI đang hoạt động, chẳng hạn như cách triển khai được trình bày trong phần Bắt đầu.
Đánh dấu trang là gì?
Dấu trang là khả năng lưu và sau đó quay lại một điểm cụ thể trong luồng nội dung. Giả sử một người dùng xem năm phút nội dung, rời khỏi luồng video đó rồi quay lại xem sau. Tính năng dấu trang lưu vị trí của người dùng trong luồng nên luồng có thể tiếp tục phát từ nơi đã dừng lại, cung cấp trải nghiệm liền mạch cho người xem.
Tìm hiểu sâu về tính năng đánh dấu của DAI
Khi đánh dấu trang một luồng DAI, bạn phải ghi lại mã luồng và thời gian khi người dùng rời khỏi video. Khi người dùng quay lại, hãy yêu cầu lại luồng và tìm đến thời điểm đã lưu. Vì mỗi thực thể của luồng được yêu cầu có thể có các khoảng nghỉ quảng cáo có thời lượng khác nhau, nên việc chỉ lưu thời gian phát trực tuyến sẽ không hoạt động. Điều bạn thực sự muốn làm là tiếp tục từ cùng một thời điểm nội dung.
Phương thức chuyển đổi để giải cứu
SDK IMA DAI cung cấp một cặp phương thức để yêu cầu thời gian nội dung cho một thời gian phát nhất định và thời gian phát cho một thời gian nội dung nhất định. Khi sử dụng các phương thức chuyển đổi này, bạn có thể lưu trữ thời gian nội dung được đánh dấu rồi tìm đến thời gian phát trực tuyến tương ứng trong thực thể mới của luồng. Dưới đây là phương pháp, bao gồm cả đường liên kết đến một ứng dụng mẫu cho thấy cách triển khai tính năng đánh dấu trang đang hoạt động.
Lưu và tải dấu trang luồng quảng cáo
Lưu dấu trang khi trình phát nội dung bị tạm dừng.
onPause() {
var bookmarkTime = Math.floor(
streamManager.contentTimeForStreamTime(videoElement.currentTime));
}
Đang tải dấu trang
Tải dấu trang khi yêu cầu lại luồng.
function loadUrl(url) {
hls.on(Hls.Events.MANIFEST_PARSED, () => {
var startTime = 0;
if (bookmarkTime) {
var startTime = streamManager.streamTimeForContentTime(bookmarkTime);
// Seeking on load triggers the onSeekEnd event, so treat this seek as
// if it's snapback. Without this, resuming at a bookmark kicks you
// back to the ad before the bookmark.
isSnapback = true;
}
hls.startLoad(startTime);
videoElement.addEventListener('loadedmetadata', () => { videoElement.play(); });
});
hls.loadSource(url);
hls.attachMedia(videoElement);
}
Ứng dụng mẫu
Tải ứng dụng mẫu xuống để xem cách triển khai tính năng đánh dấu trang.