Не удается заставить AVPlayerLayer отображать видео в NSView

Я пытаюсь сделать простой HLS-плеер для управления воспроизведением и отображением на дополнительном мониторе. Я использую AVFoundation в версии 10.7 для управления воспроизведением. Я могу успешно создать AVPlayerItem и AVPlayer, но у меня действительно возникают проблемы с отображением видео в NSView.

Должен признаться, что я новичок в Cocoa и занимаюсь разработкой iOS, поэтому мне может не хватать чего-то простого. Однако я потратил 4-5 часов, пытаясь заставить это работать, и мне это не удалось.

Когда я воспроизводю видео с AVPlayer, начинается воспроизведение, и я слышу звук. Однако видео не отображается.

Я постарался сделать это как можно проще. У меня есть NSViewController, где я добавляю AVPlayerLayer на его уровень представления:

AVPlayerLayer * playerLayer = [AVPlayerLayer playerLayerWithPlayer:player];
[playerLayer setFrame:self.view.bounds];
[self.view.layer addSublayer:playerLayer];

Насколько я знаю, это все, что мне нужно сделать. Однако видео никогда не отображается в представлении.

Кому-нибудь удалось добавить AVPlayerLayer в NSView? В документации AVFoundation показано, как это можно сделать с помощью UIView, и я тоже пробовал этот метод, но безуспешно в NSView.

Любая помощь будет принята с благодарностью!


person kcharwood    schedule 20.10.2011    source источник


Ответы (1)


Попробуйте отправить setWantsLayer: YES вашему представлению перед добавлением подслоя.

[self.view setWantsLayer:YES];
AVPlayerLayer * playerLayer = [AVPlayerLayer playerLayerWithPlayer:player];
[playerLayer setFrame:self.view.bounds];
[self.view.layer addSublayer:playerLayer];
person Jeff Youel    schedule 21.10.2011
comment
Вот и все. В документации AVFoundation показано, как настроить это на iOS, создав подкласс UIView. Однако у NSView нет layerClass, и это одна из причин, по которой он не работал у меня. Итак, я создал подклассы другим способом и обязательно добавил setWantsLayer, и, похоже, он отлично работает! - person kcharwood; 21.10.2011
comment
В iOS не похоже, что есть атрибут / метод wantlayer - person zakdances; 28.03.2013
comment
Большое вам спасибо !!, вы спасли мою жизнь. - person miniplayground; 29.11.2013
comment
Установка рамы сделала свое дело. Xcode не распознает setWantsLayer. - person John Erck; 10.11.2014