Hỗ trợ ghi nội dung

Dịch vụ đầu vào TV cho phép người dùng tạm dừng và tiếp tục phát kênh bằng API dịch chuyển thời gian. Android 7.0 mở rộng tính năng dịch chuyển thời gian bằng cách cho phép người dùng lưu nhiều phiên được ghi lại.

Người dùng có thể lên lịch trước cho các bản ghi hoặc bắt đầu ghi khi xem một chương trình. Sau khi hệ thống lưu một bản ghi âm, người dùng có thể duyệt qua, quản lý và phát lại bản ghi bằng ứng dụng TV hệ thống.

Nếu bạn muốn cung cấp chức năng ghi cho dịch vụ đầu vào TV, bạn phải cho hệ thống biết rằng ứng dụng của bạn hỗ trợ tính năng ghi, triển khai khả năng ghi chương trình, xử lý và truyền đạt mọi lỗi xảy ra trong khi ghi hình, và quản lý các phiên đã ghi.

Cho biết tính năng hỗ trợ ghi âm

Để cho hệ thống biết rằng dịch vụ đầu vào TV của bạn hỗ trợ tính năng ghi, hãy đặt thuộc tính android:canRecord trong tệp XML siêu dữ liệu của dịch vụ đến true:

<tv-input xmlns:android="http://schemas.android.com/apk/res/android"
  android:canRecord="true"
  android:setupActivity="com.example.sampletvinput.SampleTvInputSetupActivity" />

Để biết thêm thông tin về tệp siêu dữ liệu dịch vụ, hãy xem Khai báo đầu vào TV trong tệp kê khai.

Ngoài ra, bạn có thể cho biết khả năng hỗ trợ ghi âm trong mã bằng cách sử dụng các bước sau:

  1. Trong dịch vụ đầu vào TV onCreate() hãy tạo một đối tượng TvInputInfo mới bằng cách sử dụng phương thức TvInputInfo.Builder.
  2. Khi tạo đối tượng TvInputInfo mới, hãy gọi setCanRecord(true) trước khi gọi build() để cho biết rằng Dịch vụ hỗ trợ ghi âm.
  3. Đăng ký đối tượng TvInputInfo với hệ thống bằng cách gọi TvInputManager.updateTvInputInfo()

Ghi lại một phiên

Sau khi dịch vụ đầu vào TV của bạn đăng ký rằng dịch vụ đó hỗ trợ tính năng ghi chức năng, hệ thống sẽ gọi Phương thức TvInputService.onCreateRecordingSession() khi cần truy cập cho việc triển khai bản ghi của ứng dụng. Triển khai chiến dịch của riêng bạn Lớp con TvInputService.RecordingSession và trả về lớp con đó khi lệnh gọi lại onCreateRecordingSession() kích hoạt. Lớp con này chịu trách nhiệm để chuyển sang đúng dữ liệu kênh, ghi lại dữ liệu được yêu cầu, cũng như truyền đạt thông tin về trạng thái ghi và lỗi cho hệ thống.

Khi hệ thống gọi RecordingSession.onTune(), truyền vào một URI kênh, điều chỉnh đến kênh mà URI chỉ định. Thông báo cho hệ thống rằng ứng dụng của bạn đã điều chỉnh theo bằng cách gọi notifyTuned() hoặc nếu ứng dụng của bạn không thể dò kênh phù hợp, hãy gọi notifyError()

Tiếp theo, hệ thống sẽ gọi Lệnh gọi lại RecordingSession.onStartRecording(). Ứng dụng của bạn phải bắt đầu ghi ngay lập tức. Khi gọi lại lệnh gọi lại này, hệ thống có thể cung cấp URI chứa thông tin về chương trình sắp được ghi hình. Khi quá trình ghi hoàn tất, hãy sao chép dữ liệu này vào RecordedPrograms bảng dữ liệu.

Cuối cùng, hệ thống gọi RecordingSession.onStopRecording(). Tại thời điểm này, ứng dụng của bạn phải ngừng ngay lập tức. Bạn cũng cần tạo một mục nhập trong RecordedPrograms bao gồm URI dữ liệu phiên được ghi lại trong cột RecordedPrograms.COLUMN_RECORDING_DATA_URI và bất kỳ chương trình nào thông tin mà hệ thống đã cung cấp trong lệnh gọi ban đầu onStartRecording().

Để biết thêm chi tiết về cách truy cập vào Bảng RecordedPrograms, xem phần Quản lý các phiên đã ghi.

Xử lý lỗi ghi

Nếu xảy ra lỗi trong quá trình ghi, dẫn đến dữ liệu đã ghi không sử dụng được, thông báo cho hệ thống bằng cách gọi notifyError(). Bạn cũng có thể gọi notifyError() sau khi tạo phiên ghi để cho hệ thống biết rằng ứng dụng của bạn không thể ghi lại các phiên đó nữa.

Nếu xảy ra lỗi trong quá trình ghi nhưng bạn muốn cung cấp thông tin ghi một phần cho người dùng để phát lại, gọi notifyRecordingStopped() để cho phép hệ thống hãy sử dụng phiên hoạt động không trọn vẹn.

Quản lý các phiên đã ghi lại

Hệ thống lưu giữ thông tin cho tất cả các phiên được ghi lại từ tất cả các ứng dụng kênh có khả năng ghi trong RecordedPrograms bảng trình cung cấp nội dung. Thông tin này có thể truy cập được qua RecordedPrograms URI ghi nội dung. Sử dụng API trình cung cấp nội dung để đọc, thêm và xoá các mục nhập khỏi bảng này.

Để biết thêm thông tin về cách làm việc với dữ liệu của trình cung cấp nội dung, hãy xem Thông tin cơ bản về trình cung cấp nội dung.

Các phương pháp hay nhất

Các thiết bị TV có thể có bộ nhớ hạn chế, vì vậy, hãy suy xét thật kỹ lưỡng khi phân bổ bộ nhớ để lưu các phiên đã ghi. Sử dụng RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE) khi không đủ dung lượng để lưu phiên được ghi lại.

Khi người dùng bắt đầu ghi, hãy bắt đầu ghi dữ liệu ngay khi người dùng bắt đầu ghi nhất có thể. Để hỗ trợ việc này, hãy hoàn tất mọi công việc tốn nhiều thời gian, chẳng hạn như truy cập và phân bổ dung lượng lưu trữ, khi hệ thống gọi Lệnh gọi lại onCreateRecordingSession(). Làm như vậy sẽ giúp bạn bắt đầu ngay lập tức khi Lệnh gọi lại onStartRecording() kích hoạt.