Mobil ilovalarda Picture-in-Picture — bu nima, qanday ishlaydi va qayerda qo'llaniladi

Muallif: IT Sectr Nashr etilgan: 2026-05-25 O'qish vaqti: 9 daq

Picture-in-Picture (PiP) — bu boshqa ilovalar ustidagi suzuvchi oynada videoni ijro etish rejimi bo'lib, foydalanuvchiga ilovani kichiklashtirish yoki dasturlar o'rtasida almashishda kontentni tomosha qilishni davom ettirish imkonini beradi. PiP oynasi avtomatik ravishda ekranning burchagida joylashadi va foydalanuvchi tomonidan ko'chirilishi mumkin. Apple AVPictureInPictureController documentation (2026) ma'lumotlariga ko'ra, PiP rejimi iOS 14 dan boshlab va Android 8.0 dan boshlab qo'llab-quvvatlanadi.

Asosiy ma'lumotlar

  • Picture-in-Picture — ko'p vazifali tomosha qilish uchun boshqa ilovalar ustidagi suzuvchi video oynasi
  • iOS PiP iOS 14 dan AVPictureInPictureController va AVPlayer orqali mavjud
  • Android PiP Android 8.0 dan supportsPictureInPicture parametri bilan Activity-dagi PIP rejimi orqali mavjud
  • Cheklovlar: PiP oynasi qat'iy o'lchamga ega va interaktiv UI elementlarini qo'llab-quvvatlamaydi
  • Qo'llanish — videoqo'ng'iroqlar, striming, ta'lim platformalari, fonda video

Picture-in-Picture nima?

Picture-in-Picture (PiP) — bu barcha boshqa oyna va ilovalar ustida qoladigan kichik suzuvchi oynada videoni ko'rsatish rejimidir. Foydalanuvchi PiP oynasini ekran bo'ylab ko'chirishi, uning o'lchamini o'zgartirishi (ba'zi platformalarda) va boshqa ilovalarda ishlayotganda kontentni tomosha qilishni davom ettirishi mumkin.

PiP kontseptsiyasi televideniyadan kelib chiqqan: 1990-yillarda televizorlar ekranning burchagida ikkinchi kanalni ko'rsatishga imkon berardi. Mobil qurilmalarda PiP birinchi marta iPad-da iOS 9 (2015) da Safari uchun videoda paydo bo'ldi va ilovalar uchun to'liq tizim PiP iOS 14 (2020) da mavjud bo'ldi. Android-da PiP qo'llab-quvvatlashi avvalroq — 8.0 Oreo (2017) versiyasida paydo bo'ldi, lekin faqat video uchun, Android 12 dan boshlab esa barcha turdagi kontent uchun.

PiP fonda ijro etishdan farq qiladi, chunki video faqat audio oqimida ijro etilish o'rniga ekranda ko'rsatilishda davom etadi. Fonda ijro etish (background audio) ikkala platformada ham mavjud, ammo PiP foydalanuvchiga kontent ustidan vizual nazorat beradi: kadrlarni ko'radi, pauza qilishi, orqaga o'rashi yoki oynani yopishi mumkin. Bu vizual kontent audio kabi muhim bo'lgan video darslar, strimlar va videoqo'ng'iroqlar uchun ayniqsa muhimdir.

PiP qanday ishlaydi?

Arxitektura nuqtai nazaridan PiB tizim oyna boshqaruvchisi orqali amalga oshiriladi, u pastroq ko'rsatish ustuvorligiga ega alohida oyna yaratadi. Ilova video chiqishini ilova fonda rejimga o'tgan yoki kichiklashtirilganidan keyin ham videoni render qilishni davom ettiradigan tizim xizmatiga topshiradi.

PiP sessiyasining hayot aylanishi

Jarayon foydalanuvchi faol video bilan ilovani kichiklashtirganda yoki PiB tugmasini bosganda (iOS da) yoki tizim avtomatik ravishda Activity-ni PiB rejimiga o'tkazganda (Android da) boshlanadi. Tizim oyna boshqaruvchisi video oqimini egallab oladi va qat'iy nisbatlarda suzuvchi oyna yaratadi. Oyna o'lchami asl videoning tomonlar nisbati va platforma cheklovlariga bog'liq: iOS da PiB oynasi ekran kengligining taxminan 1/6–1/4 qismini, Android da esa mobil qurilmalar uchun kamida 108 dp kenglik va 240 dp balandlikni egallaydi.

