我有一个带有 UIImageView 的轮播对象,我试图在其中对 AvPlayerLayer 进行 subLayer。
它工作得很好,虽然它没有填充 _videoView 的完整边界,但它的高度似乎更小,尽管我已经测试过将高度更改为极值,并且只要它与 UIImageView 重叠,它仍然处于该大小。
我用来实现这一点的代码如下:
UIView *embeddedView = [[UIView alloc] initWithFrame:_videoView.bounds];
embeddedView.center = CGPointMake(100, 140);
AVPlayerItem *avPlayeritem = [[AVPlayerItem alloc] initWithURL:[NSURL URLWithString:[_videoURLS objectAtIndex:carousel.currentItemIndex]]];
AVPlayer *avPlayer = [[AVPlayer alloc] initWithPlayerItem:avPlayeritem];
AVPlayerLayer *avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:avPlayer];
[avPlayerLayer setFrame:embeddedView.frame];
avPlayerLayer.videoGravity = AVLayerVideoGravityResizeAspect;
[avPlayerLayer setNeedsLayout];
[embeddedView.layer addSublayer:avPlayerLayer];
[carousel.currentItemView addSubview:embeddedView];
//Assign to notication to check for end of playback
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didFinishPlaying:) name:AVPlayerItemDidPlayToEndTimeNotification object:avPlayeritem];
[avPlayer seekToTime:kCMTimeZero];
[avPlayer play];
这是正在发生的事情的图像,因为您可以在顶部和底部分辨出来:
这是什么原因造成的,我该如何解决?
最佳答案
我认为视频没有填满 videoView
的完整边界是合乎逻辑的,因为您设置了 avPlayerLayer.videoGravity = AVLayerVideoGravityResizeAspect
。
你应该把它设置为 AVLayerVideoGravityResizeAspectFill
,它会没事的。
区别在于:
AVLayerVideoGravityResizeAspect
- 显示与原始大小成比例的视频,并且不允许任何变形。 AVLayerVideoGravityResizeAspectFill
- 调整视频大小,以填充其 subview 的完整边界,并且不关心比例。 最后一件事,做
[avPlayerLayer setFrame:embeddedView.bounds]
它比 [avPlayerLayer setFrame:embeddedView.frame]
更好。希望这可以帮助 :)
关于ios - AvPlayerLayer 大小不正确?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25276602/