blob: 5e6ce45b99ecc2c7a3fb126bf1f4b9bafecedaf6 [file] [log] [blame]
page.title=Запись ТВ
page.keywords=preview,sdk,tv,recording
page.tags=androidn
page.image=images/cards/card-nyc_2x.jpg
@jd:body
<div id="qv-wrapper">
<div id="qv">
<h2>Содержание документа</h2>
<ol>
<li><a href="#supporting">Указание на поддержку записи</a></li>
<li><a href="#recording">Запись сеанса</a></li>
<li><a href="#errors">Обработка ошибок записи</a></li>
<li><a href="#sessions">Управление записанными сеансами</a></li>
<li><a href="#best">Советы и рекомендации</a></li>
</ol>
</div>
</div>
<p>Службы телевидения позволяют пользователю ставить воспроизведение телеканалов на паузу и возобновлять его, используя
для этого API-интерфейсы с временным сдвигом. Android N расширяет возможности временного сдвига,
позволяя пользователю сохранять несколько записанных сеансов.</p>
<p>Пользователи могут планировать запись заранее или начинать ее во время просмотра
программы. После сохранения записей в системе пользователь может просматривать их в браузере, управлять ими
и воспроизводить их с помощью телевизионного приложения.</p>
<p>Если вы хотите добавить функцию записи в службу ТВ,
вы должны указать системе, что ваше приложение поддерживает запись, и реализовать
возможности записи программ, обработки любых ошибок, возникающих
во время записи, вывода сообщений об ошибках, а также управления записанными сеансами.</p>
<h2 id="supporting">Указание на поддержку записи</h2>
<p>Чтобы сообщить системе, что ваша служба ТВ поддерживает запись, выполните
следующие шаги:</p>
<ol>
<li>В методе <code>TvInputService.onCreate()</code> создайте новый объект
<code>TvInputInfo</code>, используя класс <code>TvInputInfo.Builder</code>.
</li>
<li>При создании нового объекта <code>TvInputInfo</code> вызовите метод
<code>setCanRecord(true)</code> до вызова <code>build()</code>,
чтобы указать на то, что служба поддерживает запись.</li>
<li>Зарегистрируйте объект <code>TvInputInfo</code> в системе посредством вызова метода
<code>TvInputService.updateTvInputInfo()</code>.</li>
</ol>
<h2 id="recording">Запись сеанса</h2>
<p>Когда служба ТВ зарегистрирует поддержку записи,
система будет вызывать ваш метод
<code>TvInputService.onCreateRecordingSession()</code>, когда ей потребуется доступ
к функции записи в вашем приложении. Реализуйте собственный подкласс
<code>TvInputService.RecordingSession</code> и возвращайте его
при получении обратного вызова <code>onCreateRecordingSession()</code>.
Этот подкласс отвечает за переключение на данные нужного канала,
запись запрошенных данных, а также передачу системе информации о состоянии записи
и ошибках.</p>
<p>Когда система будет вызывать метод <code>RecordingSession.onTune()</code>, передавая в него
URI канала, приложение должно переключаться на канал, указанный URI. Сообщите системе о том, что
приложение настроилось на желаемый канал, вызвав метод <code>notifyTuned()</code>.
Если приложению не удалось настроиться на желаемый канал, оно должно вызвать метод
<code>notifyError()</code>.</p>
<p>Затем система передает обратный вызов <code>RecordingSession.onStartRecording()</code>.
После этого приложение должно сразу же начать запись. Когда система передает
этот обратный вызов, она может указать URI с информацией о программе
для записи. После завершения записи эти данные нужно
скопировать в таблицу данных <code>RecordedPrograms</code>.</p>
<p>Наконец, система вызывает метод <code>RecordingSession.onStopRecording()</code>.
В этот момент приложение должно сразу же прекратить запись. Также вам нужно будет
создать запись в таблице <code>RecordedPrograms</code>. Эта запись должна
содержать URI записанных данных в столбце
<code>RecordedPrograms.COLUMN_RECORDING_DATA_URI</code>, а также любую информацию
о программе, которая была предоставлена системой в исходном вызове
<code>onStartRecording()</code>.</p>
<p>Более подробную информацию о доступе к таблице <code>RecordedPrograms</code>
можно найти в разделе <a href="#sessions">Управление записанными сеансами</a>.</p>
<h2 id="errors">Обработка ошибок записи</h2>
<p>Если во время записи возникла ошибка, в результате которой записанные данные стали непригодными для использования,
то об этом нужно сообщить системе, вызвав метод <code>RecordingSession.notifyError()</code>.
Аналогичным образом, вы можете вызвать метод <code>notifyError()</code> после создания сеанса записи,
чтобы сообщить системе, что приложение больше не может записывать сеансы.</p>
<p>Если в процессе записи возникла ошибка, но вы хотите предоставить пользователям
приемлемую часть записи для воспроизведения, вызовите
<code>RecordingSession.notifyRecordingStopped()</code>, чтобы дать системе возможность
использовать частичный сеанс.</p>
<h2 id="sessions">Управление записанными сеансами</h2>
<p>Система хранит информацию обо всех записанных сеансах всех
приложений, поддерживающих запись каналов, в таблице поставщиков контента <code>TvContract.RecordedPrograms</code>.
Эта информация доступна через URI контента
<code>RecordedPrograms.Uri</code>. Используйте API-интерфейсы поставщиков контента для
чтения, добавления и удаления записей из этой таблицы.</p>
<p>Дополнительную информацию о работе с данными поставщиков контента можно найти в разделе
<a href="{@docRoot}guide/topics/providers/content-provider-basics.html">
Основные сведения о поставщике контента</a>.</p>
<h2 id="best">Советы и рекомендации</h2>
<p>Объем хранилищ на телевизионных устройствах может быть ограничен, поэтому следует разумно
распределять доступные хранилища для хранения записанных сеансов. Используйте
<code>RecordingCallback.onError(RECORDING_ERROR_INSUFFICIENT_SPACE)</code>, когда для сохранения записанного сеанса
недостаточно места.</p>
<p>Когда пользователь инициирует запись, приложение должно как можно скорее начать записывать
данные. Для этого рекомендуется заранее выполнить все продолжительные задачи,
такие как получение доступа к хранилищу и распределение свободного места, когда система передает обратный вызов
<code>onCreateRecordingSession()</code>. Это позволяет сразу же начать
запись после получения обратного вызова <code>onStartRecording()</code>.
</p>