2014-01-30 2 views
6

Я использую следующий код, чтобы показать видео на весь экран на моем UIView:Stretch видео на AVPlayerLayer

- (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» ... ничего не меняется.

Как я могу решить? Спасибо

+1

использование AffineTransform масштабировать его, чтобы заполнить экран – santhu

+0

Не существует более простой способ? Потому что я должен жестко программировать параметры масштабирования для каждого поддерживаемого устройства/экрана. Но я все равно попробую –

+0

Он работает! Но я думаю, что я выберу два разных видео, по одному для каждого экрана устройства (3,5 дюйма и 4 дюйма). –

ответ

9

Ваша установка Гравитация затем повторно Initing игроку попробовать:

- (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]; 
} 
+1

videoGravity работает для меня. –

+0

видео можно подогнать к раме зрения –

+0

AVLayerVideoGravityResizeAspectFill? – SeanLintern88

Смежные вопросы