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 (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.
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.
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 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 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 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 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 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.
PiP qo'llab-quvvatlashi uchun Android manifestida
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.
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 versiyasi | PiP imkoniyatlari | API |
|---|---|---|
| 8.0–8.1 | MediaPlayer/MediaCodec uchun asosiy PiP | 26–27 |
| 9–11 | Nisbatlarni sozlash, shaxsiy harakatlar | 28–30 |
| 12 | PiP da SurfaceView/TextureView qo'llab-quvvatlashi | 31 |
| 13+ | Bloklangan ekranda PiP, yaxshilangan animatsiyalar | 33+ |
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.
API dagi so'nggi o'zgarishlarni hisobga olgan holda ikkala mobil platformada PiP ning amaliy amalga oshirilishini ko'rib chiqamiz.
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.
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.
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.
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 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
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.
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.
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.
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.
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
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.