我使用ExoPlayer库从我的服务器加载视频,我想缩放和裁剪视频以保持其宽高比。 即使我改变了视频的音量,视频播放也很好,一切都很好。 我尝试在SimpleExoPlayer上使用setVideoScalingMode函数并传递:
C.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING
没有任何反应,我也尝试将resize属性更改为fill / fit。 仍然没有缩放和裁剪。
答案 0 :(得分:5)
经过互联网上的很多研究人员经过大量时间调试exoplayer库代码以了解为什么缩放不起作用。 我通过代码而不是xml选项(“RESIZE_MODE_ZOOM”)找到了“resizeMode”属性的另一个选项,并且它裁剪了视频以保持比率。 希望有人会遇到这个问题。
答案 1 :(得分:0)
使用TextureView并将其添加到exoplayer。使用addVideoListener回调来调整视频大小
mExoPlayer.addVideoListener(new VideoListener() {
@Override
public void onVideoSizeChanged(int width, int height, int unappliedRotationDegrees, float pixelWidthHeightRatio) {
float viewWidth = mTextureView.getWidth();
float viewHeight = mTextureView.getHeight();
float scaleX = 1.0f;
float scaleY = 1.0f;
if (width > viewWidth && height > viewHeight) {
scaleX = width / viewWidth;
scaleY = height / viewHeight;
} else if (width < viewWidth && height < viewHeight) {
scaleY = viewWidth / width;
scaleX = viewHeight / height;
} else if (viewWidth > width) {
scaleY = (viewWidth / width) / (viewHeight / height);
} else if (viewHeight > height) {
scaleX = (viewHeight / height) / (viewWidth / width);
}
int pivotPointX = (int) (viewWidth / 2);
int pivotPointY = (int) (viewHeight / 2);
Matrix matrix = new Matrix();
matrix.setScale(scaleX, scaleY, pivotPointX, pivotPointY);
mTextureView.setTransform(matrix);
}
@Override
public void onRenderedFirstFrame() {
}
});