gpt4 book ai didi

Android检测真实录音,MediaRecorder有延迟

转载 作者:太空宇宙 更新时间:2023-11-03 10:40:11 28 4
gpt4 key购买 nike

我想将手机数据与录制视频的耗时同步。我想获得有关录制视频的耗时的信息(以毫秒为单位)。我尝试通过以下方式解决它:
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

但是 MediaRecorder 存在问题,因为真正的录制不会在 MediaRecorder.start() 之后立即开始,但真正的视频录制有不同的延迟(取决于设备,...)。当 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来解决。但是如何呢?
[最小 SDK:API21]

谢谢。

最佳答案

我知道你可能在这 7 个月后解决了这个问题,但是......通过查看您发布的图片,您可以使用 MediaMetadataRetriever 计算真实视频长度,然后将 "a" 定义为从Mediarecorder.start() 到第一个获取的帧和 "b" 从最后一个获取的帧到 Mediarecorder.stop() 的耗时和假设 a=b 您可以通过以下方式计算开始记录时刻:

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())

关于Android检测真实录音,MediaRecorder有延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35386663/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com