在 TextureView 上播放时视频帧率低
Video is in low fps when playing on TextureView
我正在为 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(); }
});
如果从软件访问视频帧,则必须复制数据几次,这会降低 FPS。
如果您将视频直接发送到与 TextureView 关联的 Surface,您不会看到速度变慢,但您也没有机会对其进行过滤。 (Grafika 有基于 SurfaceView 和 TextureView 的视频播放器,在性能上没有明显差异。SurfaceView 的效率稍高,但并不显着。)
要以 30fps 的速度进行实时过滤,您可以使用 GPU,如 this example 中所示,尽管您可以使用它进行的操作有限制。
查看了更多的设备后,我发现导致这个问题的主要原因是内存。
所以我完成了之前的 activity 并在转到这个 activity 之前发布了数据。
然后视频的FPS在S3上增加到10+
谢谢,
我正在为 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(); }
});
如果从软件访问视频帧,则必须复制数据几次,这会降低 FPS。
如果您将视频直接发送到与 TextureView 关联的 Surface,您不会看到速度变慢,但您也没有机会对其进行过滤。 (Grafika 有基于 SurfaceView 和 TextureView 的视频播放器,在性能上没有明显差异。SurfaceView 的效率稍高,但并不显着。)
要以 30fps 的速度进行实时过滤,您可以使用 GPU,如 this example 中所示,尽管您可以使用它进行的操作有限制。
查看了更多的设备后,我发现导致这个问题的主要原因是内存。 所以我完成了之前的 activity 并在转到这个 activity 之前发布了数据。 然后视频的FPS在S3上增加到10+
谢谢,