MediaCodec的ExtractMpegFramesTest示例不匹配。

3
我尝试运行这个例子bigflake,但我认为存在不匹配。
他们写道“ExtractMpegFramesTest.java(需要4.1,API 16)”,因此所需的最低API为16, 但是我查看代码时发现它们使用“import android.opengl.EGL14;”,它需要最低API 17。
有人遇到过这个问题并成功解决了吗?(在Android 4.1设备上成功保存了10帧)
2个回答

3

我已经更新了该网站,现在有两个源文件的副本,一个使用EGL 1.0,另一个使用EGL 1.4。我用SDK进行了快速测试,创建了一个API 16的应用程序,以确认它不再使用post-4.1 API。但是我还没有在运行4.1的实际设备上尝试过。


1
首先非常感谢您的更新,现在没有错误了。但是有一个bug,在这行代码之后:boolean doRender = (info.size != 0); 在Galaxy S3上,“doRender”始终为false,在Galaxy S4上这个例子可以正常工作。 - Itay
好的,示例终于可以工作了!我只是没有使用doRender变量。 - Itay
@Itay:我正在尝试让ExtractMpegFramesTest工作。主要是我有一个带有按钮的主活动和一个ExtractMpegFramesTest类。当我点击按钮时,它会创建一个ExtractMpegFramesTest对象,并运行object.testExtractMpegFrames()。但它不起作用。它抱怨java.lang.RuntimeException:frame wait timed out。你能给我一个线索来解决它吗?请看我的帖子:http://stackoverflow.com/questions/22139205/android-mediacodec-encoding-falis-because-no-sync-frames-for-video-track 谢谢! - user1914692

0

我之前尝试过媒体元数据检索器,但是我需要解码1920x1080的300帧,所以这对我来说太耗时了。 - Itay
1
该调用存在的目的是从视频流中提取单个缩略图。它真的不适用于从视频中提取所有帧。 - fadden
是的,可能并不是这样,我只是没有看到OP的问题中有提取视频中“所有”(或300)帧的请求… - jpm
getFrameAtTime() 的另一个问题是它基于时间而不是基于帧。如果视频没有以恒定的帧速率录制,可能会出现几帧,然后几秒钟没有任何内容,然后再出现几帧等情况,这将导致不必要地“创建”帧。根据数据的预期用途,这可能重要也可能不重要。(请参见4.4的 screenrecord,这是一种以此方式记录视频的示例——仅在屏幕更改时输出一帧。) - fadden

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接