import AVFoundation import SwiftUI #if os(iOS) import UIKit struct InlineVideoPlayer: UIViewRepresentable { let player: AVPlayer func makeUIView(context: Context) -> PlayerView { let view = PlayerView() view.playerLayer.player = player return view } func updateUIView(_ uiView: PlayerView, context: Context) { uiView.playerLayer.player = player } final class PlayerView: UIView { override class var layerClass: AnyClass { AVPlayerLayer.self } var playerLayer: AVPlayerLayer { layer as! AVPlayerLayer } override init(frame: CGRect) { super.init(frame: frame) playerLayer.videoGravity = .resizeAspectFill } required init?(coder: NSCoder) { nil } } } #elseif os(macOS) import AppKit struct InlineVideoPlayer: NSViewRepresentable { let player: AVPlayer func makeNSView(context: Context) -> PlayerView { let view = PlayerView() view.playerLayer.player = player return view } func updateNSView(_ nsView: PlayerView, context: Context) { nsView.playerLayer.player = player } final class PlayerView: NSView { let playerLayer = AVPlayerLayer() override init(frame frameRect: NSRect) { super.init(frame: frameRect) wantsLayer = true layer = playerLayer playerLayer.videoGravity = .resizeAspectFill } required init?(coder: NSCoder) { nil } override func layout() { super.layout() playerLayer.frame = bounds } } } #endif