Good day community!
I took part in Apple's MacOS 12 beta testing program and faced a problem with AVPlayer + AVPlayerLayer video playback.
System: Macos 12 Beta 5, Xcode 12.5.1
Problem: If application starts in a fullscreen mode, video is not rendering (while audio stream is playing). If I switched to windowed mode (at runtime) video layer becomes visible. This issue does not happen if application starts in windowed mode, there are no problems with video visibility. I can resize, switch fullscreen, switch back - everything works fine. Also there are no problem with video playback on Macos 11.
I provide the simplest application's source code, where one can reproduce the problem.
git clone https://github.com/s-petrovskiy/apple-test
and follow preparation steps in README.md
Steps: 1) Run the program; 2) Switch to fullscreen (by pressing F); 3) Launch video playback (by pressing P); 4) Observe the problem: video layer is not visible while audio is played; 5) Switch back to windowed mode (by pressing F); 6) Observe: video becomes visible.
Alternative: 1) Run the program; 2) Do not switch to fullscreen and launch the video playback (by pressing P); 3) Observe: video is visible; 4) Toggle to fullscreen (by pressing F) or resize the window manually; 5) Observe: everything works fine.
The simplest playback is roughly implemented as following:
- having a root NSView.
- create NSView playerView and set it up with
wantsLayer:YES;
setFrame:[root bounds];
- add as subview via
[root addSubview:playerView];
- create AVPlayer player;
- create AVPlayerLayer and init with AVPlayer's instance;
- set up playerLayer with
setAutoresizingMask:kCALayerWidthSizable | lCALayerHeightSizable;
setVideoGravityAVLayerVideoGravityResizeAspectFill;
setFrame:[videoView bounds];
- add playerLayer as sublayer to playerView backing layer (which was automatically created by wantsLayer:YES call) via
[playerView.layer addSublayer:playerLayer];
- attach playable asset to player;
- launch playback as
[player play];
I have no problems with video playback on MacOS 11 Big Sur and earlier. Do I miss something in my code or may it be MacOS 12's issue? I have read MacOS 12 release notes but haven't found any API or behaviour changes which may be related to my question.
Any help is highly appreciated. Best regards.