PiP oynasi faol bo'lganda, ilova uchta holatdan birida bo'lishi mumkin: fonda (kichiklashtirilgan), faol holatda (foydalanuvchi ilovaga qaytdi) yoki kutish holatida (tizim resurslar etishmasligi sababli PiB-ni to'xtatdi). PiP ga o'tishda ilova keraksiz UI operatsiyalarini (animatsiyalar, interfeys renderi) to'xtatishi va xotirani bo'shatishi kerak, chunki ko'p vazifali rejimda tizim resurslari qattiqroq taqsimlanadi. iOS avtomatik ravishda ilovaga AVPictureInPictureControllerWillStartNotification xabarnomasini, Android esa onPictureInPictureModeChanged qayta chaqiruvini yuboradi.

PiP rejimining cheklovlari

PiP oynasi muhim cheklovlarga ega: unda standart UI boshqaruv elementlarini (pauza tugmasi, taraqqiyot siljitgichi) ko'rsatib bo'lmaydi — faqat asosiy elementlar bilan minimal tizim qoplamasi: play/pause, yopish, to'liq ekranga kengaytirish. iOS da PiP tizim UI pauza va yopish tugmasini o'z ichiga oladi, Android da esa xuddi shu elementlar va qo'shimcha sozlamalar tugmasi. PiP ichidagi kontent bilan o'zaro aloqa (orqaga o'rash, subtitrlarni tanlash) mumkin emas — buning uchun ilovani to'liq ekranda ochish kerak.

iOS da PiP: amalga oshirish va cheklovlar

iOS da PiP AVKit freymvorki va AVPictureInPictureController klassi orqali amalga oshirilgan. Bu API iOS 14+ da iPhone va iPad uchun mavjud, ammo turli talablar bilan: iPad da PiP AVPlayerLayer orqali, iPhone da esa faqat AVPlayerViewController orqali ishlaydi.

iOS da PiP uchun talablar

iOS da PiP ishlashi uchun bir necha shart bajarilishi kerak: ilova video ijro etish uchun AVPlayer dan foydalanishi, audio sessiyasi .playback yoki .playAndRecord kategoriyasiga sozlanishi va ilova fonda audio uchun ruxsatnomalarga (UIBackgroundModes = audio) ega bo'lishi kerak. Bu sozlamalarsiz PiB ishga tushmaydi — tizim fonda rejimga o'tgandan keyin to'g'ri ijro etishni kafolatlay olmagani uchun PiP sessiyasini yaratish so'rovini rad etadi.

iOS da PiP oynasi video faol ijro etilayotgan bo'lsa va foydalanuvchi bu funksiyani sozlamalarda o'chirmagan bo'lsa, ilova kichiklashtirilganda avtomatik ravishda ko'rsatiladi. Foydalanuvchi AVPlayerViewController dagi tugma orqali videoni qo'lda PiP ga kichiklashtirishi mumkin. iOS da PiP oynasining o'lchami qat'iy va tizim tomonidan belgilanadi — dasturchi uni o'zgartira olmaydi. PiP oynasining tomonlar nisbati asl videoning nisbatiga mos keladi, ammo maksimal o'lcham iPhone da ekran kengligining 1/4 va iPad da 1/3 qismi bilan cheklangan.

iOS PiP cheklovlari

iOS da PiP ning asosiy cheklovlari: PiP oynasida shaxsiy UI ning mumkin emasligi, bir vaqtning o'zida bitta PiP oqimi bilan cheklanish va PiP ishlashi uchun faol AVPlayer talabi. Multi-PiP — bir nechta PiP oynalarini bir vaqtda ijro etish — iOS da qo'llab-quvvatlanmaydi. Ikkinchi PiB ni ishga tushirishga urinishda birinchisi avtomatik yopiladi. Bu cheklov apparat darajasida: video protsessor DMA va video xotira cheklovlari tufayli bir vaqtning o'zida ikkita mustaqil PiP kanaliga xizmat ko'rsata olmaydi.

Yana bir muhim cheklov — fonda ijro etish davomiyligi. Agar foydalanuvchi PiP oynasi bilan o'zaro aloqada bo'lmasa, tizim energiyani tejash uchun bir muncha vaqt o'tgach ijroni to'xtatishi mumkin. iOS da PiP ning avtomatik pauzasi ilova background task orqali keep-alive mexanizmini amalga oshirmagan bo'lsa, 10–15 daqiqa harakatsizlikdan keyin yuz beradi. Videoqo'ng'iroqlar va strimlar uchun bu cheklovni chetlab o'tish uchun PushKit va VoIP sertifikatlaridan foydalanish tavsiya etiladi.

Android da PiP: amalga oshirish va cheklovlar

Android da PiP enterPictureInPictureMode metodi orqali faollashtiriladigan o'rnatilgan Activity rejimi sifatida amalga oshirilgan. Android 8.0 (API 26) dan boshlab har qanday Activity PiP rejimiga o'tishi mumkin, Android 12 (API 31) dan esa MediaCodec dan foydalanmasdan SurfaceView va TextureView uchun PiP qo'llab-quvvatlashi paydo bo'ldi.

Manifestni sozlash

PiP qo'llab-quvvatlashi uchun Android manifestida bo'limida Activity uchun android:supportsPictureInPicture atributini ko'rsatish kerak. Bu atributsiz tizim PiP ga o'tishga ruxsat bermaydi. Qo'shimcha ravishda PiP ga o'tishda oyna o'lchami o'zgarganda Activity qayta yaratilmasligi uchun android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation" qo'shish tavsiya etiladi. Asosiy PiP ishlashi uchun targetSdkVersion >= 26 (Android 8.0) bo'lishi kerak.

Android da PiP oynasi sukut bo'yicha boshqaruv elementlariga ega emas. Dasturchi setPictureInPictureParams metodida RemoteAction orqali shaxsiy harakatlar qo'shishi mumkin. 3 tagacha harakat mavjud (masalan: pauza/ijro etish, orqaga/oldinga o'rash, yopish). Har bir harakat PiP tizim qoplamasida belgi sifatida ko'rsatiladi. Barcha UI elementlari qat'iy belgilangan iOS dan farqli o'laroq, Android asosiy boshqaruv vositalari uchun ko'proq moslashuvchanlik beradi.

Turli versiyalarga moslashish

Android da PiP operatsion tizim versiyasiga qarab turli imkoniyatlarga ega. Android 8.0–8.1 da PiP faqat MediaPlayer yoki MediaCodec orqali SurfaceView bilan ijro etiladigan video uchun mavjud. Android 9 dan PiP oynasining tomonlar nisbatlarini sozlash uchun PictureInPictureArgs.Builder dan foydalanish mumkin. Android 12 shaxsiy SurfaceView va TextureView uchun PiP qo'llab-quvvatlashini, shuningdek to'liq ekran va PiP rejimi o'rtasidagi o'tishlarni yaxshilangan boshqarishni qo'shdi. Android 13+ ilova tegishli ruxsatga ega bo'lsa, PiP oynasini bloklangan ekranda ham ko'rsatishga imkon beradi.

Android versiyasiPiP imkoniyatlariAPI
8.0–8.1MediaPlayer/MediaCodec uchun asosiy PiP26–27
9–11Nisbatlarni sozlash, shaxsiy harakatlar28–30
12PiP da SurfaceView/TextureView qo'llab-quvvatlashi31
13+Bloklangan ekranda PiP, yaxshilangan animatsiyalar33+

Android PiP ning asosiy farqi iOS dan — multi-PiP imkoniyati. Android 12 dan tizim ilovalar qo'llab-quvvatlasa va qurilma unumdorligi imkon bersa, bir vaqtning o'zida bir nechta PiP oynasini ko'rsatishi mumkin. Biroq amalda multi-PiP SoC imkoniyatlari bilan cheklangan: aksariyat qurilmalar dekoderning apparat cheklovlari tufayli faqat bitta PiP oynasini qo'llab-quvvatlaydi, chunki har bir PiP oynasi o'z video oqimi va alohida dekodlash sessiyasini talab qiladi.

PiP kod namunalari

API dagi so'nggi o'zgarishlarni hisobga olgan holda ikkala mobil platformada PiP ning amaliy amalga oshirilishini ko'rib chiqamiz.

iOS da PiP AVPictureInPictureController bilan

swift
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 elementlarini yashir, xotirani bo'shat
    }
    
    func pictureInPictureControllerDidStop(
        _ pictureInPictureController: AVPictureInPictureController
    ) {
        // UI ni tikla, render qilishni davom ettir
    }
}

Namunada AVPictureInPictureController isPictureInPictureSupported tekshirilganidan so'ng playerLayer bilan ishga tushiriladi (PiP iPhone SE 1-avlod va xotirasi yetarli bo'lmagan ba'zi iPad larda qo'llab-quvvatlanmaydi). Delegat ilovani PiP ning boshlanishi va tugashi haqida xabardor qiladi — bu qayta chaqiruvlarda UI elementlarini yashirish va tiklash kerak, chunki PiP rejimida ilova interfeysi ko'rinmaydi. PiP ga o'tishda barcha animatsiyalarni to'xtatish, pleer boshqaruv vositalarini yashirish va foydalanilmayotgan xotirani bo'shatish tavsiya etiladi, bu tizim tomonidan ilovaning majburiy tushirilishining oldini oladi.

