ในการตรวจหาจุดสิ้นสุดของวิดีโออย่างรวดเร็ว เราจะต้องสร้างโปรแกรมเล่นวิดีโอ จากนั้นใช้การแจ้งเตือนเพื่อตรวจจับเมื่อวิดีโอหยุดเล่น เราจะทำสิ่งนี้ด้วยความช่วยเหลือจากตัวอย่างอย่างรวดเร็ว
มาสร้างโปรเจ็กต์แล้วลากและวางวิดีโอที่มีนามสกุล “mp4” เลือกคัดลอกทรัพยากรหากต้องการ และเพิ่มไปยังเป้าหมายของโปรเจ็กต์ของเรา
ตอนนี้ เราจะสร้างโปรแกรมเล่นวิดีโอโดยทางโปรแกรมก่อน จากนั้นจึงสร้าง URL ของวิดีโอในโครงการของเรา จากนั้นเราจะเล่นวิดีโอ
var videoPlayer: AVPlayer!
ตอนนี้ ใน viewDidAppear ให้เพิ่มโค้ดต่อไปนี้
override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) let filepath: String? = Bundle.main.path(forResource: "Introduction", ofType: "mp4") if let videoPath = filepath { let url = URL.init(fileURLWithPath: videoPath) videoPlayer = AVPlayer(url: url) let playerLayer = AVPlayerLayer(player: videoPlayer) playerLayer.frame = self.view.bounds self.view.layer.addSublayer(playerLayer) videoPlayer.play() } }
โค้ดด้านบนจะสร้างเครื่องเล่นวิดีโอ และเพิ่มเป็นเลเยอร์ย่อยในมุมมองเริ่มต้นของเราในตัวควบคุมการดู
ตอนนี้ เราต้องเพิ่มผู้สังเกตการณ์ในโปรแกรมเล่นของเรา และสร้างวิธีการสังเกตการณ์ที่ควรเรียกเมื่อตรวจพบจุดสิ้นสุดของวิดีโอ เพิ่มบล็อคโค้ดด้านล่างในเมธอด viewDidAppear
NotificationCenter.default.addObserver(self, selector: #selector(videoDidEnd), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)
ตอนนี้ เราต้องเขียนวิธี videoDidEnd ด้วย ภายในวิธีนี้ คุณสามารถดำเนินการใดๆ ที่คุณต้องการได้ สำหรับตอนนี้ เราจะพิมพ์ “วิดีโอสิ้นสุด” เมื่อวิดีโอสิ้นสุด และศูนย์การแจ้งเตือนเรียกวิธีนี้
@objc func videoDidEnd(notification: NSNotification) { print("video ended") }
เมื่อเรารันโค้ดนี้ เราจะได้ผลลัพธ์ดังต่อไปนี้
เมื่อวิดีโอหยุดเล่น เราก็จะได้รับเอาต์พุตในคอนโซลของเรา
ตอนนี้ โค้ดด้านบนทำหน้าที่ที่จำเป็นสำหรับเรา แต่สำหรับการใช้หน่วยความจำอย่างมีประสิทธิภาพ เราต้องลบผู้สังเกตการณ์ออกด้วย ซึ่งสามารถทำได้โดยใช้โค้ดด้านล่าง
deinit { NotificationCenter.default.removeObserver(self) }