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

时间:2017-12-14 03:38:09

标签: ios video avplayer

我似乎无法从我的网址中获取视频的高度。每次我记录playerLayer.videoRect.bounds.size.height时它返回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;

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:0)

有两个问题:

  • 您过早要求提供此信息。与其他关于视频的内容一样,收集视频的大小需要时间。

  • 您有向后依赖顺序。 videoRect取决于图层的边界。但你没有给它任何界限;它没有大小。