2016-02-13 5 views
1

Я хотел бы синхронизировать данные с телефона с истекшим временем записи видео. Я хотел бы получить информацию (в мс) об истекшем времени записи видео. Я пробовал решить эту проблему через:
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 действительно начинает запись.

enter image description here Информации о записи стоп не нужна, потому что я могу проверить реальную длительность видео через:

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]

спасибо.

+0

Запуск таймера сразу после возвращения mp.start() не достаточно хорош? –

+0

Я пытаюсь решить запись, а не играть. Когда вы имеете в виду MediaRecorder.start(), нет, потому что между MediaRecorder.start() и реальной записью находится на моем устройстве ~ 700 мс. – t0m

ответ

1

Я знаю, что, вероятно, вы решили эту проблему после того, как эти 7 месяцев, но ... Глядя на картину вы вывесили вы можете вычислить реальное видео длины с MediaMetadataRetriever затем, определив "a", как время, прошедшее от Mediarecorder.start() к первой приобретенной раме и "b" время, прошедшее с момента последнего приобретенного кадра в Mediarecorder.stop() и при условии, что а = Ь можно вычислить момент времени записи запуска с помощью:

startTime + a

где:

a = b = ((stopTime - startTime) - REAL VIDEO LENGTH)/2 

startTime = System.nanoTime() (called right after MediaRecorder.start()) 

stopTime = System.nanoTime() (called right after MediaRecorder.stop()) 
+0

Спасибо. «... и если предположить, что a = b, вы можете вычислить начальный момент записи ...» Но a! = b. – t0m

+0

Вы нашли другое решение? –

 Смежные вопросы

  • Нет связанных вопросов^_^