【问题标题】:Stretch video on AVPlayerLayer在 AVPlayerLayer 上拉伸视频
【发布时间】:2014-01-30 10:43:08
【问题描述】:

我正在使用以下代码在我的 UIView 上显示全屏视频:

- (void)playMovie:(NSString *)name :(NSString *)type
{
    NSURL *movieURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:name ofType:type]];

    self.movieAsset = [AVAsset assetWithURL:movieURL];
    self.movieItem = [[AVPlayerItem alloc] initWithAsset:self.movieAsset];
    self.moviePlayer = [[AVPlayer alloc] initWithPlayerItem:self.movieItem];
    self.moviePlayer.actionAtItemEnd = AVPlayerActionAtItemEndNone;
    self.movieLayer.videoGravity = AVLayerVideoGravityResize;

    self.movieLayer = [AVPlayerLayer playerLayerWithPlayer:self.moviePlayer];
    [self.movieLayer setFrame:self.view.frame];

    [self.view.layer addSublayer:self.movieLayer];
    [self.moviePlayer addObserver:self forKeyPath:@"status" options:0 context:nil];

    // Schedule stop after 6 seconds
    [NSTimer scheduledTimerWithTimeInterval:6.0 target:self selector:@selector(stopCurrentMovie:) userInfo:nil repeats:NO];
}

视频正在播放,但它没有填满(如果需要,可以拉伸)整个屏幕,但它只会调整大小以保持其宽度/高度比:我已经尝试了“videoGravity”的所有三个值......似乎没有改变。

我该如何解决? 谢谢

【问题讨论】:

  • 使用 affineTransform 将其缩放以填满屏幕
  • 没有更简单的方法吗?因为那样我必须为每个支持的设备/屏幕硬编码缩放选项。不过我还是会试试的
  • 它正在工作!但我想我会选择两个不同的视频,一个用于每个设备屏幕(3.5 英寸和 4 英寸)。

标签: ios objective-c video avplayer avplayerlayer


【解决方案1】:

您设置重力然后重新启动播放器尝试:

- (void)playMovie:(NSString *)name :(NSString *)type
{
 NSURL *movieURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:name ofType:type]];

self.movieAsset = [AVAsset assetWithURL:movieURL];
self.movieItem = [[AVPlayerItem alloc] initWithAsset:self.movieAsset];
self.moviePlayer = [[AVPlayer alloc] initWithPlayerItem:self.movieItem];


self.movieLayer = [AVPlayerLayer playerLayerWithPlayer:self.moviePlayer];
[self.movieLayer setFrame:self.view.frame];
self.moviePlayer.actionAtItemEnd = AVPlayerActionAtItemEndNone;
self.movieLayer.videoGravity = AVLayerVideoGravityResize;

[self.view.layer addSublayer:self.movieLayer];
[self.moviePlayer addObserver:self forKeyPath:@"status" options:0 context:nil];

// Schedule stop after 6 seconds
[NSTimer scheduledTimerWithTimeInterval:6.0 target:self selector:@selector(stopCurrentMovie:) userInfo:nil repeats:NO];
}

【讨论】:

  • 可以将视频调整到 viewFrame
  • AVLayerVideoGravityResizeAspectFill?
  • 谢谢!你让我今天一整天都感觉很好!将 videoGravity 设置为 AVLayerVideoGravityResizeAspectFill 为我工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-31
  • 2017-05-11
  • 2022-12-05
  • 1970-01-01
相关资源
最近更新 更多