0

Androidアプリ用のビデオフィルターを作成しているので、TextureViewビデオを再生してその上でフィルター処理するために使用していSurfaceTextureます。しかし、ビデオの FPS は常にオリジナル (30fps) よりも低くなります。

Galaxy S3で確認したところ、onSurfaceTextureUpdated()フィルターの有無にかかわらず、1秒間に5~8回しか入力できませんでした。しかし、Samsung Galaxy J などのより強力なデバイスでは、1 秒あたり 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 に答える