Android da PiP PictureInPictureParams bilan

kotlin
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 ni yashir, faqat mediaga e'tibor qarat
            binding.controlsGroup.visibility = View.GONE
        } else {
            // UI ni tikla
            binding.controlsGroup.visibility = View.VISIBLE
        }
    }
}

Kotlin namunasi PiP ni sozlash uchun PictureInPictureParams.Builder dan foydalanadi. setAspectRatio metodi PiP oynasining tomonlar nisbatini belgilaydi (odatiy video uchun 16:9). setAutoEnterEnabled(true) ilova kichiklashtirilganda PiP ga avtomatik o'tishni faollashtiradi. onPictureInPictureModeChanged qayta chaqiruvi PiP ga kirish va chiqishda chaqiriladi — unda UI elementlarini yashirish yoki ko'rsatish kerak. SurfaceView dagi video uchun PiP rejimiga o'tishda Activity ning qayta yaratilishining oldini olish uchun manifestda android:configChanges="screenSize|smallestScreenSize" qo'shib, konfiguratsiyani qo'shimcha boshqarish talab qilinadi.

Picture-in-Picture qachon ishlatiladi

PiP kontent boshqa vazifalarga o'tishda ham dolzarbligicha qoladigan ilovalarda foydalanuvchi tajribasini yaxshilash uchun kuchli vositadir. Biroq PiP ni joriy qilish asosli bo'lishi va foydalanuvchini chalg'itmasligi kerak.

