तेजी से वीडियो के अंत का पता लगाने के लिए हमें एक वीडियो प्लेयर बनाना होगा, फिर नोटिफिकेशन का उपयोग करके यह पता लगाना होगा कि वीडियो कब चलना बंद हो गया है। हम इसे स्विफ्ट में एक उदाहरण की मदद से करेंगे।
आइए एक प्रोजेक्ट बनाएं और एक्सटेंशन "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) }