我正在
URL
上播放 Exoplayer
上的视频,它会在使用 resize_mode
调整大小时拉伸视频,正如我在布局文件中提到的那样,使用此功能我无法保持视频的宽高比。
我想像
CENTER_CROP
中那样进行缩放类型TextureSurface
,如image2中所述,但我得到的输出为image1
我尝试过以下示例
我的输出(图1)和预期输出(图2)
exoplayer 布局代码
<com.google.android.exoplayer2.ui.SimpleExoPlayerView
android:id="@+id/player_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:resize_mode="fill" />
这条线
app:resize_mode="fill"
它适合屏幕中的视频,但垂直拉伸,
那么我该如何解决这个问题呢。
以下几行帮助我以全屏模式播放视频。
更改布局文件中的
app:resize_mode
有帮助,但它会拉伸问题中提到的视频。
<com.google.android.exoplayer2.ui.PlayerView
android:layout_width="match_parent"
app:resize_mode="...."
android:layout_height="match_parent" />
尝试根据要求将
AspectRatioFrameLayout
更改为 FILL,FIT,ZOOM...
,下面的代码对我有用。
exoVideoPlayerView.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_FILL);
以下几行将确保即使对于
4:3
视频也能正确保持宽高比。
exoPlayer.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_FIT);
更改
VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING
中的 exoplayer
有助于如上所述裁剪和缩放视频。
为了在 exo 播放器中保持中心裁剪,下面的代码对我有用:
Java代码:
playerView.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_ZOOM);
或者您可以从 xml 使用:
<com.google.android.exoplayer2.ui.PlayerView
android:id="@+id/playerView"
android:layout_width="match_parent"
app:resize_mode="zoom"
android:layout_height="match_parent" />
以下是可使用的调整大小模式选项
app:resize_mode="fixed_width"
app:resize_mode="fixed_height"
app:resize_mode="fill"
app:resize_mode="fit"
app:resize_mode="zoom"
您可以尝试每一种,看看它对您的容器的影响。
我的问题已使用以下几行解决:
playerView.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_FILL);
exoPlayer.setVideoScalingMode(C.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
科特林:
AndroidView(
modifier = Modifier.fillMaxSize().fillMaxHeight().fillMaxWidth(),
factory = {
StyledPlayerView(context).apply {
this.resizeMode = AspectRatioFrameLayout.RESIZE_MODE_FILL
}
})