Android MediaRecorder - L oop Запись - PullRequest
       65

Android MediaRecorder - L oop Запись

0 голосов
/ 07 января 2020

Я хочу реализовать запись видео l oop (например, устройства DVR для автомобилей / автомобилей работают таким образом).

MediaRecorder имеет setMaxDuration метод:

После того, как запись достигнет указанной продолжительности, в MediaRecorder.OnInfoListener будет отправлено уведомление с кодом «что» в MEDIA_RECORDER_INFO_MAX_DURATION_REACHED, и запись будет остановлена. Остановка происходит асинхронно, нет гарантии, что диктофон остановится к тому времени, когда слушатель получит уведомление.

Поэтому, когда он достигает этой «максимальной длительности», он прекращает запись, но асинхронно, и как я могу начать новый сеанс записи, если предыдущий еще может продолжаться?

Должен ли я создать новый экземпляр MediaRecorder для следующего сеанса записи? Будет ли работать нормально?

private val infoListener: MediaRecorder.OnInfoListener =
    MediaRecorder.OnInfoListener { mr, what, extra ->
        when (what) {
            MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED -> {
                // I want to start a new recording session
            }
            ...
        }
    }

1 Ответ

0 голосов
/ 08 января 2020

Для приложения непрерывной записи setMaxFileSize () является более полезным, поскольку MediaRecorder отправит MEDIA_RECORDER_INFO_MAX_FILESIZE_APPROACHING код OnInfoListener, после чего ваше приложение может вызвать setNextOutputFile () , чтобы установить следующее имя файла и позволить MediaRecorder продолжить работу в новом файле без остановки и перезапуска записи из приложения. Если вы знаете видео и аудио битрейт, вы можете оценить размер файла, соответствующий желаемой продолжительности. Это не будет точной продолжительностью, но все же полезно для выполнения основной записи.

Вашему приложению потребуется отслеживать файлы, которые вы создаете, и удалять старые, если вы хотите реализовать схему циклической записи с ограниченным общим объемом хранилища.

...