AVPlayer वीडियो समाप्ति का पता लगाना
Swift में वीडियो के अंत का पता लगाने के लिए हमें एक वीडियो प्लेयर बनाना होगा, फिर नोटिफिकेशन का उपयोग करके पता लगाना होगा कि वीडियो कब चलना बंद होता है। हम इसे Swift में एक उदाहरण की मदद से करेंगे।
सेटअप:
- एक प्रोजेक्ट बनाएं और एक्सटेंशन "mp4" के साथ कोई भी वीडियो ड्रैग और ड्रॉप करें, यदि आवश्यक हो तो कॉपी रिसोर्स चुनें और अपने प्रोजेक्ट के टारगेट में जोड़ें।
- अब हम प्रोग्रामेटिकली पहले एक वीडियो प्लेयर बनाएंगे, फिर हमारे प्रोजेक्ट में वीडियो का URL बनाएंगे, और फिर वीडियो चलाएंगे।
var videoPlayer: AVPlayer!
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 मेथड भी लिखना होगा, इस मेथड के अंदर आप कोई भी एक्शन कर सकते हैं, अभी के लिए, हम सिर्फ "video ended" प्रिंट करेंगे जब वीडियो समाप्त होता है और नोटिफिकेशन सेंटर इस मेथड को कॉल करता है।
@objc func videoDidEnd(notification: NSNotification) {
print("video ended")
}
जब हम यह कोड चलाते हैं तो हमें निम्नलिखित परिणाम मिलता है:

एक बार वीडियो चलना बंद हो जाने पर हमें अपने कंसोल में आउटपुट मिलता है:

अब, उपरोक्त कोड हमारे लिए आवश्यक काम करता है, लेकिन कुशल मेमोरी उपयोग के लिए, हमें ऑब्जर्वर को भी हटाने की आवश्यकता है, जिसे नीचे दिए गए कोड का उपयोग करके किया जा सकता है।
deinit {
NotificationCenter.default.removeObserver(self)
}