在Android上提取/修改视频帧

时间:2011-12-29 07:42:59

标签: android video frame edit

我有一个视频文件。我想获取视频的每一帧并对帧进行一些修改,例如在其中绘制另一个位图,放置一些文本等。

Android中是否有可用于从视频中获取帧的API /框架?我在iOS中使用他们的AVFramework做了类似的事情。

如果可以使用ffmpeg,我将使用一些可用的开源NDK。

1 个答案:

答案 0 :(得分:11)

选项A:

您可以创建SurfaceTexture对象并将其附加到MediaPlayer,如下所示

myPlayer = new MediaPlayer
...
myRedirectionSurface = new Surface(mySurfaceTexture);
myPlayer->setSurface(myRedirectionSurface);

这样,玩家的解码流被“重定向”到SurfaceTexture而不是SurfaceView。 只要有可用的解码帧,就会调用OnFrameAvailableListener。 要访问/修改图像,您可以使用Surface的锁定/解锁方法 myRedirectionSurface。

重要说明:您需要获得API级别14支持才能使其正常运行!

选项B:

正如您已指出使用ffmpeg的可能性,您可以实现您想要的目标,因为您可以完全访问解码器的输出帧。 您可以从RockPlayer或MoboPlayer的ffmpeg端口开始。 但在此选项中,渲染NDK的视频输出不是直播前进。 !