Skip to content

Most visited

Recently visited

navigation

TV 녹화

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

사용자는 미리 녹화를 예약하거나 프로그램을 보면서 녹화를 시작할 수 있습니다. 시스템이 녹화물을 저장하면 사용자는 시스템 TV 앱을 사용하여 녹화물을 탐색, 관리, 재생할 수 있습니다.

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

참고: Live Channels 앱에서는 사용자가 녹화물을 만들거나 이에 액세스하는 방법을 아직 제공하지 않습니다. Live Channels 앱에 대한 변경이 이루어질 때까지는, 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 입력 서비스 선언을 참조하세요.

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

  1. TvInputService.onCreate() 메서드에서 TvInputInfo.Builder 클래스를 사용하여 새로운 TvInputInfo 객체를 생성합니다.
  2. 새로운 TvInputInfo 객체를 생성할 때, build()를 호출하기 전에 setCanRecord(true)를 호출하여 서비스가 녹화를 지원함을 나타냅니다.
  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 테이블에 액세스하는 자세한 방법은 녹화된 세션 관리를 참조하세요.

녹화 오류 처리

녹화 중에 오류가 발생해서 녹화된 데이터 렌더링을 사용할 수 없을 경우, RecordingSession.notifyError()를 호출하여 시스템에 알립니다. 마찬가지로 녹화 세션이 생성된 이후 notifyError()를 호출하여 앱이 더 이상 세션을 녹화하지 못한다는 것을 시스템에 알릴 수 있습니다.

녹화 중에 오류가 발생했지만 사용자에게 재생 가능한 부분 녹화물을 제공하고 싶다면 RecordingSession.notifyRecordingStopped()를 호출하여 시스템이 부분 세션을 사용할 수 있게 합니다.

녹화된 세션 관리

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

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

모범 사례

TV 기기는 저장소가 제한될 수 있으므로 녹화된 세션을 저장할 저장소를 할당할 때는 신중히 판단하세요. 녹화된 세션을 저장할 공간이 부족할 때는 RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)를 사용하세요.

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

This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Follow Google Developers on WeChat

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience.
(Sep 2017 survey)