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

Can't seem to get video height for AVPlayerLayer

我似乎无法从我拥有的 URL 中获取视频的高度。每次我记录 playerLayer.videoRect.bounds.size.the 高度 returns 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;

有两个问题:

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

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

您可以使用 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

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