Phát trực tiếp

Cast SDK có các API tích hợp để hỗ trợ nội dung trực tiếp. Điều này bao gồm giao diện người dùng linh hoạt, có sẵn, cùng với các API cho phép nhà phát triển tạo ra trải nghiệm trực tiếp chỉ bằng một vài dòng mã. Live API hỗ trợ hiển thị thời gian bắt đầu và kết thúc, siêu dữ liệu chương trình, chế độ điều khiển DVR và cửa sổ có thể tua.

Hướng dẫn này minh hoạ cách định cấu hình luồng cho Live API, bao gồm các mẫu mã và siêu dữ liệu để định cấu hình các tình huống Trực tiếp chính, cùng với ảnh chụp màn hình minh hoạ mỗi tình huống.

Điều kiện tiên quyết

Làm quen với các khái niệm cơ bản về việc triển khai Bạn cần có Trình nhận tín hiệu web trước khi xem xét điều này của chúng tôi. Ngoài ra, để chạy mã mẫu, bạn cần có quyền truy cập vào tuân thủ một trong các loại nội dung nghe nhìn được hỗ trợ cho tính năng Truyền. Nhìn chung, tính năng Trực tiếp hỗ trợ các cấu hình phát trực tiếp thông thường cho nội dung nghe nhìn được hỗ trợ.

Các thuật ngữ sau được sử dụng xuyên suốt hướng dẫn:

  • Cửa sổ có thể tìm kiếm - Phạm vi của một luồng trực tiếp mà người dùng có thể tìm kiếm trong đó.
  • Live Edge – Phần mới nhất của một sự kiện phát trực tiếp mà người chơi có thể xem.
  • Phát đầu – Dấu thời gian trên giao diện người dùng cho vị trí phát hiện tại.

Truyền sự kiện phát trực tiếp

Có hai cách định cấu hình SDK Web receiver để sử dụng Live API cho nội dung:

  1. bằng trình chặn thông báo LOAD trong ứng dụng Web Nhận của bạn. (nên dùng)
  2. bằng cách sử dụng yêu cầu tải do phía người gửi hoặc phía người nhận tạo.

Bộ chặn cung cấp LoadRequestData chứa tất cả siêu dữ liệu quan trọng về một yêu cầu tải. Người nhận cho biết yêu cầu tải là dành cho luồng trực tiếp, bạn chỉ cần đặt streamType trên mediaInformation đối tượng với StreamType.LIVE. MediaInformation.duration phải là -1 vì các thực thể người chơi chịu trách nhiệm tính toán giá trị đó khi nội dung là LIVE.

/*
* This interceptor is called before your content is loaded by a Cast device
*/
playerManager.setMessageInterceptor(
   cast.framework.messages.MessageType.LOAD,
   request => { /* cast.framework.messages.LoadRequestData */
       request.media.streamType = cast.framework.messages.StreamType.LIVE;
   return request;
});

Thêm dữ liệu hướng dẫn chương trình

Sự kiện phát trực tiếp, đặc biệt là những sự kiện có thời lượng dài như một kênh truyền hình, có thể hiển thị siêu dữ liệu lập trình/hướng dẫn trên màn hình dựa trên mức phát hiện tại trong sự kiện phát trực tiếp. Nhà cung cấp nội dung nên bao gồm lập trình siêu dữ liệu trong các ứng dụng Web receiver để phục vụ người dùng cuối tốt hơn của bạn.

Bạn có thể định cấu hình dữ liệu hướng dẫn ban đầu cho một luồng trong thông báo TẢI tương tự như cách chúng tôi đã chỉ định luồng là phát trực tiếp trong ví dụ trước. Từng phần hoặc chương trình trong sự kiện phát trực tiếp được biểu thị dưới dạng MediaMetadata mà sau đó được lưu trữ trong một hàng đợi. Có một lớp MediaMetadata riêng cho các loại chương trình, ví dụ: TvShowMediaMetadata, MovieMediaMetadata, MusicTrackMediaMetadata, và hơn thế nữa

Trong đoạn mã sau, chúng ta sử dụng đối tượng MediaMetadata để chỉ định của mỗi chương trình. Dấu thời gian UNIX với sectionStartAbsoluteTime thuộc tính này. Thời lượng của một chương trình được biểu thị bằng giây.

// The metadata for a single TV show
const currentShow = new cast.framework.messages.TvShowMediaMetadata();
currentShow.episode = 15;
currentShow.seriesTitle = 'The Odyssey';
currentShow.title = 'Scylla and Charybdis';
currentShow.sectionStartAbsoluteTime = toUnixTimestamp('9:00 PM');
currentShow.sectionDuration = HOUR_IN_SECONDS;

