gpt4 book ai didi

Android MediaMetadataRetriever.getFrameAtTime 跳过帧

转载 作者:行者123 更新时间:2023-11-29 18:04:55 28 4
gpt4 key购买 nike

我编写了一个简单的 Android 应用程序,它使用 MediaMetadataRetriver 类来获取帧。它工作正常,只是我意识到它会跳帧。

我要解码的视频 fragment 是用手机摄像头拍摄的。遵循相关的代码 fragment :

MediaMetadataRetriever mediaDataRet = new MediaMetadataRetriever();
mediaDataRet.setDataSource(path);

String lengthMsStr = mediaDataRet
.extractMetadata(mediaDataRet.METADATA_KEY_DURATION);
final long lenMs = Long.parseLong(lengthMsStr);

String widthStr = mediaDataRet
.extractMetadata(mediaDataRet.METADATA_KEY_VIDEO_WIDTH);
int width = Integer.parseInt(widthStr);
String heightStr = mediaDataRet
.extractMetadata(mediaDataRet.METADATA_KEY_VIDEO_HEIGHT);
int height = Integer.parseInt(heightStr);

注意变量 lenMs,它保存以毫秒为单位的 clid 持续时间。然后对于我做的每一帧:

                int pace = 30; // 30 fps ms spacing 


for (long i = 0; i < lenMs; i += pace) {

if (is_abort())
return;

Bitmap bitmap = mediaDataRet.getFrameAtTime(i * 1000); // I tried the other version of this method with OPTION_CLOSEST, with no luck.

if (bc == null)
bc = bitmap.getConfig();

bitmap.getPixels(pixBuffer, 0, width, 0, 0, width, height);
[...]
}

目测检查后,我注意到有些帧被跳过了(比如短序列)。为什么?我该如何避免这种情况?

最佳答案

使用:

mediaDataRet.getFrameAtTime(i * 1000, MediaMetadataRetriever.OPTION_CLOSEST);

getFrameAtTime(n) 使用 OPTION_CLOSEST_SYNC,它只会给你关键帧。

关于Android MediaMetadataRetriever.getFrameAtTime 跳过帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13903936/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com