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" />
서비스 메타데이터 파일에 관한 자세한 내용은 매니페스트에서 TV 입력 서비스 선언을 참고하세요.
또는 다음 단계에 따라 코드에 녹화 지원을 표시할 수 있습니다.
- TV 입력 서비스
onCreate()
메서드에서TvInputInfo.Builder
클래스를 사용하여 새TvInputInfo
객체를 만듭니다. - 새
TvInputInfo
객체를 만들 때build()
를 호출하기 전에setCanRecord(true)
를 호출하여 서비스가 녹화를 지원한다고 표시합니다. 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()
콜백이 실행되는 즉시 녹화를 시작할 수 있습니다.