t0m*_*t0m 5 android video-recording android-mediarecorder
我想将手机中的数据与录制视频所花费的时间进行同步。我想获取有关录制视频所用时间的信息(以毫秒为单位)。我尝试通过以下方法解决该问题:
1.运行计时。
伪:
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
Run Code Online (Sandbox Code Playgroud)
但是MediaRecorder存在问题,因为真实记录不会在MediaRecorder.start()之后立即开始,但是真实视频记录具有不同的延迟(取决于设备,...)。当MediaRecorder真正开始录制时,我需要“一些”回调或catch事件。
不需要有关停止录制的信息,因为我可以通过以下方式检查实际视频时长:
FileInputStream stream = new FileInputStream(storage.getVideoFile());
MediaMetadataRetriever retriever = new MediaMetadataRetriever();
retriever.setDataSource(stream.getFD());
String time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);
Run Code Online (Sandbox Code Playgroud)
我尝试在录制时通过MediaMetadataRetriever获取实际持续时间,但它仅适用于关闭的视频文件。
我试图通过FileObserver和onEvent进行检测,但这是准确的。
如果可能的话,我想通过Android SDK解决。但是如何?
[最小SDK:API21]
谢谢。
小智 3
我知道您可能在这 7 个月后解决了这个问题,但是...通过查看您发布的图片,您可以使用 MediaMetadataRetriever 计算真实视频长度,然后定义为从第一个获取的帧到"a"经过的时间
和经过的时间从最后获取的帧到的时间并假设 a=b 您可以通过以下方式计算开始记录时刻: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())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1003 次 |
| 最近记录: |