iOS AVPlayer播放视频的留白处理

很多开发者使用AVPlayer播放视频的时候,会出现留白的问题,使得页面效果不是很好,如下图:

以上可以看出,在不知道视频宽高比的时候,给player一个预设高度,如果项目中背景色不是深色的时候,会达不到产品的要求。众所周知,苹果官方提供了三种填充模式:

/**
 AVPlayerLayer的videoGravity属性设置
 AVLayerVideoGravityResize,       // 非均匀模式。两个维度完全填充至整个视图区域
 AVLayerVideoGravityResizeAspect,  // 等比例填充,直到一个维度到达区域边界
 AVLayerVideoGravityResizeAspectFill, // 等比例填充,直到填充满整个视图区域,其中一个维度的部分区域会被裁剪
 */
@property (nonatomic, copy) NSString         *videoGravity;
复制代码

我们一般都默认使用的是AVLayerVideoGravityResizeAspect ,因为使用其他两种模式会拉伸视频,导致变形。那么问题来了,想使用AVLayerVideoGravityResizeAspect,又想不留白,该怎么处理呢?有种办法是:取得视频的宽高比,不预设高度,根据视频页面所在的宽度和取得视频的宽高比决定视频页面的高度,这样一来,可以解决留白的问题。 取得视频宽高比的方法:

//获取视频宽高比
- (CGFloat )getVideoScale:(NSURL *)URL{
    //获取视频尺寸
    AVURLAsset *asset = [AVURLAsset assetWithURL:URL];
    
    NSArray *array = asset.tracks;
    CGSize videoSize = CGSizeZero;
    for (AVAssetTrack *track in array) {
        if ([track.mediaType isEqualToString:AVMediaTypeVideo]) {
            videoSize = track.naturalSize;
        }
    }
    
  return videoSize.height/videoSize.width;
}
复制代码

如此一来,我们只需要根据这个比例来设定高度:

self.playerView.frame =CGRectMake(0,64,ScreenWidth,ScreenWidth*scale);
复制代码

效果如图:

GitHub源码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值