সুইফটে একটি ভিডিওর শেষ শনাক্ত করার জন্য আমাদের একটি ভিডিও প্লেয়ার তৈরি করতে হবে, তারপর ভিডিওটি কখন চালানো বন্ধ হয়ে যায় তা সনাক্ত করতে বিজ্ঞপ্তিগুলি ব্যবহার করুন৷ আমরা সুইফটে একটি উদাহরণের সাহায্যে এটি করব।
আসুন একটি প্রকল্প তৈরি করুন এবং এক্সটেনশন "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) }