使用TextureView内的MediaPlayer播放视频,它能正常工作。
当一个视频结束并且另一个视频应该播放时,我会调整TextureView的大小以适应即将播放的视频的宽高比(例如从3:4到9:16等)。
问题在于,第一个视频结束后,它的最后一帧仍然显示,然后调整TextureView的大小,第一个视频的最后一帧会短暂地保留,但现在宽高比不正确,第二个视频则正常播放。
视频的图像显示为(大小X大小)的矩形:
图片1: 视频1,(3:4):
图片2: 视频1,在两个视频之间,视频1的最后一帧,在调整大小后现在是(9:16),但矩形看起来很糟糕。下面的图片只显示了一瞬间:
图片3: 视频2,(9:16),在显示图片2短暂时间后正常播放。
代码没有什么特别之处,这里是其中的一些部分:
当一个视频结束并且另一个视频应该播放时,我会调整TextureView的大小以适应即将播放的视频的宽高比(例如从3:4到9:16等)。
问题在于,第一个视频结束后,它的最后一帧仍然显示,然后调整TextureView的大小,第一个视频的最后一帧会短暂地保留,但现在宽高比不正确,第二个视频则正常播放。
视频的图像显示为(大小X大小)的矩形:
图片1: 视频1,(3:4):
图片2: 视频1,在两个视频之间,视频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();