iOS: AVPlayer recording

📘

This guide applies to all frameworks that create or generate iOS applications.

Support for recording video from AVPlayerLayer or camera preview via AVCaptureVideoPreviewLayer is not currently available.

Symptoms

  • When user plays video with AVPlayer in layer or in AVPlayerViewController, the video is not recorded and the background (video content) is black.
  • All camera previews are black (without content).

Technical reasons

Both layers use low-level API that serves data to these layers via pixel buffers. Graphic data from AVFoundation are processed directly on-device GPU with hardware support, not in Core Graphics framework like other GUI parts. For us are these low-level layers inaccessible.

📘

AVPlayer recording failure is obviously an architectural problem that has not been solved by Apple for a long time. Their own ReplayKit framework behaves exactly the same, and Apple itself points this out in the documentation.

In general, using the camera preview does not mean that the recording is not working. For example, in ARKit we do not have problems because internally uses MetalKit.

Recommendations

Camera preview

Do not use AVCaptureVideoPreviewLayer to render the data from the device camera. Instead, use MTKView (MetalKit) to preview the camera. Such a solution works, and it does not seem to have any performance impacts.

More details and sample implementation

Video playback

We don't have any recommended solution yet.