首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图用时间戳在Android上捕捉视频

试图用时间戳在Android上捕捉视频
EN

Stack Overflow用户
提问于 2014-12-23 18:09:32
回答 3查看 2.7K关注 0票数 1

我正在尝试实现一个Android应用程序,它记录一个视频,同时还编写一个文件,其中包含每一帧拍摄的时间。我试着使用MediaRecorder,到了可以保存视频的程度,但我找不到方法来获得时间戳。我试着做了这样的事情:

代码语言:javascript
复制
while (previous video file length != current video file length)
    write current time to text file;

但这似乎不起作用,因为文件长度似乎更新得不够频繁(或者我错了吗?)

然后我尝试使用OpenCV并设法逐帧捕获图像(因此获得时间戳很容易),但我无法找到将所有帧连接到一个视频的方法。我看到了关于使用NDK和FFmpeg的答案,但我觉得应该有一个更简单的解决方案(也许类似于我在顶部尝试过的解决方案?)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-12-23 18:41:37

您可以使用MediaCodec捕捉视频,但这很快就会变得复杂起来,特别是如果您也想要音频的话。您可以使用MediaExtractor从视频文件中恢复时间戳。只需在每一帧上调用getSampleTime(),以获得以微秒为单位的演示时间。

票数 2
EN

Stack Overflow用户

发布于 2019-07-23 15:28:43

这个问题很老,但我也需要同样的东西。使用camera2 api,您可以流到多个目标。因此,您可以从一个相同的物理相机流到MediaRecorder,同时也可以流到ImageReader。ImageReader有一个ImageReader.OnImageAvailableListener,即"onImageAvailable“回调,您可以使用它查询帧的时间戳:

代码语言:javascript
复制
image = reader.acquireLatestImage();
long cameraTime = image.getTimestamp();

但是不确定流到多个目标是否需要某些硬件功能(例如多个图像处理器)。我想,现代设备大概有2-3种。

编辑:看起来像每一个camera2能力的设备可以流到多达3个目标。

编辑:显然,您可以使用ImageReader来捕获单个帧及其时间戳,然后使用ImageWriter向下游用户提供这些图像,比如MediaCodec,它为您记录视频。

票数 2
EN

Stack Overflow用户

发布于 2020-12-17 17:53:45

扩展fadden的答案,最简单的方法是使用MediaRecorder记录( Camera2实例帮助了我很多),然后通过MediaExtractor提取时间戳。我想添加一个工作的MediaExtractor代码示例:

代码语言:javascript
复制
MediaExtractor extractor = new MediaExtractor();
extractor.setDataSource(pathToVideo);
do {
    long sampleMillis = extractor.getSampleTime() / 1000;
    // do something with sampleMillis
}
while (extractor.advance() && extractor.getSampleTime() != -1);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27625781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档