2012-10-17 1 views
2

Мне нужно сыграть серию видео в моем приложении. Я использую AVQueuePlayer для воспроизведения видео с помощью кода:Кнопки управления в AVPlayer и рамке

AVQueuePlayer *queuePlayer = [[AVQueuePlayer alloc] initWithItems:items]; 
AVPlayerLayer *myPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:queuePlayer]; 
myPlayerLayer.frame = CGRectMake(0, 0, 320, 350); 
[self.view.layer addSublayer:myPlayerLayer]; 
[self.queuePlayer play]; 

У меня есть две проблемы.

  1. Когда видео играет, рама игрока не в соответствии с заданными значениями (т.е.. 0, 0, 320, 350).

  2. Кнопки управления (громкость, воспроизведение, остановка, перемотка вперед и т. Д.) Отображаются, когда они воспроизводятся при воспроизведении видео с помощью MPMediaPlayer. Я что-то пропустил для обоих случаев? (Я использую AVFoundation в первый раз, поэтому эти вопросы могут показаться глупыми).

Заранее спасибо.

ответ

1

Когда видео воспроизводится, кадр игрока не соответствует заданным значениям (то есть 0, 0, 320, 350).

Код примера Apple не использует -playerLayerWithPlayer :. Он создает подкласс UIView, уровень которого является AVPlayerLayer. Возможно, есть причина для этого. Я делаю это в своем коде, и он отлично работает. Взгляните на код AVPlayerDemo и попробуйте сделать это таким образом.

Нет кнопки управления (громкость, воспроизведение, стоп, вперед и т.д.) в настоящее время показано, как они показаны, когда мы играем видео с MPMediaPlayer. Мне не хватает что-то для обоих случаев? (Я впервые использую AVFoundation , поэтому эти вопросы могут показаться глупыми).

AVPlayer не предоставляет эти данные для вас. Для этого необходим MPMoviePlayerController. Если вам нужны элементы управления и вы хотите использовать AVPlayer, вам нужно будет самостоятельно создать и управлять элементами управления.

1

В качестве альтернативы ответ Дэйва на ваш первый вопрос ...

При использовании автоматической раскладки, вы можете хранить, как локального свойства, ссылка на слой игрока, возвращаемый playerLayerWithPlayer: и обновить свой кадр всякий раз, когда вид зрения контроллера выкладывает свои подвидов -

- (void)viewDidLayoutSubviews 
{ 
    [super viewDidLayoutSubviews]; 

    self.playerLayer.frame = self.view.layer.bounds; 
} 

Или, если вы работаете в UIView подкласс -

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    self.playerLayer.frame = self.layer.bounds; 
} 

Это предполагает, что вы хотите, чтобы игрок заполнил представление; вы можете обновить код, если у вас есть другие намерения.

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

  • Нет связанных вопросов^_^