Я хотел бы синхронизировать данные с телефона с истекшим временем записи видео. Я хотел бы получить информацию (в мс) об истекшем времени записи видео. Я пробовал решить эту проблему через:
1. Запустите время.
Псевдо:Android обнаруживает реальную запись, MediaRecorder имеет задержку
mMediaRecorder.start(); //start recording
startTime = System.currentTimeMillis(); //save start recording time
timerHandler.postDelayed(timerRunnable, 0); //for save elapsed time and timerHandler.postDelayed(this, 20); for next 20ms
но есть проблема с MediaRecorder, потому что реальная не запись начинается после MediaRecorder.start() сразу же, но запись в режиме реального видео имеют разные задержки (в зависимости от устройства, ...). Мне нужно «некоторое» callback или событие catch, когда MediaRecorder действительно начинает запись.
Информации о записи стоп не нужна, потому что я могу проверить реальную длительность видео через:
FileInputStream stream = new FileInputStream(storage.getVideoFile());
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource(stream.getFD());
String time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
Я пытался получить фактическую продолжительность во время записи с помощью MediaMetadataRetriever, но он работает только на закрытом видеофайл.
Я пытался обнаружить через FileObserver и onEvent, но это точно.
Если возможно, я хотел бы решить с помощью Android SDK. Но как?
[min SDK: API21]
спасибо.
Запуск таймера сразу после возвращения mp.start() не достаточно хорош? –
Я пытаюсь решить запись, а не играть. Когда вы имеете в виду MediaRecorder.start(), нет, потому что между MediaRecorder.start() и реальной записью находится на моем устройстве ~ 700 мс. – t0m