const previousShow = new ...;
const nextShow = new ...;

const containerMetadata = new cast.framework.messages.ContainerMetadata();
containerMetadata.title = 'My TV Channel';
containerMetadata.sections = [previousShow, currentShow, nextShow];

playerManager.getQueueManager().setContainerMetadata(containerMetadata);

Dải ô có thể tìm kiếm trực tiếp

Cast SDK bao gồm các thành phần trên giao diện người dùng và các thành phần điều khiển cho phép người dùng di chuyển con trỏ vị trí trong luồng bằng cách sử dụng Bộ điều khiển mở rộng hoặc điều khiển cảm ứng trên các thiết bị hỗ trợ cảm ứng.

Chiến lược phát hành đĩa đơn LiveSeekableRange thể hiện khoảng thời gian trong luồng mà người dùng có thể tìm kiếm. Trên Web receiver, bạn có thể truy cập thông tin về phạm vi có thể tìm kiếm qua PlayerManager.getLiveSeekableRange()! Hàm này trả về một giá trị LiveSeekableRange . Các thuộc tính chính của đối tượng cần lưu ý là:

  • start – thời gian bắt đầu (tính bằng giây) của phạm vi so với đầu luồng trong vài giây.
  • kết thúc — thời gian tối đa có thể (tính bằng giây) mà người chơi có thể tìm kiếm, dựa trên các phân đoạn có sẵn, so với đầu luồng.
  • isMovingWindow – một giá trị boolean cho biết liệu dải ô có thể tìm kiếm di chuyển (tức là các phân đoạn cũ hơn bị xoá khỏi tệp kê khai) cùng với luồng, giá trị này phải là true cho tất cả các sự kiện phát trực tiếp.
  • isLiveDone – một giá trị boolean cho biết liệu sự kiện phát trực tiếp đã đã kết thúc, nghĩa là không có phân đoạn mới nào đang được tạo.

Kích thước của dải ô có thể tìm kiếm, được biểu thị bằng thời gian từ start đến end, được xác định theo số lượng phân đoạn có sẵn trong luồng và sẽ di chuyển cùng với luồng. Ví dụ: nếu, ở đầu luồng, thẻ có thể tìm kiếm phạm vi là {start:0, end: 600, isMovingWindow: false, isLiveDone: false}, 10 giây sau khi luồng bắt đầu, nó có thể trở thành {start: 10, end: 610, isMovingWindow: true, isLiveDone: false}. Bạn cần lưu ý phần đầu và thời gian kết thúc trong phạm vi có thể tìm kiếm được cập nhật dựa trên thời gian cần để tạo phân đoạn mới. Do đó, nếu thời lượng thông thường của một đoạn video sự kiện phát trực tiếp là 10 giây, thời gian bắt đầu và kết thúc sẽ được cập nhật khoảng 10 giây một lần khi tốt.

Tắt tính năng tua

Để tắt tính năng tua trong luồng, bạn cần xóa chức năng tua qua các lệnh nội dung nghe nhìn được hỗ trợ trên Web receiver:

// disable seeking in the LOAD messageInterceptor
playerManager.removeSupportedMediaCommands(cast.framework.messages.Command.SEEK, true);

Đang xoá lệnh nội dung nghe nhìn được hỗ trợ cho tín hiệu SEEK khỏi các ứng dụng của người gửi và màn hình cảm ứng để tắt tính năng tua, nhưng không tắt các lệnh thoại, chẳng hạn như là "Ok google, tua lại 30 giây". Xem các lệnh nội dung nghe nhìn được hỗ trợ bằng giọng nói để biết thông tin chi tiết về cách tắt lệnh phát nội dung nghe nhìn đối với giọng nói.

Sự kiện khung trực tiếp

Hai sự kiện, LIVE_ENDEDLIVE_IS_MOVING_WINDOW_CHANGED, được đưa vào trong API Trực tiếp. Cả hai sự kiện đều được thông qua LiveStatusEvent đối tượng chứa dải ô có thể tìm kiếm trực tiếp hiện tại.

Sự kiện Mô tả
LIVE_ENDED Được kích hoạt khi sự kiện phát trực tiếp kết thúc. Tại thời điểm này, giá trị end trong LiveSeekableRange sẽ ngừng cập nhật; người dùng vẫn có thể xem nội dung trong phạm vi có thể tua đang hoạt động.
LIVE_IS_MOVING_WINDOW_CHANGED Được kích hoạt khi phạm vi có thể tìm kiếm của một sự kiện phát trực tiếp thay đổi từ một cửa sổ cố định sang một cửa sổ di chuyển hoặc ngược lại. Đối với sự kiện phát trực tiếp, điều này sẽ xảy ra khi trình phát phát hiện tệp kê khai đang xoá các phân đoạn trước đó.

