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

Hãy sử dụng API chức năng tua lại/tua chậm trong dịch vụ đầu vào truyền hình của bạn để cho phép người dùng tạm dừng, tua lại và tua nhanh các chương trình trực tiếp trên các kênh dịch vụ của bạn. Nếu ứng dụng của bạn hỗ trợ tính năng xem lại, người dùng sẽ có thể linh hoạt hơn trong cách 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ý sự cố ngắn hạn, nhờ đó họ sẽ không bỏ lỡ bất kỳ khoảnh khắc quan trọng nào.
  • Người dùng có thể tua nhanh qua 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. Các nút điều khiển chế độ phát trên Android TV dùng để xem lại nội dung.

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

Sử dụng API ghi hình trên 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 bên ngoài phiên phát hiện tại.

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

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

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

Để 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ợ tính năng ghi hình tạm dừng và tua lại, hãy xem phần Thông báo cho hệ thống về trạng thái ghi hình tạm dừng và tua lại.

Nếu đang dùng Thư viện đi kèm TIF để triển khai lớp TvInputService.Session, bạn sẽ tự động nhận được một quy trình triển khai tính năng tua đi tua lại bằng ExoPlayer. Bạn có thể sử dụng chế độ triển khai này hoặc ghi đè các phương thức API tua đi tua lại trong BaseTvInputService.Session và cung cấp chế độ triển khai của riêng bạn. Để biết thêm thông tin về cách sử dụng Thư viện đồng hành TIF, hãy xem bài viết 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 một phiên bắt đầu

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

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

Quản lý bộ nhớ lưu trữ nội dung đã ghi hình

Dịch vụ đầu vào TV của bạn chịu trách nhiệm lưu trữ bản ghi ghi hình tua lại trong bộ nhớ ứng dụng riêng tư của ứng dụng và phát nội dung khi hệ thống gọi các phương thức ghi hình tua lại của bạn, 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 có tính năng ghi hình tua lại trên đám mây, thì bạn có thể sử dụng bộ nhớ đám mây thay vì bộ nhớ ứng dụng.

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

Vì nội dung video được ghi có thể cần nhiều bộ nhớ, nên bạn cần quản lý cẩn thận nội dung được ghi trong quá trình phát phiên. Nếu thời gian phát lại vượt quá thời gian bạn có thể ghi và lưu trữ để xem lại, hãy điều chỉnh chế độ ghi hình xem lại để 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à kích thước tối đa của bản ghi có tính năng ghi hình tua đi là 30 phút, hãy điều chỉnh bản ghi và thời gian bắt đầu để chứa nội dung từ phút thứ 1 đến phút thứ 31.

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

Khi người dùng chuyển sang một kênh khác hoặc kết thúc phiên phát, hãy xoá dữ liệu ghi hình tua lại.

Thông báo cho hệ thống về trạng thái ghi hình tua lại

Nếu dịch vụ đầu vào của TV hỗ trợ tính năng ghi hình tạm dừng, hãy gọi notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_AVAILABLE) trong quá trình triển khai onTune() khi người dùng dò kênh.

Để thông báo cho hệ thống nếu có bất kỳ tính năng ghi hình tạm dừng nào của dịch vụ đầu vào thay đổi, hãy sử dụng notifyTimeShiftStatusChanged(int). Ví dụ: nếu dịch vụ đầu vào của TV không hỗ trợ tính năng ghi hình tạm dừng do hạn chế về dung lượng lưu trữ hoặc các lý do khác, hãy gọi notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNAVAILABLE).

Nếu dịch vụ đầu vào của TV không hỗ trợ tính năng ghi hình tạm dừng, hãy gọi notifyTimeShiftStatusChanged(TvInputManager.TIME_SHIFT_STATUS_UNSUPPORTED) khi một phiên phát được tạo. Hệ thống coi mọi dịch vụ đầu vào không bao giờ gọi notifyTimeShiftStatusChanged() là dịch vụ đầu vào không hỗ trợ tính năng tua lại. Điều này bao gồm các dịch vụ đầu vào sử dụng API cấp 22 trở xuống.

Theo dõi thời gian phát

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

Vị trí hiện tại của bản ghi có tính năng ghi hình tạm dừng là vị trí phát hiện tại, tính bằng mili giây kể từ thời gian bắt đầu của hệ thống. Vị trí này liên tục thay đổi trong quá trình phát. Thông thường, bạn có thể sử dụng công cụ phát để xác định giá trị này, như minh hoạ 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;
}

Đả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 trong onTimeShiftGetCurrentPosition(). Hệ thống sử dụng các lệnh gọi này để cập nhật thời lượng tua lại trong giao diện người dùng của các nút điều khiển phát.

Hỗ trợ các tham số phát

Để thay đổi tốc độ phát lại trong quá trình tua nhanh thời gian, hệ thống sử dụng các tham số phát lại. Ví dụ, nếu người dùng quyết định tua lại đoạn phát hiện tại, các tham số phát lại mới 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 tua lại 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 phương thức onTimeShiftSetPlaybackParams(PlaybackParams) của bạn với một đối tượng PlaybackParams chứa các tham số cho phiên hiện tại. Hãy sử dụng thông tin này để định cấu hình công cụ phát phù hợp cho nội dung nghe nhìn.

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

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