Подтвердить что ты не робот

Android Mediarecorder записывает длительность видео, отличную от ожидаемой продолжительности

Я записал видео с помощью android Mediarecorder.

(Основная проблема: мне нужно знать точное время начала [System time] и endTime [Системное время] видео, а [endTime - startTime] должно соответствовать длительности фактического видео)

MediaRecorder.start
startTime = System.currentTimeMillis()

then on stop

MediaRecorder.stop
endTime = System.currentTimeMillis()

Я ожидаю, что видео будет иметь эту продолжительность

expected_duration = (endTime - startTime)

Однако

expected_duration всегда больше, чем фактическая продолжительность видео.

Мое подозрение в том, что MediaRecorder.start работает медленно, потребовалось некоторое время, прежде чем он начал писать кадры в видео.

Итак, есть ли когда-нибудь уведомление, когда MediaRecorder начал записывать первый кадр в видео? или я могу найти точный System startTime, когда видео действительно начало запись.

спасибо за чтение и оцените любые комментарии, мнения или предложения. ^^

4b9b3361

Ответ 1

Лучший способ найти реальное время начала (и, тем не менее, я не уверен, что он достаточно точен) - найти продолжительность, а затем вычесть ее из конечного времени следующим образом:

MediaRecorder.stop
endTime = System.currentTimeMillis()
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
//use one of overloaded setDataSource() functions to set your data source
retriever.setDataSource(this, Uri.fromFile(file));
String time = 
retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
    long movieDurationInMillis = Long.parseLong(time );
    long startCaptureTimeMillis = endTime - movieDurationInMillis;