Android Dev Summit, October 23-24: two days of technical content, directly from the Android team. Sign-up for livestream updates.

콘텐츠 녹화 지원

TV 입력 서비스를 사용하면 사용자가 타임 시프팅 API를 통해 채널 재생을 일시중지했다가 다시 시작할 수 있습니다. Android 7.0에서는 사용자가 여러 개의 녹화된 세션을 저장할 수 있도록 하여 타임 시프팅을 확장합니다.

사용자는 미리 녹화를 예약할 수도 있고 프로그램을 시청하다가 녹화를 시작할 수도 있습니다. 시스템에서 녹화 파일을 저장하면 사용자가 시스템 TV 앱을 사용하여 녹화 파일을 탐색, 관리, 재생할 수 있습니다.

TV 입력 서비스에 녹화 기능을 제공하려면 앱에서 녹화를 지원하는 것을 시스템에 알리고, 프로그램 녹화 기능을 구현하고, 녹화 중 발생하는 오류를 처리 및 전달하고, 녹화된 세션을 관리해야 합니다.

녹화 지원 알리기

TV 입력 서비스에서 녹화를 지원하는 것을 시스템에 알리려면 다음과 같이 서비스 메타데이터 XML 파일의 android:canRecord 속성을 true로 설정합니다.

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

서비스 메타데이터 파일에 관한 자세한 정보는 manifest에서 TV 입력 서비스 선언을 참조하세요.

다음 단계에 따라 코드에 녹화 지원을 표시할 수도 있습니다.

  1. TV 입력 서비스 onCreate() 메서드에서 TvInputInfo.Builder 클래스를 사용하여 새 TvInputInfo 객체를 만듭니다.
  2. TvInputInfo 객체를 만들 때 setCanRecord(true)를 호출한 후 build()를 호출하여 서비스에서 녹화를 지원하는 것을 표시합니다.
  3. TvInputManager.updateTvInputInfo()를 호출하여 시스템에 TvInputInfo 객체를 등록합니다.

세션 녹화

TV 입력 서비스에서 녹화 기능을 지원하는 것을 등록한 후에는 시스템에서 앱의 녹화 구현에 액세스해야 할 때 TvInputService.onCreateRecordingSession() 메서드를 호출합니다. 자체 TvInputService.RecordingSession 서브클래스를 구현하고 onCreateRecordingSession() 콜백이 실행되면 이 서브클래스를 반환합니다. 이 서브클래스는 정확한 채널 데이터로 전환하고, 요청된 데이터를 녹화하고, 녹화 상태와 오류를 시스템에 전달하는 역할을 담당합니다.

시스템에서 RecordingSession.onTune()를 호출하면 채널 URI에 전달되고, URI가 지정하는 채널에 맞춰 조정됩니다. notifyTuned()를 호출하여 앱이 원하는 채널에 맞춰 조정되었음을 시스템에 알리거나 앱이 적절한 채널에 맞춰 조정될 수 없으면 notifyError()를 호출합니다.

그런 다음, 시스템에서 RecordingSession.onStartRecording() 콜백을 호출합니다. 앱은 즉시 녹화를 시작해야 합니다. 시스템에서 이 콜백을 호출할 때 녹화될 프로그램에 관한 정보가 포함된 URI를 제공할 수 있습니다. 녹화가 완료되면 이 데이터를 RecordedPrograms 데이터 테이블로 복사합니다.

마지막으로, 시스템에서 RecordingSession.onStopRecording()를 호출합니다. 이 시점에는 앱이 즉시 녹화를 중지해야 합니다. RecordedPrograms 테이블에도 항목을 만들어야 합니다. 이 항목에는 RecordedPrograms.COLUMN_RECORDING_DATA_URI 열의 녹화된 세션 데이터 URI와 onStartRecording()에 대한 최초 호출에서 시스템이 제공한 프로그램 정보가 포함되어야 합니다.

RecordedPrograms 테이블에 액세스하는 방법에 관한 자세한 정보는 녹화된 세션 관리를 참조하십시오.

녹화 오류 처리

녹화 중에 오류가 발생해서 녹화된 데이터를 사용할 수 없게 되면 notifyError()를 호출하여 시스템에 알립니다. 마찬가지로, 녹화 세션이 만들어진 후 notifyError()를 호출하여 앱이 더 이상 세션을 녹화할 수 없음을 시스템에 알릴 수도 있습니다.

녹화 중에 오류가 발생했지만 부분 녹화 파일을 사용자가 재생할 수 있게 제공하려면 notifyRecordingStopped()를 호출하여 시스템에서 부분 세션을 사용할 수 있게 합니다.

녹화된 세션 관리

시스템은 모든 녹화 가능한 채널 앱의 모든 녹화된 세션에 관한 정보를 RecordedPrograms 콘텐츠 제공업체 테이블에서 유지보수합니다. 이러한 정보는 RecordedPrograms 콘텐츠 녹화 URI를 통해 액세스할 수 있습니다. 이 테이블의 항목을 읽고, 추가하고, 삭제하려면 콘텐츠 제공업체 API를 사용합니다.

콘텐츠 제공업체 데이터 사용에 관한 자세한 정보는 콘텐츠 제공업체 기본 정보를 참조하세요.

권장사항

TV 기기는 저장용량이 제한될 수 있으므로 녹화된 세션을 저장하도록 저장용량을 할당할 때는 신중히 판단하세요. 녹화된 세션을 저장할 공간이 충분하지 않은 경우에는 RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)를 사용합니다.

사용자가 녹화를 시작하면 최대한 빨리 데이터 녹화를 시작해야 합니다. 이러한 작업을 용이하게 하려면 시스템에서 onCreateRecordingSession() 콜백을 호출할 때 저장공간 액세스 및 할당과 같이 시간이 많이 걸리는 작업을 미리 완료합니다. 이렇게 하면 onStartRecording() 콜백이 실행되는 즉시 녹화를 시작할 수 있습니다.