AnyDesktop: A Fullscreen Video Player in macOS
import Cocoa import AVFoundation
@NSApplicationMain class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet weak var window: NSWindow!
@IBOutlet weak var view: NSView!
var player: AVPlayer?
func applicationDidFinishLaunching(_ aNotification: Notification) {
// 设置窗口
setupWindow()
// 设置窗口为全屏
NSApp.setPresentationOptions([.fullScreen])
// 开始播放视频
player?.play()
}
func setupWindow() {
let mask: NSWindow.StyleMask = [.borderless, .resizable, .fullScreen]
window.styleMask = mask
window.level = .desktop // 窗口层次在桌面之下
view.wantsLayer = true
view.layer?.backgroundColor = NSColor.clear.cgColor // 设置窗口contentView为透明
window.backgroundColor = NSColor.clear // 设置窗口为透明
}
func player() -> AVPlayer {
if player == nil {
let playerItem = itemWithIndex(3)
player = AVPlayer(playerItem: playerItem)
let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = view.bounds
playerLayer.videoGravity = .resizeAspect
view.layer?.addSublayer(playerLayer)
NotificationCenter.default.addObserver(self, selector: #selector(runLoopTheMovie(_:)), name: .AVPlayerItemDidPlayToEndTime, object: player?.currentItem)
}
return player!
}
func itemWithIndex(_ idx: Int) -> AVPlayerItem {
let resName = 'demo(idx)'
let path = Bundle.main.path(forResource: resName, ofType: 'mp4')!
let url = URL(fileURLWithPath: path)
let playerItem = AVPlayerItem(url: url)
return playerItem
}
@objc func runLoopTheMovie(_ notification: Notification) {
guard let playerItem = notification.object as? AVPlayerItem else {
return
}
playerItem.seek(to: CMTime.zero) { [weak self] (finished) in
self?.player?.play()
}
}
}
原文地址: https://www.cveoy.top/t/topic/oshC 著作权归作者所有。请勿转载和采集!