0

我正在为 Android 应用程序创建视频过滤器,所以我使用TextureView它来播放视频和过滤器SurfaceTexture。但是视频的 FPS 总是低于原始的(30fps)。

正如我在 Galaxy S3 上检查的那样,onSurfaceTextureUpdated()尽管有过滤器或没有过滤器,但每秒只能输入 5~8 次。但在更强大的设备上,如三星 Galaxy J,它可以增加到每秒 10~13 次

请注意,此视频从 SD 卡加载。

有人知道原因吗?

mVideoPlayer.reset();
mVideoPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mVideoPlayer.setDataSource(mVideoPath);
mVideoPlayer.setSurface(new Surface(surfaceTexture));
mVideoPlayer.setLooping(true); mVideoPlayer.prepareAsync();
mVideoPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    public void onPrepared(MediaPlayer mp) {mp.start(); }
});
4

2 回答 2

1

如果从软件访问视频帧,则必须复制数据几次,这将杀死您的 FPS。

如果您将视频直接发送到与 TextureView 关联的 Surface,您不会看到减速,但您也没有机会过滤它。(Grafika有基于 SurfaceView 和 TextureView 的视频播放器,在性能上没有明显差异。SurfaceView 的效率稍高一些,但效果并不明显。)

要获得 30fps 的实时过滤,您可以使用 GPU,如本例所示,尽管您可以使用它执行的操作有限制。

于 2015-05-26T05:08:02.043 回答
-1

在检查了更多设备后,我发现导致此问题的主要原因是内存。所以我在去这个活动之前完成了之前的活动并发布了数据。然后视频的 FPS 在 S3 上增加到 10 +。

谢谢,

于 2015-05-27T04:42:33.257 回答