Optimal stsenariylar

Videoqo'ng'iroqlar va konferensiyalar — PiP ning asosiy stsenariylaridan biri. Zoom, FaceTime, Google Meet da PiP boshqa ilovalarda ishlaganda (eslatmalarni o'qish, taqdimotni ko'rish yoki pochtani tekshirish) suhbatdoshni ko'rish imkonini beradi. Videoqo'ng'iroqlar uchun PiP fonda kamera qo'llab-quvvatlashi va fonda audio yozib olishni davom ettirish uchun audio sessiyasining to'g'ri sozlanishini talab qiladi. iOS da buning uchun AVPlayerLayer o'rniga AVSampleBufferDisplayLayer ishlatiladi, chunki videoqo'ng'iroqlar AVPlayer dan foydalanmaydi.

Striming xizmatlari (YouTube, Netflix, Twitch) yangi kontent qidirish vaqtida tomoshani davom ettirish uchun PiP dan faol foydalanadi. YouTube Premium PiP ni pullik funksiya sifatida taklif qiladi, Netflix ham litsenziya cheklovlari tufayli PiP ni ma'lum tarif rejalari bilan cheklaydi. Striming ilovasida PiP ni joriy qilish uchun PiP rejimida xavfsiz pipeline qo'llab-quvvatlaydigan DRM tizimi (FairPlay, Widevine) bilan integratsiya talab qilinadi.

PiP qachon kerak emas

PiP foydalanuvchi o'zaro aloqasi talab qilinadigan interaktiv video kontenti bo'lgan ilovalar uchun mos emas: pleer ichida testlari bo'lgan ta'lim platformalari, chat bilan o'yin strimlari, videoda mahsulot havolalari bo'lgan xarid ilovalari. Bu hollarda PiP oynasi qo'shimcha ma'lumotni ko'rsatish uchun juda kichik va PiP dagi interaktiv elementlar tizim tomonidan qo'llab-quvvatlanmaydi. PiP dan faqat passiv tomosha uchun foydalanish tavsiya etiladi, kontent bilan o'zaro aloqa talab qilinmaganda.

