Hỗ trợ dịch chuyển thời gian

Sử dụng API dịch chuyển thời gian trong dịch vụ đầu vào TV để cho phép người dùng tạm dừng, tua lại và tua đi các chương trình trực tiếp trên các kênh dịch vụ. Nếu ứng dụng của bạn hỗ trợ ghi dịch thời gian, người dùng có thể linh hoạt xem nội dung của bạn:

  • Người dùng có thể tạm dừng chương trình trong khi xử lý gián đoạn ngắn hạn để họ không bao giờ bỏ lỡ những khoảnh khắc quan trọng.
  • Người dùng có thể tua đi nội dung họ đã xem hoặc nội dung họ không quan tâm.
  • Người dùng có thể tua lại và xem lại những khoảnh khắc yêu thích trong nội dung chương trình.

Hình 1. Bộ điều khiển chế độ phát trên Android TV dùng để dịch chuyển thời gian.

Dịch vụ ghi dịch thời gian sử dụng các đoạn dữ liệu chương trình ngắn, tạm thời, được ghi lại để triển khai khả năng phát chương trình trực tiếp. Người dùng không thể chơi các trò chơi dịch chuyển thời gian này các bản ghi bên ngoài phiên phát hiện tại. Điều này có nghĩa là họ không thể sử dụng ghi dịch thời gian để tạm dừng một chương trình để xem vào ngày tiếp theo hoặc tạm dừng một chương trình để xem sau khi họ chuyển sang một kênh khác.

Sử dụng API ghi TV nếu bạn muốn để cho phép người dùng ghi lại nội dung chương trình để xem ngoài thời gian phát hiện tại phiên hoạt động.

Thêm tính năng hỗ trợ dịch chuyển thời gian

Để thêm hỗ trợ chuyển dịch thời gian cho dịch vụ đầu vào TV, bạn cần triển khai API dịch chuyển thời gian trong lớp TvInputService.Session của bạn, xử lý hoạt động ghi và phát các bản ghi dịch chuyển thời gian trong ứng dụng của bạn, đồng thời thông báo hệ thống mà dịch vụ đầu vào của bạn hỗ trợ dịch chuyển thời gian.

Các phương thức TvInputService.Session mà bạn triển khai là như sau:

Để biết thêm thông tin về cách thông báo cho hệ thống rằng dịch vụ đầu vào của bạn hỗ trợ dịch chuyển thời gian, hãy xem Thông báo cho hệ thống về trạng thái chuyển dịch thời gian .

Nếu bạn đang sử dụng Thư viện đồng hành TIF để triển khai TvInputService.Session, bạn sẽ tự động nhận được một triển khai dịch chuyển thời gian sử dụng ExoPlayer. Bạn có thể dùng hoặc ghi đè các phương thức API dịch chuyển thời gian trong BaseTvInputService.Session rồi cung cấp gợi ý của riêng bạn trong quá trình triển khai. Để biết thêm thông tin về cách sử dụng Thư viện đồng hành TIF, hãy xem phần Tạo dịch vụ đầu vào TV bằng Thư viện đồng hành TIF.

Ghi lại nội dung khi phiên bắt đầu

Người dùng có thể tạm dừng, tua lại và tua đi nội dung của chương trình bằng cách truy cập vào bộ điều khiển chế độ phát cho kênh bằng cách nhấn Chọn khi xem nội dung và sau đó chuyển đến các nút điều khiển chế độ phát hoặc sử dụng trên một thiết bị từ xa.

Vì người dùng có thể sử dụng tính năng ghi dịch thời gian bất kỳ lúc nào trong khi xem nội dung chương trình, TV của bạn dịch vụ đầu vào phải bắt đầu ghi lại nội dung dịch chuyển thời gian ngay khi người dùng CANNOT TRANSLATE onTune() trong quá trình triển khai. Bạn cũng cần thông báo cho hệ thống rằng bạn có thể ghi âm bằng cách gọi notifyTimeShiftStatusChanged(int), như mô tả trong Thông báo cho hệ thống về trạng thái dịch chuyển thời gian .

Quản lý bộ nhớ nội dung đã ghi

Dịch vụ đầu vào TV chịu trách nhiệm lưu trữ các bản ghi dịch chuyển thời gian trong bộ nhớ ứng dụng riêng tư của ứng dụng và phát lại nội dung khi hệ thống gọi phương pháp ghi dịch thời gian của mình, chẳng hạn như onTimeShiftResume(). Nếu nội dung của bạn đã được lưu trữ trên đám mây và ứng dụng của bạn có thể quản lý các bản ghi dịch chuyển thời gian trên đám mây, thì bạn có thể dùng bộ nhớ trên đám mây bộ nhớ ứng dụng.

Nếu nội dung của bạn sử dụng nội dung được bảo vệ, dịch vụ đầu vào TV của bạn phải chịu trách nhiệm về mã hoá đúng cách nội dung được ghi lại và việc giải mã nội dung trong video.

Vì nội dung video đã ghi có thể cần một dung lượng lớn bộ nhớ, nên bạn cần quản lý cẩn thận nội dung được ghi lại trong thời gian phát lại phiên. Nếu nút phát thời lượng của phiên hoạt động vượt quá khoảng thời gian bạn có thể ghi lại và lưu trữ ghi dịch thời gian, điều chỉnh bản ghi dịch chuyển thời gian của bạn để duy trì vùng đệm hiện tại nhưng đảm bảo ghi lại thời gian hiện tại. Ví dụ: nếu người dùng đã phát nội dung trong 31 phút và bản ghi dịch chuyển thời gian tối đa của bạn kích thước là 30 phút, hãy điều chỉnh bản ghi và thời gian bắt đầu để chứa từ phút 1 đến phút 31.

