import SwiftUI import AVFoundation // 跨平台视频渲染层 #if os(iOS) struct PlayerLayerView: UIViewRepresentable { let player: AVPlayer func makeUIView(context: Context) -> PlayerUIView { let view = PlayerUIView() view.playerLayer.player = player return view } func updateUIView(_ uiView: PlayerUIView, context: Context) { uiView.playerLayer.player = player } class PlayerUIView: UIView { override class var layerClass: AnyClass { AVPlayerLayer.self } var playerLayer: AVPlayerLayer { layer as! AVPlayerLayer } override init(frame: CGRect) { super.init(frame: frame) playerLayer.videoGravity = .resizeAspect backgroundColor = .black } required init?(coder: NSCoder) { fatalError() } override func layoutSubviews() { super.layoutSubviews() playerLayer.frame = bounds } } } #else struct PlayerLayerView: NSViewRepresentable { let player: AVPlayer func makeNSView(context: Context) -> PlayerNSView { let view = PlayerNSView() view.playerLayer.player = player return view } func updateNSView(_ nsView: PlayerNSView, context: Context) { nsView.playerLayer.player = player } class PlayerNSView: NSView { let playerLayer = AVPlayerLayer() override init(frame: CGRect) { super.init(frame: frame) playerLayer.videoGravity = .resizeAspect wantsLayer = true layer = playerLayer layer?.backgroundColor = NSColor.black.cgColor } required init?(coder: NSCoder) { fatalError() } override func layout() { super.layout() playerLayer.frame = bounds } } } #endif