我有一个视频文件。我想获取视频的每一帧并对帧进行一些修改,例如在其中绘制另一个位图,放置一些文本等。
Android 中是否有任何 API/框架可用于从视频中获取帧?我在 iOS 中使用他们的 AVFramework 做了类似的事情。
如果可以使用 ffmpeg,我将使用一些可用的开源 NDK。
选项A:
您可以创建一个表面纹理 http://developer.android.com/reference/android/graphics/SurfaceTexture.html对象并将其附加到 MediaPlayer,如下所示
myPlayer = new MediaPlayer
...
myRedirectionSurface = new Surface(mySurfaceTexture);
myPlayer->setSurface(myRedirectionSurface);
这样,播放器的解码流将“重定向”到 SurfaceTexture 而不是 SurfaceView。
只要有可用的解码帧,就会调用 OnFrameAvailableListener。
要访问/修改图像,您可以使用 Surface 的锁定/解锁方法
我的重定向表面。
重要提示:您需要有 API 级别 14 支持才能正常工作!
选项B:
正如您已经表明使用 ffmpeg 的可能性,您可以实现您的意图,因为您可以完全访问解码器的输出帧。
您可以从 RockPlayer 或 MoboPlayer 的 ffmpeg 端口开始。
但在此选项中,渲染 NDK 的视频输出并不是直接进行的。 !
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)