我发布了我的问题的解决方案,为了获得确切的帧时间,我只是从 ExoPlayer 库中扩展了 MediaCodecVideoTrackRenderer.java 类,并使用了函数中的 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,所以我不知道此解决方案是否适用于较新版本,因为代码可能已更改。