4

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();
4

1 に答える 1