![]() |
不敢表白的企鹅 · docker使用宿主机mac地址_mob64 ...· 9 月前 · |
![]() |
慷慨大方的显示器 · 【.Net Core】.NET ...· 1 年前 · |
![]() |
追风的投影仪 · 从忽略到重视,Stack Overflow ...· 1 年前 · |
![]() |
爱热闹的梨子 · 谁才是PHP实现延迟消息队列的最佳CP? - 知乎· 1 年前 · |
![]() |
飘逸的香蕉 · python impala python ...· 1 年前 · |
我正在尝试实现一个Android应用程序,它记录一个视频,同时还编写一个文件,其中包含每一帧拍摄的时间。我试着使用MediaRecorder,到了可以保存视频的程度,但我找不到方法来获得时间戳。我试着做了这样的事情:
while (previous video file length != current video file length)
write current time to text file;
但这似乎不起作用,因为文件长度似乎更新得不够频繁(或者我错了吗?)
然后我尝试使用OpenCV并设法逐帧捕获图像(因此获得时间戳很容易),但我无法找到将所有帧连接到一个视频的方法。我看到了关于使用NDK和FFmpeg的答案,但我觉得应该有一个更简单的解决方案(也许类似于我在顶部尝试过的解决方案?)
发布于 2014-12-23 18:41:37
您可以使用
MediaCodec
捕捉视频,但这很快就会变得复杂起来,特别是如果您也想要音频的话。您可以使用
MediaExtractor
从视频文件中恢复时间戳。只需在每一帧上调用
getSampleTime()
,以获得以微秒为单位的演示时间。
发布于 2019-07-23 15:28:43
这个问题很老,但我也需要同样的东西。使用camera2 api,您可以流到多个目标。因此,您可以从一个相同的物理相机流到MediaRecorder,同时也可以流到ImageReader。ImageReader有一个 ImageReader.OnImageAvailableListener ,即"onImageAvailable“回调,您可以使用它查询帧的时间戳:
image = reader.acquireLatestImage();
long cameraTime = image.getTimestamp();
但是不确定流到多个目标是否需要某些硬件功能(例如多个图像处理器)。我想,现代设备大概有2-3种。
编辑: 这 看起来像每一个camera2能力的设备可以流到多达3个目标。
编辑:显然,您可以使用 ImageReader 来捕获单个帧及其时间戳,然后使用 ImageWriter 向下游用户提供这些图像,比如 MediaCodec ,它为您记录视频。
发布于 2020-12-17 17:53:45
扩展fadden的答案,最简单的方法是使用 MediaRecorder 记录( Camera2实例 帮助了我很多),然后通过 MediaExtractor 提取时间戳。我想添加一个工作的MediaExtractor代码示例:
MediaExtractor extractor = new MediaExtractor();
![]() |
慷慨大方的显示器 · 【.Net Core】.NET Core中使用编码GB2312报错‘GB2312‘ is not a supported encoding name解决方案_gb2312' is not a supp 1 年前 |
![]() |
爱热闹的梨子 · 谁才是PHP实现延迟消息队列的最佳CP? - 知乎 1 年前 |