Android Exoplayer-避免视频拉伸
我正在使用Exoplayer从Internet加载视频 加载视频并开始在容器内显示时,视频会自动拉伸,同时在视频渲染器上设置标志“MediaCodec.video\u SCALING\u MODE\u SCALE\u to\u FIT”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_
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();
}
您是否知道如何缩放裁剪以使其像中心裁剪一样工作,但在顶部?我在这里问过:您可能知道如何缩放裁剪它,使其像中心裁剪一样工作,但在顶部?我在这里问过: