gpt4 book ai didi

android - 在 Android 的 TextureView 中的视频出现问题后播放视频

转载 作者:太空宇宙 更新时间:2023-11-03 10:19:29 26 4
gpt4 key购买 nike

在 TextureView 中使用 MediaPlayer 播放视频,效果很好。

当一个视频结束并且应该播放另一个视频时,我会调整 TextureView 的大小以适应即将播放的视频的纵横比(例如 - 从 3:4 到 9:16 等等......)。

问题,第一个视频结束后,它的最后一帧仍然显示,调整 TextureView 的大小后,第一个视频的最后一帧会保留一瞬间,但现在长宽比不佳,第二个视频播放良好。

显示(大小 X 大小)矩形的视频图像:

图片 1:视频 1,(3:4):

enter image description here

图 2:视频 1,我们在 2 个视频之间,视频 1 的最后一帧,在调整大小后现在位于 (9:16),但矩形看起来很糟糕。下图显示了一瞬间:

enter image description here

图 3:视频 2,(9:16),播放效果不错,但在一瞬间显示 image2 之后:

enter image description here

所使用的代码没有什么特别的,这里是其中的一些部分:

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

最佳答案

也许你有几个选择。

理论上,您可以通过断开媒体播放器、使用 GLES 清理 Surface,然后再次连接媒体播放器来清理 Surface。请参阅 Grafika 的 PlayMovieSurfaceActivity 中的 clickPlayStop()clearSurface() .这使用 MediaCodec,而不是 MediaPlayer,所以我不确定它会如何翻译。

另一种选择是使用 TextureView 转换而不是自定义框架布局来设置纵横比。因为您的布局没有改变,所以不会出现扭曲的框架。请参阅 PlayMovieActivity 中的 adjustAspectRatio()举个例子。

关于android - 在 Android 的 TextureView 中的视频出现问题后播放视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26741788/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com