Android Exoplayer-避免视频拉伸

Android Exoplayer-避免视频拉伸,android,exoplayer,Android,Exoplayer,我正在使用Exoplayer从Internet加载视频 加载视频并开始在容器内显示时,视频会自动拉伸,同时在视频渲染器上设置标志“MediaCodec.video\u SCALING\u MODE\u SCALE\u to\u FIT” this._videoRenderer = new MediaCodecVideoTrackRenderer(this._context, source, MediaCodecSelector.DEFAULT, MediaCodec.VIDEO_SCALING_

我正在使用Exoplayer从Internet加载视频

加载视频并开始在容器内显示时,视频会自动拉伸,同时在视频渲染器上设置标志“MediaCodec.video\u SCALING\u MODE\u SCALE\u to\u FIT”

this._videoRenderer = new MediaCodecVideoTrackRenderer(this._context, source, MediaCodecSelector.DEFAULT, MediaCodec.VIDEO_SCALING_MODE_SCALE_TO_FIT);
布局:

<LinearLayout
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/selfie_slider_slide_thumbnail"
        android:layout_gravity="center|center_vertical"
        android:visibility="gone" />

    <SurfaceView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/selfie_slider_slide_video"
        android:layout_gravity="center|center_vertical" />
</LinearLayout>

图像显示正确,但视频显示不正确。以下是两个正确说明问题的示例:

  • 这是容器内的缩略图

  • 这是加载后的视频。你可以看到它被拉长了(不要注意黑线,这是一个糟糕的裁剪)


我想我可以根据缩略图大小调整容器的大小,但这意味着每次视频更改时我都需要调整容器的大小,所以我正在尝试找到更好的方法。如果有人猜,我就猜

您可以使用Exoplayer,也可以在以前的版本中使用。您需要接收
onVideoSizeChanged
事件并更新TextureView/FrameLayout比率:

/**
 * @param width                    video width
 * @param height                   video width
 * @param unappliedRotationDegrees ?
 * @param pixelRatio               (optional) pixel ratio
 */
@Override
public void onVideoSizeChanged(int width, int height, int unappliedRotationDegrees, float pixelRatio) {
    if (!mRatioAlreadyCalculated && mVideoWidthHeightRatio != (float) width / height) {
        mVideoWidthHeightRatio = ((float) width / height) * pixelRatio;
        mRatioAlreadyCalculated = true;
    }
    updateVideoRatio();
}

您可以使用Exoplayer,也可以在以前的版本中使用。您需要接收
onVideoSizeChanged
事件并更新TextureView/FrameLayout比率:

/**
 * @param width                    video width
 * @param height                   video width
 * @param unappliedRotationDegrees ?
 * @param pixelRatio               (optional) pixel ratio
 */
@Override
public void onVideoSizeChanged(int width, int height, int unappliedRotationDegrees, float pixelRatio) {
    if (!mRatioAlreadyCalculated && mVideoWidthHeightRatio != (float) width / height) {
        mVideoWidthHeightRatio = ((float) width / height) * pixelRatio;
        mRatioAlreadyCalculated = true;
    }
    updateVideoRatio();
}

您是否知道如何缩放裁剪以使其像中心裁剪一样工作,但在顶部?我在这里问过:您可能知道如何缩放裁剪它,使其像中心裁剪一样工作,但在顶部?我在这里问过: