Android ExoPlayer视频不剪裁和贴合

Android ExoPlayer视频不剪裁和贴合,android,scale,exoplayer2.x,Android,Scale,Exoplayer2.x,我使用ExoPlayer库从我的服务器加载视频,我想缩放和裁剪视频以保持其纵横比。 视频播放很好,即使我改变了视频的音量,一切都很好。 我尝试在SimpleExoPlayer上使用setVideoScalingMode函数,并通过了: C.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING 什么也没有发生,我还尝试将resize属性更改为fill/fit。 仍然没有缩放和裁剪。经过互联网上的大量研究人员,经过大量时间调试exoplayer库代码,以了解缩

我使用ExoPlayer库从我的服务器加载视频,我想缩放和裁剪视频以保持其纵横比。 视频播放很好,即使我改变了视频的音量,一切都很好。 我尝试在SimpleExoPlayer上使用setVideoScalingMode函数,并通过了:

C.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING
什么也没有发生,我还尝试将resize属性更改为fill/fit。
仍然没有缩放和裁剪。

经过互联网上的大量研究人员,经过大量时间调试exoplayer库代码,以了解缩放不起作用的原因。 我通过代码找到了“resizeMode”属性的另一个选项,而不是xml选项,即“RESIZE\u MODE\u ZOOM”,它对视频进行了裁剪以保持比例。
希望有人会遇到这个问题。

使用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() {

        }
    });
mExoPlayer.addVideoListener(新的VideoListener(){
@凌驾
VideoSizeChanged上的公共空白(整数宽度、整数高度、整数未分配比例、浮点像素宽度高度比){
float viewWidth=mTextureView.getWidth();
float viewHeight=mTextureView.getHeight();
浮动比例=1.0f;
浮动刻度=1.0f;
如果(宽度>视图宽度和高度>视图高度){
scaleX=宽度/视图宽度;
scaleY=高度/视图高度;
}否则如果(宽度<视图宽度和高度<视图高度){
scaleY=视图宽度/宽度;
scaleX=视图高度/高度;
}否则如果(视图宽度>宽度){
scaleY=(视图宽度/宽度)/(视图高度/高度);
}否则如果(视图高度>高度){
scaleX=(视图高度/高度)/(视图宽度/宽度);
}
int pivotPointX=(int)(视图宽度/2);
int pivotPointY=(int)(视图高度/2);
矩阵=新矩阵();
矩阵.setScale(scaleX、scaleY、pivotPointX、pivotPointY);
mTextureView.setTransform(矩阵);
}
@凌驾
公共无效onRenderedFirstFrame(){
}
});

这有点解决了问题,但我仍然看到视频的宽度出现了一些变形。它有点拉长,但只要视频播放或我按下“后退”,视频宽度就会恢复到centerCrop。有人知道这种变形的原因吗?我不确定,但我认为只有在视频完全加载并且视频表面改变大小后才会形成。对不起,我的问题。除了更改大小调整模式外,我还调用了
mExoplayer.setVideoScalingMode(C.VIDEO\u SCALING\u MODE\u SCALE\u TO\u FIT\u WITH\u croping)
。你不能那样做。