当前位置: 首页 > 知识库问答 >
问题:

从视频中获取当前帧号

谭富
2023-03-14

我正在开发一个Android视频应用程序,我需要在暂停模式下获取当前显示的视频帧号。

我需要向我的服务器发送当前在视频中暂停的帧号,并返回关于该帧/时间的项目列表,现在我正在以毫秒为单位发送当前暂停的时间,但它不能很好地工作,因为服务器比较发送到它计算出具体的帧,基于时间,但有时比较并不精确。

我知道如果你使用MediaMetaDataRetriever,你可以从那个帧中得到一个位图,我做到了,但是它返回位图图像,我需要的是一个索引。我正在使用ExoPlayer(如果有关系,我也需要MP4和HLS的功能)。

有办法从视频中获取信息吗?

共有1个答案

计和顺
2023-03-14

我贴出了我的问题的解决方案,为了得到确切的帧时间我只是扩展MediaCodecVideoTrackRenderer.java类从ExoPlayer库和使用的值lastOutputBufferTimestamp这是在功能

@Override
protected boolean processOutputBuffer(long positionUs, long elapsedRealtimeUs,
                                      MediaCodec codec, ByteBuffer buffer, MediaCodec.BufferInfo bufferInfo, int bufferIndex,
                                      boolean shouldSkip) {
    boolean processed = super.processOutputBuffer(positionUs, elapsedRealtimeUs, codec, buffer,
            bufferInfo, bufferIndex, shouldSkip);
    if (!shouldSkip && processed) {
        lastOutputBufferTimestamp = bufferInfo.presentationTimeUs;
    }
    return processed;
}

它确实给了我确切的时间,而不是最后一个mPlayer的四舍五入时间。getDuration()或类似的东西。如果你的视频中有一个固定的FPS,你可以通过除法计算得到帧数。对我来说,知道确切的帧时间就足够了。

我使用的是ExoPlayer版本r1。5.3所以我不知道这个解决方案是否适用于新版本,因为代码可能已经更改了。

 类似资料:
  • FFMpeg的工作速度要快得多,但仍然相当慢。 所以,我的问题是,如果有一个lib,我可以在其中执行类似以下伪代码的操作: 快速扫描视频,不看帧内的任何东西,只看标题,以找到帧的类型,并继续下一帧。 我发现如果我直接指定帧,我不会得到真正的速度差异。 除了通过API之外,FFMPEG还有什么更快的吗?

  • 我正在尝试使用MediaCodec从视频中检索所有帧,用于图像处理,我正在尝试渲染视频并从outBuffers捕获帧,但我无法从接收到的字节启动位图实例。 我试着将它呈现为一个表面或无(null),因为我注意到当你呈现为null时,outBuffers将获得呈现帧的字节。 这是代码: 任何帮助都是非常有用的

  • 我使用这个库在我的Android应用程序中使用FFmpeg。我正在从视频中提取帧,然后将它们添加到裁剪查看器中。因此,每一帧都需要表示视频中的某个时间帧。下面是我当前提取帧的ffmpeg代码: 感谢任何帮助

  • 问题内容: 我想使用Java从视频文件(mov)中获取帧样本(jpeg)。是否有捷径可寻。当我在谷歌搜索时,我所能找到的就是从多个jpg中移动。我不知道也许找不到正确的关键字。 问题答案: Xuggler完成工作。他们甚至给出了完全符合我需要的示例代码。链接在下面 http://xuggle.googlecode.com/svn/trunk/java/xuggle- xuggler/src/com

  • 我会考虑不要将与其他解决方案一起使用以满足上述需求的建议。

  • 我也非常肯定应该可以工作,因为如果我在控制台中执行代码并手动等待视频开始,我会看到它正在打印videe属性值。 仅供参考,也尝试了java绑定,结果相同,一个空字符串: