Android “的实际时间”;nativeGetTimestamp“;在;“表面结构”;

Android “的实际时间”;nativeGetTimestamp“;在;“表面结构”;,android,surface,Android,Surface,我正在写一个视频处理应用程序,需要知道每帧的实际时间 当我使用elapsedRealtime计算时间偏移量时,该应用程序一开始运行良好: long timeOffset = java.lang.System.currentTimeMillis() - android.os.SystemClock.elapsedRealtime(); long actualTime = timestamp + timeOffset; 但是,当我使用另一台设备时,我发现一些设备将SurfaceTexture.ti

我正在写一个视频处理应用程序,需要知道每帧的实际时间

当我使用
elapsedRealtime
计算时间偏移量时,该应用程序一开始运行良好:

long timeOffset = java.lang.System.currentTimeMillis() - android.os.SystemClock.elapsedRealtime();
long actualTime = timestamp + timeOffset;
但是,当我使用另一台设备时,我发现一些设备将SurfaceTexture.timestamp使用
uptimeMillis
,因此代码应该是:

long timeOffset = java.lang.System.currentTimeMillis() - android.os.SystemClock.uptimeMillis();
long actualTime = timestamp + timeOffset;
所以我的问题是,有没有办法知道SurfaceTexture使用的是哪个时间源

虽然我可能会在应用程序启动时计算最近的时间源,但我认为这可能会导致另一个我还不知道的事故


有什么办法知道吗?

MediaCodec并没有发明时间戳。当您将
presentationTimeUs
参数传递到
queueInputBuffer
时,MediaCodec返回的缓冲区仅包含与
presentationTimeUs
相同的值,或者在使用
Surface
输入时,在输入表面上使用
eglPresentationTimeANDROID
进行设置


因此,您需要检查实际生成时间戳的代码,以了解它们使用的时间引用。

我发现我的时间戳是由
SurfaceTexture的
nativeGetTimestamp
制作的,您能告诉我如何知道SurfaceTexture的时间源吗?SurfaceTexture中的内容填充了什么?例如,如果是MediaCodec解码,则时间戳来自该MediaCodec解码器的输入数据。我的SurfaceTexture上下文是Camera!那么这不是一个MediaCodec问题,而是一个摄像头API问题。不幸的是,我现在还不知道。你的信息真的很有用,我会继续寻找答案的!