Musiqa va podkast ilovalari uchun PiP ortiqcha — vizual oynasiz fonda audio yetarli. PiP suzuvchi oynada videoni render qilish uchun qo'shimcha GPU resurslarini sarflaydi, bu batareyaning ishlash muddatini qisqartiradi. Agar kontent audial bo'lsa (musiqa, podkastlar, audio kitoblar) — PiP siz fonda ijro etishdan foydalaning. Vizual bo'lsa — foydalanuvchi tajribasini yaxshilash uchun PiP ni joriy qiling.

Tez-tez so'raladigan savollar

Nega PiP mening iPhone da ishlamaydi?

iOS da PiP iPhone 6s+, iOS 14+ va qo'llab-quvvatlanadigan mintaqa (AQSh, Kanada, Avstraliya, YeI, Rossiya va boshqalar) ni talab qiladi. Ilova uchun audio session ni .playback kategoriyasiga sozlash va UIBackgroundModes = audio qo'shish kerak. Shuningdek sozlamalarni tekshiring: Sozlamalar > Umumiy > Rasm ichida rasm.

PiP oynasining o'lchamini sozlash mumkinmi?

iOS da PiP oynasining o'lchami butunlay tizim tomonidan belgilanadi va dasturchi tomonidan sozlana olmaydi. Android da faqat tomonlar nisbatini setAspectRatio orqali PictureInPictureParams.Builder da belgilash mumkin, ammo aniq oyna o'lchamini tizim belgilaydi. Foydalanuvchi Android 12+ da PiP oynasining o'lchamini pinch-to-zoom imo-ishorasi bilan o'zgartirishi mumkin.

PiP DRM kontenti bilan ishlaydimi?

Ha, PiP DRM bilan himoyalangan kontent bilan (iOS da FairPlay, Android da Widevine L1) ishlaydi, agar DRM sessiyasi PiP rejimida xavfsiz pipeline qo'llab-quvvatlasa. Widevine L3 PiP ni qo'llab-quvvatlamasligi mumkin, chunki suzuvchi oynada dekodlangan kontentning xavfsizligini kafolatlamaydi. DRM ning PiP bilan mosligini test bosqichida tekshiring.

Bir vaqtning o'zida nechta PiP oynasini ochish mumkin?

iOS da — faqat bitta PiP oynasi. Android 12+ da nazariy jihatdan multi-PiP qo'llab-quvvatlanadi, ammo amalda aksariyat qurilmalar apparat cheklovlari tufayli bitta oyna bilan cheklangan. Yuqori darajadagi qurilmalar (Samsung Galaxy S24, Pixel 8) 2 PiP oynasini qo'llab-quvvatlashi mumkin, ammo past unumdorlik bilan.

PiP da lifecycle ni boshqarish kerakmi?

Ha, lifecycle ni boshqarish juda muhim. iOS da PiP ga o'tishda ilova willStart xabarnomasini oladi, unda UI ni yashirish va xotirani bo'shatish kerak. Android da onPictureInPictureModeChanged PiP ga kirish/chiqishda chaqiriladi. Noto'g'ri lifecycle boshqaruvi tizim ilovani xotiradan tushirib, ijroni to'xtatishi mumkin.

Xulosa

  • Picture-in-Picture — ko'p vazifali rejimda boshqa ilovalar ustidagi videoni tomosha qilish uchun suzuvchi oyna
  • iOS da PiP AVPictureInPictureController bilan AVPlayerLayer va audio session .playback orqali amalga oshiriladi
  • Android da PiP enterPictureInPictureMode bilan PictureInPictureParams.Builder orqali amalga oshiriladi
  • Cheklovlar: bitta PiP oqimi, qat'iy oyna o'lchami, PiP ichida shaxsiy UI yo'qligi
  • Lifecycle PiP da UI elementlarini yashirish va tushirilishning oldini olish uchun xotirani bo'shatishni talab qiladi
  • Asosiy stsenariylar — videoqo'ng'iroqlar, striming, ta'lim videolari, navigatsiya vaqtida kontent tomoshasi
  • PiP dan foydalanmang audio kontent uchun (fonda audio yetarli) yoki UI elementlari bo'lgan interaktiv videolar uchun

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing