【问题标题】:How can I scale video in ExoPlayer-V2 - Play Video In Full Screen如何在 ExoPlayer-V2 中缩放视频 - 全屏播放视频
【发布时间】:2018-08-05 21:12:09
【问题描述】:

我在Exoplayer 上播放来自URL 的视频,它使用resize_mode 在调整大小/打开视频时拉伸视频,正如我在布局文件中提到的那样,我无法保持视频的纵横比。

我想像 image2 中提到的那样在 TextureSurface 中进行缩放类型 CENTER_CROP,但我得到的输出为 image1

我试过下面的例子

Exoplayer Demo Example

我的输出 (Img 1) 和预期输出 (Img 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" 它适合屏幕中的视频但垂直拉伸, 那么我该如何解决呢。

【问题讨论】:

  • 如果要全屏播放视频,则必须在应用程序上使用与视频相同的方向,例如横向视频的横向,否则横向视频将在肖像模式下在屏幕中心播放跨度>
  • @UmarAta 是否可以像我们在 TextureSurface 缩放类型 CENTERE_CROP 中所做的那样?
  • 你到底想要什么
  • @UmarAta 我已经上传了输出的屏幕截图,请检查

标签: aspect-ratio exoplayer


【解决方案1】:

以下两行代码帮助我以全屏模式播放视频。

在布局文件中使用 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

【讨论】:

  • exoVideoView.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_FILL); 应更改为playerView.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_FIT);。这将确保即使对于 4:3 视频也能正确保持宽高比。
  • 说,你知道怎么做top-scale-crop,而不是center-crop吗?我在这里问过:stackoverflow.com/q/54216273/878126
  • 我的播放器视图不在中心,它放在顶部(高度和宽度是 match_parent),我怎样才能让它居中()?注意 - 为 playerview 提供上边距是行不通的(如果我这样做,玩家视图会变小)。
  • @BajrangHudda 尝试提供填充
  • 这很有帮助!
【解决方案2】:

为了在 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" />

【讨论】:

  • 设置为缩放后视频不只播放图片显示。
【解决方案3】:

以下是调整大小模式的选项

app:resize_mode="fixed_width"
app:resize_mode="fixed_height"
app:resize_mode="fill"
app:resize_mode="fit"
app:resize_mode="zoom"

您可以尝试每一种,看看它对您的容器的影响。

【讨论】:

  • 我注意到fit 是默认的,但是fillzoom 有什么区别?
【解决方案4】:

我的问题已使用以下几行解决:

playerView.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_FILL);
exoPlayer.setVideoScalingMode(C.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);

【讨论】:

  • 在 2.12.1 版本中。它将是这样的: playerView.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_FILL); simpleExoPlayer?.setVideoScalingMode(Renderer.VIDEO_SCALING_MODE_SCALE_TO_FIT)
  • 别忘了在PlayerView中添加app:surface_type="texture_view"
猜你喜欢
  • 1970-01-01
  • 2010-12-07
  • 1970-01-01
  • 1970-01-01
  • 2020-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多