ExoPlayer视频没有裁剪和适合

时间:2018-01-07 15:56:18

标签: android scale exoplayer2.x

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

C.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING

没有任何反应,我也尝试将resize属性更改为fill / fit。 仍然没有缩放和裁剪。

2 个答案:

答案 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() {

        }
    });