Android Mediarecorder录制的视频时长与预期时长不同

17

我使用安卓MediaRecorder录制了一个视频。

(主要问题:我需要知道视频的确切开始时间[系统时间]和结束时间[系统时间],且[结束时间 - 开始时间]必须与实际视频的持续时间匹配)

MediaRecorder.start
startTime = System.currentTimeMillis()

then on stop

MediaRecorder.stop
endTime = System.currentTimeMillis()

我希望这个视频能够达到这个时长。

期望时长 = (结束时间 - 开始时间)

然而,

期望时长总是大于实际视频时长。

我的怀疑是 MediaRecorder.start 很慢,在它实际开始写入视频帧之前需要一些时间。

那么现在,有没有办法在 MediaRecorder 开始将第一帧写入视频时得到通知?或者有没有办法找出视频实际开始录制的确切系统启动时间。

感谢您的阅读,非常感谢任何评论、意见或建议。^^


我遇到了同样的问题,你有解决方案吗? - suitianshi
我有一个类似的问题:http://stackoverflow.com/questions/28451571/wrong-duration-in-mediastore-video-media-duration - andreasperelli
预期持续时间比视频持续时间长多少? - nandsito
1个回答

6

我发现获取真实开始时间(尽管我不确定它是否足够准确)的最佳方法是找到持续时间,然后从endTime中减去它,如下所示:

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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接