如何在不改变宽高比的情况下调整视频大小?

Posted

技术标签:

【中文标题】如何在不改变宽高比的情况下调整视频大小?【英文标题】:How to resize video without changing it's aspect ratio? 【发布时间】:2019-01-30 05:54:55 【问题描述】:
  constructor(props) 
    super(props);
    this.state = 
        screenWidth: Dimensions.get('window').width,
        heightScaled: null,
    ;  
     

<View style=styles.videoView>
       <Video 
          source=video
          ref=(ref) =>  this.player = ref   
          repeat=true
          resizeMode="contain"
          style=
              width: this.state.screenWidth,
              height: this.state.heightScaled,
           
          onLoad=response => 
                const  width, height  = response.naturalSize;
                const heightScaled = height * (this.state.screenWidth / width);

                response.naturalSize.orientation = "horizontal";
                this.setState( heightScaled: heightScaled );
          
       />
</View>

样式

videoView: 
  flex: 1,
  width: Dimensions.get('window').width,
  height: 350

我正在从 api 获取视频,然后使用 react-native-video 在视频组件中使用它。我不知道如何在不拉伸视频的情况下调整视频大小以适应视图。

这是上面代码的结果。

我不希望我的视频越过我在图片中标记的红线。 请帮我。过去 3 天我一直被这个问题困扰。

【问题讨论】:

必须尝试将您的视频组件包装在 View 中并为其指定宽度和高度? @warl0ck 我试过了。没用。 我也是react-native-video的新手 也许按照@warl0ck 的建议,使用posterResizeModeresizeMode 道具,其值为“cover” npmjs.com/package/react-native-video#posterresizemode npmjs.com/package/react-native-video#resizemode 检查View是否在没有Video组件的情况下不超过红线,确保不是View问题 【参考方案1】:

在包含&lt;Video /&gt;的父&lt;View /&gt;中再添加一个&lt;View /&gt;将解决视频溢出问题。

<View style=styles.videoView>
  <Video
    resizeMode="contain"
    style=
      flex: 1
    
  />
  <View style=flex: 1>
     /* Components after red line can be rendered here */
  </View>
</View>

【讨论】:

以上是关于如何在不改变宽高比的情况下调整视频大小?的主要内容,如果未能解决你的问题,请参考以下文章

调整位图的大小,保持宽高比,不会出现失真和裁剪

css 如何改变投资组合网格图像的大小/宽高比

iOS - 如何在不调整大小和重新定位按钮视图的情况下更改按钮图像

如何在不扭曲纵横比的情况下将 1000x1000 图像调整为 200x300 图像[重复]

使用Python,OpenCV缩放照片(忽略宽高比,保持宽高比)

在 Android 中播放 RTSP 流视频时如何保持宽高比?