Picture-in-Picture (PiP) एक वीडियो प्लेबैक मोड है जो अन्य ऐप्लिकेशन के ऊपर फ़्लोटिंग विंडो में वीडियो दिखाता है, जिससे उपयोगकर्ता ऐप को छोटा करने या प्रोग्राम के बीच स्विच करने पर भी देखना जारी रख सकता है। PiP विंडो स्वचालित रूप से स्क्रीन के कोने में स्थित होती है और उपयोगकर्ता इसे स्थानांतरित कर सकता है। Apple AVPictureInPictureController दस्तावेज़ (2026) के अनुसार, PiP मोड iOS संस्करण 14 और Android संस्करण 8.0 से समर्थित है।
मुख्य बातें
Picture-in-Picture (PiP) एक वीडियो प्रदर्शन मोड है जो एक छोटी फ़्लोटिंग विंडो में सामग्री दिखाता है जो अन्य सभी विंडो और ऐप्लिकेशन के ऊपर रहती है। उपयोगकर्ता PiP विंडो को स्क्रीन पर घुमा सकता है, उसका आकार बदल सकता है (कुछ प्लेटफ़ॉर्म पर) और अन्य ऐप्लिकेशन में काम करते हुए सामग्री देखना जारी रख सकता है।
PiP की अवधारणा टेलीविज़न से आई है: 1990 के दशक में ही टीवी सेट स्क्रीन के कोने में दूसरा चैनल दिखाने की अनुमति देते थे। मोबाइल उपकरणों पर, PiP पहली बार iPad पर iOS 9 (2015) में Safari वीडियो के लिए दिखाई दिया, जबकि ऐप्स के लिए पूर्ण सिस्टम PiP iOS 14 (2020) में उपलब्ध हुआ। Android पर PiP का समर्थन पहले आया — संस्करण 8.0 Oreo (2017) में, लेकिन केवल वीडियो के लिए, और Android 12 से सभी प्रकार की सामग्री के लिए।
PiP पृष्ठभूमि प्लेबैक से भिन्न है क्योंकि वीडियो स्क्रीन पर प्रदर्शित होता रहता है, न कि केवल ऑडियो स्ट्रीम में चलता रहता है। पृष्ठभूमि ऑडियो प्लेबैक दोनों प्लेटफ़ॉर्म पर उपलब्ध है, लेकिन PiP उपयोगकर्ता को सामग्री पर दृश्य नियंत्रण देता है: वह फ़्रेम देख सकता है, रोक सकता है, रिवाइंड कर सकता है या विंडो बंद कर सकता है। यह विशेष रूप से वीडियो ट्यूटोरियल, स्ट्रीम और वीडियो कॉल के लिए महत्वपूर्ण है जहाँ दृश्य सामग्री ऑडियो जितनी ही महत्वपूर्ण है।
आर्किटेक्चरल रूप से, PiP एक सिस्टम विंडो मैनेजर के माध्यम से कार्यान्वित किया जाता है जो कम प्रदर्शन प्राथमिकता वाली एक अलग विंडो बनाता है। ऐप एक सिस्टम सेवा को वीडियो आउटपुट सौंपता है जो ऐप के पृष्ठभूमि में जाने या छोटा होने के बाद भी वीडियो रेंडर करना जारी रखता है।
प्रक्रिया तब शुरू होती है जब उपयोगकर्ता सक्रिय वीडियो वाले ऐप को छोटा करता है या PiP बटन दबाता है (iOS पर), या सिस्टम स्वचालित रूप से Activity को PiP मोड में स्थानांतरित करता है (Android पर)। सिस्टम विंडो मैनेजर वीडियो स्ट्रीम को कैप्चर करता है और निश्चित अनुपात के साथ एक फ़्लोटिंग विंडो बनाता है। विंडो का आकार मूल वीडियो के पहलू अनुपात और प्लेटफ़ॉर्म की सीमाओं पर निर्भर करता है: iOS पर, PiP विंडो स्क्रीन की चौड़ाई का लगभग 1/6–1/4 भाग घेरती है; Android पर, मोबाइल उपकरणों के लिए चौड़ाई में 108 dp और ऊँचाई में 240 dp से कम नहीं।
जब PiP विंडो सक्रिय होती है, तो ऐप तीन अवस्थाओं में से एक में हो सकता है: पृष्ठभूमि में (छोटा किया गया), सक्रिय अवस्था में (उपयोगकर्ता ऐप पर लौट आया), या प्रतीक्षा अवस्था में (सिस्टम ने संसाधनों की कमी के कारण PiP रोक दिया)। PiP में संक्रमण करते समय, ऐप को अनावश्यक UI संचालन (एनिमेशन, इंटरफ़ेस रेंडरिंग) रोकना चाहिए और मेमोरी मुक्त करनी चाहिए, क्योंकि मल्टीटास्किंग मोड में सिस्टम संसाधन अधिक कड़ाई से आवंटित होते हैं। iOS स्वचालित रूप से ऐप को AVPictureInPictureControllerWillStartNotification भेजता है, जबकि Android onPictureInPictureModeChanged कॉलबैक भेजता है।
PiP विंडो की महत्वपूर्ण सीमाएँ हैं: यह मानक UI नियंत्रण तत्व (रोक बटन, प्रगति पट्टी) प्रदर्शित नहीं कर सकती — केवल न्यूनतम सिस्टम ओवरले जिसमें मूल नियंत्रण होते हैं: प्ले/रोकें, बंद करें, पूर्ण स्क्रीन पर विस्तारित करें। सिस्टम PiP UI में iOS पर रोकें और बंद करें बटन शामिल हैं, जबकि Android पर समान तत्व और एक अतिरिक्त सेटिंग बटन शामिल है। PiP के अंदर सामग्री के साथ बातचीत (रिवाइंड, उपशीर्षक चयन) संभव नहीं है — इसके लिए ऐप को पूर्ण स्क्रीन पर विस्तारित करना होगा।
iOS पर, PiP AVKit फ्रेमवर्क और AVPictureInPictureController वर्ग के माध्यम से कार्यान्वित किया जाता है। यह API iPhone और iPad के लिए iOS 14+ पर उपलब्ध है, लेकिन अलग-अलग आवश्यकताओं के साथ: iPad पर, PiP AVPlayerLayer के माध्यम से काम करता है; iPhone पर, केवल AVPlayerViewController के माध्यम से।
iOS पर PiP काम करने के लिए कई शर्तों को पूरा करना होगा: ऐप को वीडियो प्लेबैक के लिए AVPlayer का उपयोग करना चाहिए, ऑडियो सत्र को .playback या .playAndRecord श्रेणी में सेट होना चाहिए, और ऐप के पास पृष्ठभूमि ऑडियो के लिए एंटाइटलमेंट (UIBackgroundModes = audio) होना चाहिए। इन सेटिंग्स के बिना, PiP शुरू नहीं होगा — सिस्टम PiP सत्र अनुरोध को अस्वीकार कर देगा क्योंकि वह पृष्ठभूमि में जाने के बाद सही प्लेबैक की गारंटी नहीं दे सकता।
iOS पर, PiP विंडो स्वचालित रूप से ऐप को छोटा करने पर दिखाई देती है यदि वीडियो सक्रिय रूप से चल रहा है और उपयोगकर्ता ने सेटिंग्स में इस सुविधा को अक्षम नहीं किया है। उपयोगकर्ता AVPlayerViewController में बटन के माध्यम से मैन्युअल रूप से वीडियो को PiP में छोटा कर सकता है। iOS पर PiP विंडो का आकार निश्चित है और सिस्टम द्वारा निर्धारित होता है — डेवलपर इसे बदल नहीं सकता। PiP विंडो का पहलू अनुपात मूल वीडियो के अनुपात से मेल खाता है, लेकिन अधिकतम आकार iPhone पर स्क्रीन चौड़ाई के 1/4 और iPad पर 1/3 तक सीमित है।
iOS पर PiP की मुख्य सीमाएँ: PiP विंडो में कस्टम UI की असंभावना, एक समय में एक PiP स्ट्रीम, और PiP काम करने के लिए सक्रिय AVPlayer की आवश्यकता। Multi-PiP — एक साथ कई PiP विंडो का प्लेबैक — iOS पर समर्थित नहीं है। दूसरा PiP शुरू करने का प्रयास करने पर पहला स्वचालित रूप से बंद हो जाता है। यह एक हार्डवेयर सीमा है: वीडियो प्रोसेसर DMA और वीडियो मेमोरी सीमाओं के कारण एक साथ दो स्वतंत्र PiP चैनलों को सेवा नहीं दे सकता।
एक और महत्वपूर्ण सीमा पृष्ठभूमि प्लेबैक की अवधि है। यदि उपयोगकर्ता PiP विंडो के साथ बातचीत नहीं करता है, तो सिस्टम ऊर्जा बचाने के लिए कुछ समय बाद प्लेबैक रोक सकता है। iOS पर स्वचालित PiP रोक 10–15 मिनट की निष्क्रियता के बाद होती है यदि ऐप ने पृष्ठभूमि कार्य के माध्यम से keep-alive तंत्र लागू नहीं किया है। वीडियो कॉल और स्ट्रीम के लिए, PushKit और VoIP प्रमाणपत्रों का उपयोग करने की अनुशंसा की जाती है, जो इस सीमा को दरकिनार करते हैं।
Android पर, PiP एक अंतर्निहित Activity मोड के रूप में कार्यान्वित किया जाता है जो enterPictureInPictureMode विधि के माध्यम से सक्रिय होता है। Android 8.0 (API 26) से, कोई भी Activity PiP मोड में प्रवेश कर सकती है, और Android 12 (API 31) से MediaCodec के उपयोग के बिना SurfaceView और TextureView के लिए PiP समर्थन उपलब्ध है।
Android मेनिफ़ेस्ट में PiP समर्थन के लिए,
Android में, PiP विंडो में डिफ़ॉल्ट रूप से कोई नियंत्रण तत्व नहीं होते। डेवलपर setPictureInPictureParams विधि में RemoteAction के माध्यम से कस्टम क्रियाएँ जोड़ सकता है। 3 क्रियाएँ उपलब्ध हैं (उदाहरण: रोकें/चलाएँ, पीछे/आगे घुमाएँ, बंद करें)। प्रत्येक क्रिया सिस्टम PiP ओवरले में एक आइकन के रूप में दिखाई देती है। iOS के विपरीत, जहाँ सभी UI तत्व सख्ती से निश्चित हैं, Android बुनियादी नियंत्रणों के लिए अधिक लचीलापन प्रदान करता है।
Android पर PiP की ओएस संस्करण के आधार पर अलग-अलग क्षमताएँ हैं। Android 8.0–8.1 पर, PiP केवल MediaPlayer या MediaCodec के साथ SurfaceView के माध्यम से चलाए जाने वाले वीडियो के लिए उपलब्ध है। Android 9 से PictureInPictureArgs.Builder का उपयोग PiP विंडो के पहलू अनुपात को कॉन्फ़िगर करने के लिए किया जा सकता है। Android 12 ने कस्टम SurfaceView और TextureView के लिए PiP समर्थन जोड़ा, साथ ही पूर्ण स्क्रीन और PiP मोड के बीच बेहतर संक्रमण। Android 13+ स्क्रीन लॉक होने पर भी PiP विंडो प्रदर्शित करने की अनुमति देता है, यदि ऐप के पास उपयुक्त अनुमति हो।
| Android संस्करण | PiP क्षमताएँ | API |
|---|---|---|
| 8.0–8.1 | MediaPlayer/MediaCodec के लिए बुनियादी PiP | 26–27 |
| 9–11 | पहलू अनुपात कॉन्फ़िगरेशन, कस्टम क्रियाएँ | 28–30 |
| 12 | SurfaceView/TextureView PiP समर्थन | 31 |
| 13+ | लॉक स्क्रीन पर PiP, बेहतर एनिमेशन | 33+ |
Android PiP का मुख्य अंतर iOS से multi-PiP क्षमता है। Android 12+ पर, सिस्टम एक साथ कई PiP विंडो प्रदर्शित कर सकता है यदि ऐप्स इसे समर्थन करते हैं और डिवाइस का प्रदर्शन अनुमति देता है। हालाँकि, व्यवहार में, multi-PiP SoC क्षमताओं द्वारा सीमित है: अधिकांश उपकरण हार्डवेयर डिकोडर सीमाओं के कारण केवल एक PiP विंडो का समर्थन करते हैं, क्योंकि प्रत्येक PiP विंडो को अपनी स्वयं की वीडियो स्ट्रीम और एक अलग डिकोडिंग सत्र की आवश्यकता होती है।
नवीनतम API परिवर्तनों को ध्यान में रखते हुए, दोनों मोबाइल प्लेटफ़ॉर्म पर PiP के व्यावहारिक कार्यान्वयन पर नज़र डालें।
import AVKit
import AVFoundation
class VideoPlayerViewController: UIViewController {
var player: AVPlayer!
var pipController: AVPictureInPictureController?
override func viewDidLoad() {
super.viewDidLoad()
let playerLayer = AVPlayerLayer(player: player)
playerLayer.videoGravity = .resizeAspect
view.layer.addSublayer(playerLayer)
guard AVPictureInPictureController.isPictureInPictureSupported()
else { return }
pipController = AVPictureInPictureController(playerLayer: playerLayer)
pipController?.delegate = self
}
@IBAction func startPiPTapped() {
pipController?.startPictureInPicture()
}
}
extension VideoPlayerViewController: AVPictureInPictureControllerDelegate {
func pictureInPictureControllerWillStart(
_ pictureInPictureController: AVPictureInPictureController
) {
// UI तत्वों को छिपाएँ, मेमोरी मुक्त करें
}
func pictureInPictureControllerDidStop(
_ pictureInPictureController: AVPictureInPictureController
) {
// UI पुनर्स्थापित करें, रेंडरिंग फिर से शुरू करें
}
}
इस उदाहरण में, AVPictureInPictureController को isPictureInPictureSupported की जाँच के बाद playerLayer के साथ आरंभ किया जाता है (PiP iPhone SE पहली पीढ़ी और पर्याप्त मेमोरी के बिना कुछ iPad पर समर्थित नहीं है)। डेलीगेट ऐप को PiP शुरू और समाप्त होने के बारे में सूचित करता है — इन कॉलबैक में UI तत्वों को छिपाना और पुनर्स्थापित करना चाहिए, क्योंकि PiP मोड में ऐप इंटरफ़ेस दिखाई नहीं देता। PiP में संक्रमण करते समय, सभी एनिमेशन रोकने, प्लेयर नियंत्रण छिपाने और अप्रयुक्त मेमोरी मुक्त करने की अनुशंसा की जाती है ताकि सिस्टम द्वारा ऐप को जबरन अनलोड होने से रोका जा सके।
class PipVideoActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setupVideoPlayer()
}
private fun enterPipMode() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val aspectRatio = Rational(16, 9)
val pipParams = PictureInPictureParams.Builder()
.setAspectRatio(aspectRatio)
.setAutoEnterEnabled(true)
.build()
enterPictureInPictureMode(pipParams)
}
}
override fun onPictureInPictureModeChanged(
isInPictureInPictureMode: Boolean,
newConfig: Configuration
) {
if (isInPictureInPictureMode) {
// UI छिपाएँ, केवल मीडिया पर ध्यान केंद्रित करें
binding.controlsGroup.visibility = View.GONE
} else {
// UI पुनर्स्थापित करें
binding.controlsGroup.visibility = View.VISIBLE
}
}
}
Kotlin में उदाहरण PiP कॉन्फ़िगर करने के लिए PictureInPictureParams.Builder का उपयोग करता है। setAspectRatio विधि PiP विंडो का पहलू अनुपात सेट करती है (सामान्य वीडियो के लिए 16:9)। setAutoEnterEnabled(true) ऐप को छोटा करने पर स्वचालित PiP संक्रमण सक्षम करती है। onPictureInPictureModeChanged कॉलबैक PiP में प्रवेश करने और छोड़ने पर कहा जाता है — इसमें UI तत्वों को छिपाना या दिखाना चाहिए। SurfaceView पर वीडियो के लिए, मेनिफ़ेस्ट में android:configChanges="screenSize|smallestScreenSize" जोड़कर अतिरिक्त कॉन्फ़िगरेशन हैंडलिंग की आवश्यकता होती है ताकि PiP मोड में संक्रमण के दौरान Activity पुनर्निर्माण को रोका जा सके।
PiP उन ऐप्स में उपयोगकर्ता अनुभव को बेहतर बनाने के लिए एक शक्तिशाली उपकरण है जहाँ सामग्री अन्य कार्यों पर स्विच करने पर भी प्रासंगिक बनी रहती है। हालाँकि, PiP का कार्यान्वयन उचित होना चाहिए और उपयोगकर्ता को विचलित नहीं करना चाहिए।
वीडियो कॉल और कॉन्फ़्रेंस PiP के मुख्य परिदृश्यों में से एक हैं। Zoom, FaceTime, Google Meet में, PiP उपयोगकर्ता को अन्य ऐप्स में काम करते हुए वार्ताकार को देखने की अनुमति देता है: नोट्स पढ़ना, प्रस्तुति देखना या ईमेल जाँचना। वीडियो कॉल के लिए PiP में पृष्ठभूमि में कैमरा समर्थन और पृष्ठभूमि में ऑडियो कैप्चर जारी रखने के लिए ऑडियो सत्र का सही कॉन्फ़िगरेशन आवश्यक है। iOS पर, यह AVPlayerLayer के बजाय AVSampleBufferDisplayLayer का उपयोग करके किया जाता है, क्योंकि वीडियो कॉल AVPlayer का उपयोग नहीं करती हैं।
स्ट्रीमिंग सेवाएँ (YouTube, Netflix, Twitch) नई सामग्री खोजते समय निरंतर देखने के लिए PiP का सक्रिय रूप से उपयोग करती हैं। YouTube Premium PiP को भुगतान सुविधा के रूप में प्रदान करता है, Netflix भी सामग्री लाइसेंसिंग प्रतिबंधों के कारण PiP को कुछ सदस्यता योजनाओं तक सीमित करता है। स्ट्रीमिंग ऐप में PiP लागू करने के लिए DRM सिस्टम (FairPlay, Widevine) के साथ एकीकरण की आवश्यकता होती है जो PiP मोड में सुरक्षित पाइपलाइन का समर्थन करता है।
PiP इंटरैक्टिव वीडियो सामग्री वाले ऐप्स के लिए उपयुक्त नहीं है जहाँ उपयोगकर्ता इंटरैक्शन की आवश्यकता होती है: प्लेयर के अंदर परीक्षण वाले शैक्षिक प्लेटफ़ॉर्म, चैट वाले गेम स्ट्रीम, वीडियो में उत्पाद लिंक वाले शॉपिंग ऐप्स। इन मामलों में, PiP विंडो अतिरिक्त जानकारी प्रदर्शित करने के लिए बहुत छोटी है, और इंटरैक्टिव तत्व PiP के अंदर समर्थित नहीं हैं। अनुशंसा की जाती है कि PiP का उपयोग केवल निष्क्रिय देखने के लिए करें जब सामग्री के साथ बातचीत की आवश्यकता न हो।
संगीत और पॉडकास्ट ऐप्स के लिए, PiP अत्यधिक है — दृश्य विंडो के बिना पृष्ठभूमि ऑडियो पर्याप्त है। PiP फ़्लोटिंग विंडो में वीडियो रेंडर करने के लिए अतिरिक्त GPU संसाधनों का उपभोग करता है, जिससे बैटरी जीवन कम हो जाता है। यदि सामग्री ऑडियो-आधारित है (संगीत, पॉडकास्ट, ऑडियोबुक) — PiP के बिना पृष्ठभूमि प्लेबैक का उपयोग करें। यदि दृश्य है — उपयोगकर्ता अनुभव बेहतर बनाने के लिए PiP लागू करें।
अक्सर पूछे जाने वाले प्रश्न
iOS पर PiP के लिए iPhone 6s+, iOS 14+ और समर्थित क्षेत्र (अमेरिका, कनाडा, ऑस्ट्रेलिया, यूरोपीय संघ, रूस और अन्य) आवश्यक है। ऐप को ऑडियो सत्र को .playback श्रेणी में कॉन्फ़िगर करना होगा और UIBackgroundModes = audio जोड़ना होगा। सेटिंग्स भी जाँचें: सेटिंग्स > सामान्य > पिक्चर इन पिक्चर।
iOS पर, PiP विंडो का आकार पूरी तरह से सिस्टम द्वारा निर्धारित होता है और डेवलपर द्वारा कॉन्फ़िगर नहीं किया जा सकता। Android पर, केवल पहलू अनुपात setAspectRatio के माध्यम से PictureInPictureParams.Builder में सेट किया जा सकता है, लेकिन सटीक विंडो आकार सिस्टम निर्धारित करता है। उपयोगकर्ता Android 12+ पर पिंच-टू-ज़ूम जेस्चर से PiP विंडो का आकार बदल सकता है।
हाँ, PiP DRM-संरक्षित सामग्री (iOS पर FairPlay, Android पर Widevine L1) के साथ काम करता है बशर्ते DRM सत्र PiP मोड में सुरक्षित पाइपलाइन का समर्थन करता हो। Widevine L3 PiP का समर्थन नहीं कर सकता, क्योंकि यह फ़्लोटिंग विंडो में डिकोड की गई सामग्री की सुरक्षा की गारंटी नहीं देता। परीक्षण चरण के दौरान PiP के साथ DRM संगतता जाँचें।
iOS पर — केवल एक PiP विंडो। Android 12+ पर, सैद्धांतिक रूप से multi-PiP समर्थित है, लेकिन व्यवहार में अधिकांश उपकरण हार्डवेयर सीमाओं के कारण एक विंडो तक सीमित हैं। शीर्ष उपकरण (Samsung Galaxy S24, Pixel 8) 2 PiP विंडो का समर्थन कर सकते हैं, लेकिन कम प्रदर्शन के साथ।
हाँ, जीवनचक्र प्रबंधन अत्यंत महत्वपूर्ण है। iOS पर, PiP में संक्रमण करते समय, ऐप को willStart सूचना मिलती है जहाँ UI छिपाना और मेमोरी मुक्त करनी चाहिए। Android पर, PiP में प्रवेश/निकास पर onPictureInPictureModeChanged कहा जाता है। सही जीवनचक्र प्रबंधन के बिना, सिस्टम ऐप को मेमोरी से अनलोड कर सकता है, जिससे प्लेबैक बाधित हो सकता है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें