似乎无法获得 AVPlayerLayer 的视频高度

Posted

技术标签:

【中文标题】似乎无法获得 AVPlayerLayer 的视频高度【英文标题】:Can't seem to get video height for AVPlayerLayer 【发布时间】:2017-12-14 03:38:09 【问题描述】:

我似乎无法从我拥有的 URL 中获取视频的高度。每次我记录 playerLayer.videoRect.bounds.size.the 高度返回 0.000。关于如何根据视频调整 playerLayer 高度的任何帮助将不胜感激。

我将 playerLayer 的高度设置为视图高度的一半,只是为了显示视频。

这是我编辑的代码:

NSURL *videoURL = [NSURL URLWithString:self.videoURL];
self.player = [AVPlayer playerWithURL:videoURL];

AVAssetTrack* track = [[AVAsset assetWithURL:videoURL] tracksWithMediaType:AVMediaTypeVideo].firstObject;
CGSize size = CGSizeApplyAffineTransform(track.naturalSize, track.preferredTransform);
CGFloat videoWidth = size.width;
CGFloat videoHeight = size.height;

NSLog(@"%f wide, %f high)", videoWidth, videoHeight);

self.playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player];
self.playerLayer.frame = CGRectMake(0, self.navigationController.navigationBar.bottom, self.view.bounds.size.width, videoHeight);
[self.view.layer addSublayer:self.playerLayer];
[self.player play];
self.player.actionAtItemEnd = AVPlayerActionAtItemEndNone;

【问题讨论】:

【参考方案1】:

您可以使用AvAssetTrack 获取视频大小。

NSString* urlString = @"http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4";
NSURL* url = [[NSURL alloc]initWithString:urlString];

AVAssetTrack* track = [[AVAsset assetWithURL:url] tracksWithMediaType:AVMediaTypeVideo].firstObject;
CGSize size = CGSizeApplyAffineTransform(track.naturalSize, track.preferredTransform);
CGFloat width = size.width;  // 640
CGFloat height = size.height; // 360

注意:你应该把它置于后台模式,因为它会阻塞主线程直到完成获取大小成功。

【讨论】:

感谢您在获取身高方面的回答,现在视频周围有所有这些空白。我上传了一张截图。 我最终想通了。我取了视频的原始宽度,发现尺寸减小的百分比是多少,然后将其应用于高度,这样它就会按比例缩小高度。谢谢你的帮助栾。【参考方案2】:

有两个问题:

您要求此信息为时过早。与视频的其他所有内容一样,收集视频的大小需要时间。

您的依赖顺序是倒序的。 videoRect 取决于层的边界。但你没有给它任何界限;它的大小为零。

【讨论】:

以上是关于似乎无法获得 AVPlayerLayer 的视频高度的主要内容,如果未能解决你的问题,请参考以下文章

AVPlayerLayer 不在 iOS 11 中渲染离线 HLS 视频

如何使纵向模式的视频适合方形单元格?

在 AVPlayerLayer 和 AVPlayerViewController 中同步视频

在 SceneKit 中播放视频的最佳方式是啥?

AVPlayerLayer 不播放视频但音频很好

在 UICollectionView 上使用 AVPlayer 和 AVPlayerLayer 显示多个视频