Nếu dịch vụ đầu vào TV của bạn không thể hỗ trợ dịch chuyển thời gian do thiếu bộ nhớ, bạn phải thông báo cho hệ thống. Để biết thêm chi tiết về cách thông báo hệ thống về các giới hạn hỗ trợ dịch chuyển thời gian, hãy xem Thông báo cho hệ thống về trạng thái chuyển dịch thời gian .

Khi người dùng chuyển sang một kênh khác hoặc kết thúc quá trình phát hãy xoá dữ liệu dịch chuyển thời gian mà bạn đã ghi.

Thông báo cho hệ thống về trạng thái chuyển dịch thời gian

Nếu dịch vụ đầu vào TV của bạn hỗ trợ dịch chuyển thời gian, hãy gọi notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_AVAILABLE) trong việc triển khai onTune() khi người dùng giai điệu đối với một kênh.

Để thông báo cho hệ thống nếu có khả năng ghi dịch thời gian của dịch vụ đầu vào của bạn thay đổi, sử dụng notifyTimeShiftStatusChanged(int). Ví dụ: nếu dịch vụ đầu vào TV của bạn không thể hỗ trợ dịch chuyển thời gian do giới hạn không gian lưu trữ hoặc lý do khác, hãy gọi notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNAVAILABLE).

Nếu dịch vụ đầu vào TV của bạn hoàn toàn không thể hỗ trợ dịch chuyển thời gian, hãy gọi notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNSUPPORTED) khi một phiên phát được tạo. Hệ thống sẽ xử lý mọi dịch vụ đầu vào không bao giờ gọi notifyTimeShiftStatusChanged() làm dịch vụ đầu vào không thể hỗ trợ dịch chuyển thời gian. Kiến thức này áp dụng cho cả các dịch vụ đầu vào sử dụng API cấp 22 và trước đó.

Theo dõi thời gian phát

Vị trí bắt đầu của bản ghi dịch chuyển thời gian là thời gian tuyệt đối sớm nhất vị trí, tính bằng mili giây kể từ thời gian bắt đầu của hệ thống, mà người dùng có thể tìm kiếm. Đây là thường là thời điểm khi quá trình phát lại video bắt đầu sau onTune() sẽ được gọi. Tuy nhiên, khi người dùng xem lượng nội dung vượt quá mức ứng dụng của bạn có thể ghi hình, bạn cần bắt đầu ghi một phân đoạn mới cho dịch chuyển thời gian và cập nhật thời gian bắt đầu sao cho phù hợp.

Vị trí hiện tại của một bản ghi dịch chuyển thời gian là vị trí phát hiện tại vị trí, tính bằng mili giây kể từ thời gian bắt đầu của hệ thống. Vị trí này thay đổi liên tục trong khi phát. Thông thường, bạn có thể dùng công cụ phát để xác định quá trình này , như được thể hiện trong ví dụ sau:

Kotlin

override fun onTimeShiftGetCurrentPosition(): Long =
        tvPlayer?.run {
            currentProgram?.let { program ->
                currentPosition + program.startTimeUtcMillis
            }
        } ?: TvInputManager.TIME_SHIFT_INVALID_TIME

Java

@Override
public long onTimeShiftGetCurrentPosition() {
  if (getTvPlayer() != null && currentProgram != null) {
    return getTvPlayer().getCurrentPosition() +
      currentProgram.getStartTimeUtcMillis();
  }
  return TvInputManager.TIME_SHIFT_INVALID_TIME;
}

Hãy đảm bảo rằng thời gian bắt đầu mà bạn cung cấp khi hệ thống gọi onTimeShiftGetStartPosition() không bao giờ lớn hơn vị trí thời gian hiện tại mà bạn cung cấp onTimeShiftGetCurrentPosition() Hệ thống sử dụng các lệnh gọi này để cập nhật thời lượng chuyển dịch thời gian trong giao diện người dùng bộ điều khiển chế độ phát.

Hỗ trợ các thông số phát

Để thay đổi tốc độ phát trong quá trình chuyển dịch thời gian, hệ thống sẽ sử dụng các thông số phát. Cho ví dụ: nếu người dùng quyết định tua lại quá trình phát hiện tại, thì lần phát mới tham số được truyền đến ứng dụng của bạn với tốc độ phát lại âm. Tính năng ghi dịch thời gian cũng hỗ trợ nhiều mức tốc độ phát, 2x hoặc 3x để tua lại hoặc tua đi.

Hệ thống gọi onTimeShiftSetPlaybackParams(PlaybackParams) có chứa một đối tượng PlaybackParams chứa cho phiên hiện tại. Sử dụng thông tin này để định cấu hình công cụ phát nội dung đa phương tiện một cách thích hợp.

Nếu công cụ phát của bạn không hỗ trợ tham số, mô phỏng hành vi dự kiến chính xác nhất có thể. Ví dụ: nếu phát công cụ không hỗ trợ tốc độ gấp 2 lần, hãy sử dụng các thao tác tua lặp lại khi bạn phát để đạt được tốc độ phát gần gấp đôi.

Sau khi các thông số được đặt, đừng thay đổi chế độ cài đặt trừ phi người dùng đưa ra lệnh phát lại yêu cầu một tham số hoặc công tắc khác sang một kênh mới.