android - 在 Android 上提取/修改视频帧

标签 android video frame edit

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

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

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

最佳答案

选项 A:

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

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

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

重要说明:您需要 API 级别 14 支持才能使其正常工作!

选项 B:

正如您所指出的使用 ffmpeg 的可能性,您可以实现您的 Intent ,因为您可以完全访问解码器的输出帧。 您可以从 RockPlayer 或 MoboPlayer 的 ffmpeg 端口开始。 但是在这个选项中,渲染 NDK 的视频输出并不是直接的。 !

关于android - 在 Android 上提取/修改视频帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8665201/

相关文章:

android - 无法添加窗口—— token android.os.BinderProxy 无效;您的 Activity 正在运行吗?

android - 在 onDestroy 方法中更新服务器上的状态

ios - 在应用速率大于 2 倍时从 avplayer 播放生涩

iOS4 : how do I use video file as an OpenGL texture?

在 iOS 7 上打开应用程序后,iOS 6 View 变小

python - 为序列中某些事件之间的值创建一个列表。 。 。 Python

java - 使用套接字发送帧

java - 更改所有 Activity 的背景颜色

android - iconifiedByDefault 的 xml 版本被忽略

javascript - 使用视频循环绘制 Canvas