Tình huống phát trực tiếp

Có 8 loại tình huống có thể xảy ra khi phát trực tiếp, mỗi loại được định cấu hình bằng cách thiết lập 3 chế độ cài đặt chính:

  • Sự kiện phát trực tiếp có thời gian bắt đầu
  • Sự kiện phát trực tiếp có thời gian kết thúc
  • Người dùng được phép tìm kiếm trong cửa sổ có thể tìm kiếm của sự kiện phát trực tiếp

Xem phần Thêm dữ liệu hướng dẫn chương trình để biết cách định cấu hình các giá trị đó.

Dưới đây là nội dung mô tả và ảnh chụp màn hình về các tình huống mà tính năng Trực tiếp hỗ trợ API. Các biến T1T2 được dùng để biểu thị dấu thời gian trên bên trái và bên phải giao diện người dùng.

Thời gian bắt đầu Thời gian kết thúc Có thể tìm kiếm T1 T2
Tình huống 1 Không Không Không Đầu phát Không hiển thị
Tình huống 2 Không Không Phát đầu Không hiển thị
Tình huống 3 Không Không Phát đầu Không hiển thị
Tình huống 4 Không Phát đầu Không hiển thị
Tình huống 5 Không Không Hiện thời gian bắt đầu Phát đầu
Tình huống 6 Không Hiện thời gian bắt đầu Phát đầu
Tình huống 7 Không Hiển thị thời gian bắt đầu Hiển thị thời gian kết thúc
Tình huống 8 Hiển thị thời gian bắt đầu Hiển thị thời gian kết thúc

Tình huống một

Thời gian bắt đầu Thời gian kết thúc Có thể tìm kiếm T1 T2
Không Không Không Phát đầu Không hiển thị

Tình huống 1 không có thời gian bắt đầu hoặc kết thúc và người dùng không thể tìm kiếm trong luồng. Khi người dùng dừng sự kiện phát trực tiếp, quá trình phát sẽ tiếp tục từ cạnh màn hình trực tiếp về vị trí tạm dừng luồng.

Tình huống 7

Một TV đang hiển thị giao diện người dùng trực tiếp của Chromecast trong Tình huống 7 kèm theo Giờ trên đồng hồ Một chiếc điện thoại di động cho thấy Giao diện người dùng trực tiếp của Tình huống 7 kèm theo Giờ trên đồng hồ

Thời gian bắt đầu Thời gian kết thúc Có thể tìm kiếm T1 T2
Không Đầu phát Thời lượng chương trình

Tình huống 7 có thời gian bắt đầu và kết thúc nhưng không thể tìm kiếm được. Hai dấu thời gian trong giao diện người dùng, T1 và T2, thể hiện tổng thời gian và tổng thời gian phát hiện tại thời lượng chương trình tương ứng. Nếu người dùng tạm dừng/tiếp tục phát, luồng sẽ tiếp tục phát ở cạnh trực tiếp của luồng. Trong ví dụ trên, phần màu đỏ của thanh tìm kiếm đại diện cho phần luồng kể từ khi người dùng bắt đầu đang xem.

Tình huống tám

Một TV đang hiển thị giao diện người dùng trực tiếp của Chromecast cho Tình huống 8 kèm theo Giờ trên đồng hồ Một chiếc điện thoại di động cho thấy Giao diện người dùng trực tiếp của Tình huống 8 kèm theo Giờ trên đồng hồ

Thời gian bắt đầu Thời gian kết thúc Có thể tìm kiếm T1 T2
Đầu phát Thời lượng chương trình

Tình huống 7 có thời gian bắt đầu, thời gian kết thúc và có thể tìm kiếm. Hai dấu thời gian trong giao diện người dùng, T1 và T2, thể hiện tổng thời gian phát và tổng chương trình hiện tại thời lượng tương ứng. Nếu người dùng tạm dừng/tiếp tục phát, luồng sẽ tiếp tục vào thời điểm họ tạm dừng, nếu cửa sổ nằm trong cửa sổ có thể tìm kiếm—khu vực màu đỏ trên thanh tìm kiếm thể hiện nơi người dùng có thể tua lại và vùng màu trắng thể hiện nơi họ có thể tìm đến.

Định cấu hình tình huống

