根据视频的纵横比调整 AVPlayerItem 容器视图的大小

Posted

技术标签:

【中文标题】根据视频的纵横比调整 AVPlayerItem 容器视图的大小【英文标题】:resize AVPlayerItem container view based on aspect ratio from video 【发布时间】:2016-01-31 19:54:45 【问题描述】:

我有一个名为 videoView 的容器 UIView。我在该视图中添加了一个 AVPLayerLayer。我不知道如何将videoView 调整为与 avplayer 层相同的比例。使用videoGravity 并没有达到预期的效果。

AVPlayerItem* playerItem = [AVPlayerItem playerItemWithURL:path];

_videoPlayer = [[AVPlayer alloc] initWithPlayerItem:playerItem];

AVPlayerLayer *layer = [AVPlayerLayer layer];

[_avplayerLayer setPlayer:_videoPlayer];
[_avplayerLayer setBackgroundColor:[UIColor whiteColor].CGColor];
[_avplayerLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];
[_avplayerLayer setFrame:_videoView.bounds];
[_videoView.layer addSublayer:_avplayerLayer];

我正在使用自动布局,我的布局将适应 _videoView 高度的变化。

【问题讨论】:

【参考方案1】:

videoGravity 不会改变视图的帧,而是用视频填充当前帧。

我认为您应该在播放之前检查每个视频的 resolution 并调整 videoView 的高度约束(应该是一个 ivar 并约束到 videoView 的宽度)multiplier。 videoView 宽度应限制为屏幕宽度。

【讨论】:

谢谢!再加上这个答案,我得到了它的工作:***.com/a/34643565/1392515

以上是关于根据视频的纵横比调整 AVPlayerItem 容器视图的大小的主要内容,如果未能解决你的问题,请参考以下文章

以视频的纵横比在纹理视图上播放视频

css 调整大小时保持容器的纵横比

使用 Imagemagick 将大图像裁剪为特定的纵横比,然后调整它们的大小

调整图像大小以使大小与指定的纵横比匹配[重复]

调整图像大小并裁剪为新的纵横比

在调整大小期间保持子类 QWidget 的纵横比