TextureView 内で MediaPlayer を使用してビデオを再生すると、機能します。
ビデオが終了し、別のビデオを再生する必要がある場合は、次のビデオのアスペクト比に合わせて TextureView のサイズを変更します (例 - 3:4 から 9:16 など)。
問題は、最初のビデオが終了した後、最後のフレームが表示されたままです。TextureView のサイズが変更されるよりも、最初のビデオの最後のフレームが一瞬残りますが、現在はアスペクト比が悪く、2 番目のビデオがうまく再生されています。
(サイズ X サイズ) の長方形を示すビデオの画像:
画像 1: ビデオ 1、(3:4):
画像 2: ビデオ 1、ここでは 2 つのビデオの間にあります。ビデオ 1 の最後のフレームで、サイズ変更後 (9:16) になりましたが、四角形の見栄えが悪いです。下の画像は一瞬だけ表示されます:
画像 3: ビデオ 2、(9:16)、正常に再生されますが、画像 2 を一瞬表示した後:
使用されているコードについて特別なことは何もありません。ここにその一部を示します。
// To init the TextureView and MediaPlayer:
public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) {
m_MediaPlayer = new MediaPlayer();
m_Surface = new Surface(surfaceTexture);
m_MediaPlayer.setSurface(m_Surface);
}
m_TextureView.setSurfaceTextureListener(this);
// To Resize:
LayoutParams layoutParams = new FrameLayout.LayoutParams(newTVWidth, newTVHeight);
layoutParams.gravity = Gravity.CENTER;
m_TextureView.setLayoutParams(layoutParams);
// To play:
m_MediaPlayer.reset();
m_MediaPlayer.setDataSource(videoFilePath);
m_MediaPlayer.prepare();
// <--- Here comes a call to "To Resize" which is shown right above this code
m_MediaPlayer.start();