Quá trình định cấu hình sự kiện phát trực tiếp làm Tình huống trực tiếp cụ thể được thực hiện qua ba phần:

  1. Đặt loại sự kiện phát trực tiếp – Đánh dấu sự kiện là phát trực tiếp.
  2. Thêm dữ liệu hướng dẫn về chương trình – Đặt thời gian bắt đầu và thời lượng trong đối tượng MediaMetadata.
  3. Định cấu hình chức năng tìm kiếm – Bật hoặc tắt tính năng tua.

Hành vi phát

Trong khi tạm dừng, siêu dữ liệu phát trên giao diện người dùng sẽ tiếp tục được cập nhật. bao gồm cả thời điểm gần phát và phát trực tiếp. Sau khi bạn tiếp tục phát trực tuyến, có là một số hành vi cần lưu ý. Những hành vi này sẽ thay đổi tuỳ theo cấu hình luồng.

Luồng có thể tìm kiếm

Sau khi tiếp tục luồng có thể tìm kiếm:

  • Cạnh trực tiếp sẽ được cập nhật thành vị trí trực tiếp và phạm vi có thể tìm kiếm sẽ được điều chỉnh cho phù hợp.
  • Nếu con trỏ vị trí nhảy qua chương trình hiện tại, thì thanh điều chỉnh sẽ được cập nhật với siêu dữ liệu của chương trình mới (bao gồm cả thời gian bắt đầu và thời gian kết thúc nếu có sẵn).
  • Nếu cửa sổ có thể tìm kiếm có độ dài 'X', phạm vi có thể tìm kiếm sẽ kéo dài trở lại đến tối đa là 'X' hoặc đến đầu chương trình, tuỳ theo giá trị nào nhỏ hơn.
  • Nếu người dùng đã tạm dừng đủ lâu để thời gian hiện tại không còn theo cửa sổ có thể tìm kiếm, luồng sẽ tiếp tục tại điểm sớm nhất (ngoài cùng bên trái) của cửa sổ có thể tìm kiếm.

Tua đến LiveSeekableRange.end để tiếp tục phát ở cạnh màn hình trực tiếp sau khi bỏ tạm dừng.

let playerManager = cast.framework.CastReceiverContext.getInstance().getPlayerManager();
// Intercept the message to PLAY
playerManager.setMessageInterceptor(cast.framework.messages.MessageType.PLAY, (requestData) => {
  ...
  if (playerManager.getLiveSeekableRange()) {
    // Resume playback at the live edge
    playerManager.seek(playerManager.getLiveSeekableRange().end);
  } else {
    return requestData;
  }
  ...
});

Sự kiện phát trực tiếp không cần tìm kiếm

Sau khi tiếp tục luồng không thể tìm kiếm:

  • Trong trường hợp này, quá trình phát sẽ tiếp tục ở rìa trực tiếp.
  • Nếu cạnh trực tiếp vượt quá chương trình hiện tại, thanh điều chỉnh phải đã cập nhật bằng siêu dữ liệu của chương trình mới (bao gồm cả thời gian bắt đầu và kết thúc thời gian nếu có).

Các thay đổi về nền tảng API và tuỳ chỉnh Live UI

Cast SDK có tính năng hỗ trợ tích hợp để tạo giao diện người dùng tuỳ chỉnh thay vì sử dụng giao diện người dùng có sẵn. Tuy nhiên, bạn cần phải tuân thủ Danh sách kiểm tra thiết kế trải nghiệm người dùng của tính năng Truyền khi tuỳ chỉnh .

Bộ thu web

Trên Web receiver, PlayerData bao gồm các trường sau để cho phép nhà phát triển mở rộng giao diện cho sự kiện phát trực tiếp:

  • isLive - cờ cho biết luồng hiện tại có phải là luồng trực tiếp hay không khác với VOD.
  • liveSeekableRange – dải ô có thể tìm kiếm sẽ xuất hiện trên giá trị phân cách màn hình phần ghi bằng DVR.
  • mediaStartAbsoluteTime – khi phần này bắt đầu theo thời gian tuyệt đối (Kỷ nguyên UNIX).
  • sectionStartTimeInMedia – thời gian bắt đầu của phần tính bằng giây so với thời gian bắt đầu nội dung nghe nhìn.
  • sectionDuration – thời lượng của phần tính bằng giây.

Ngoài ra, hãy nhớ tính đến hai sự kiện trực tiếp khi tuỳ chỉnh giao diện người dùng.

SDK Android

Trong chức năng Live, việc sử dụng Tiện ích thanh tua của Android trong Ngừng sử dụng UIMediaController, thay vào đó, hãy sử dụng CastSeekBar.