Share this
How to enable out of app picture-in-picture on iOS and Android
by Raffi Manissalian, Hovig Jilinkerian & Alexander Vanspauwen on March 29, 2022
Picture-in-picture
Meet Picture-in-picture (PiP), the feature that allows you to continue watching a video while interacting with others sites or applications. The PiP video floats on top of another window and can be moved around the screen. Depending on the available platform controls you can pause and play the floating video, and seek forward and backwards.
Our client Magycal was one of the first to implement the PiP feature, enabling their users to enjoy their videos while doing other stuff on their smartphone. Look how nice it is:
This feature is also supported by our THEOplayer on all platforms from Android, Android TV, iOS, iPADOS and Apple TV. So let's get started!
Android
Google initially announced the support of Picture-in-picture (PiP) starting Android 7.0/Nougat (API level 24), which was released in 2016, on Android TVs only. With the release of Android 8.0/Oreo (API level 26) the support was added to mobile devices as well. The PiP functionality leverages the multi-window APIs which allows users to run two apps side-by-side or one-above-the-other in split screen mode.
The straightforward requirements to implement PiP helped users of the THEOplayer to implement the feature without relying on our pre-integration for a long time. But with the release 2021.2.1 (Android 2.85.1) we added the support for PiP through our APIs, and it's available for both mobile and Android TV devices for Android 8.0 and later.
To make use of the PiP feature, our users have to simply add the PiP configuration as part of the player’s configuration when initializing it like this:
THEOplayerConfig playerConfig = new THEOplayerConfig.Builder().pipConfiguration(new PipConfiguration.Builder().build()).build();
THEOplayerView tpv = new THEOplayerView(context, playerConfig);
When the player is in PiP mode, you'll see the UI from Picture 1 with these controls:
- - Go to the PiP settings of the app.
- - Close the PiP window.
- - Go back to the previous presentation mode.
- - Play/pause the video.
Picture 1: an android video player in PiP mode with the available controls
During the development we aimed to keep supporting all our pre-integration such as Ads, Analytics and DRM for both inline playback and PiP. And we successfully achieved it! Now you can benefit from all the features we provide and enjoy a great experience on Android. More info can be found in our guide and feel free to contact us if you'd like to get started with picture-in-picture yourself.
iOS
Since the early versions of our iOS SDK we offered the Picture-in-Picture (aka PiP) functionality. To support this, we created our own frame that would hold the player and it would float on top of the application. The limitation of this approach was that it was only available "in-app", which meant that when the application went to the background, the PiP-window would do so too. On the positive side, this implementation provided the option to configure in which corner of your screen the PiP-window would initially appear.
As from THEOplayer v2.85.2, we added a new variant of PiP for newer iOS and tvOS devices. This uses the native PiP capabilities of the OS itself. This variant can put the player into PiP-mode outside of the application ("out-of-app"). So you can keep watching your video while navigating to another app. Note that this functionality only works for iOS 14 and above.
To configure the iOS SDK to have the PiP functionality you need to pass a PiPConfiguration object in the PlayerConfiguration, similar to Android. When you set the nativePictureInPicture parameter to 'true', it will enable the native "out-of-app" variant mentioned above, and it can be implemented as such:
let pip = PiPConfiguration(retainPresentationModeOnSourceChange: true, nativePictureInPicture: true)
let config = THEOplayerConfiguration(..., pip: pip, ...)
self.theoplayer = THEOplayer(configuration: config)
As for tvOS, the feature will be available as long as the tvOS version supports it, but only the new native PiP variant is available. Also there is no option to customize the UI, as we are only able to put the AVplayer into PiP-mode. This means that it uses the native controls, and only SSAI is supported. But we can assure DRM-protected content plays fine in PiP-mode.
These are the available controls in iOS, as shown in picture 2:
- Close the PIP window- Switch back to the previous presentation Mode
- Seek 15 sec backward / forward
- Toggle Play / Pause
Picture 2: an IOS video player in PiP mode
And these are the available controls in tvOS, as illustrated in picture 3:
- Close the PiP window
- Switch back to the previous presentation mode
- Change the PiP window position (corner): top-right, top-left, etc.
Picture 3: a tvOS video player in PiP mode
More info can be found in our documentation and feel free to contact us if you'd like to get started with PiP yourself.
Observe events
It’s also possible to listen for particular events when using PiP, these are for example if the PiP-mode was entered/exited or when the window has been moved. You can read all about this and how to hook-into or handle them, in our documentation.
Let's implement PiP together!
Share this
- THEOplayer (46)
- online streaming (40)
- live streaming (35)
- low latency (32)
- video streaming (32)
- HESP (24)
- HLS (21)
- new features (21)
- THEO Technologies (20)
- SDK (19)
- THEOlive (17)
- best video player (17)
- cross-platform (16)
- html5 player (16)
- LL-HLS (15)
- online video (15)
- SmartTV (12)
- delivering content (12)
- MPEG-DASH (11)
- Tizen (11)
- latency (11)
- partnership (11)
- Samsung (10)
- awards (10)
- content monetisation (10)
- innovation (10)
- Big Screen (9)
- CDN (9)
- High Efficiency Streaming Protocol (9)
- fast zapping (9)
- video codec (9)
- SSAI (8)
- Ultra Low Latency (8)
- WebOS (8)
- advertising (8)
- viewers expercience (8)
- "content delivery" (7)
- Adobe flash (7)
- LG (7)
- Online Advertising (7)
- Streaming Media Readers' Choice Awards (7)
- html5 (7)
- low bandwidth (7)
- Apple (6)
- CMAF (6)
- Efficiency (6)
- Events (6)
- drm (6)
- interactive video (6)
- sports streaming (6)
- video content (6)
- viewer experience (6)
- ABR (5)
- Bandwidth Usage (5)
- Deloitte (5)
- HTTP (5)
- ad revenue (5)
- adaptive bitrate (5)
- nomination (5)
- reduce buffering (5)
- release (5)
- roku (5)
- sports betting (5)
- video monetization (5)
- AV1 (4)
- DVR (4)
- Encoding (4)
- THEO Technologies Partner Success Team (4)
- Update (4)
- case study (4)
- client-side ad insertion (4)
- content encryption (4)
- content protection (4)
- fast 50 (4)
- google (4)
- monetization (4)
- nab show (4)
- streaming media west (4)
- support matrix (4)
- AES-128 (3)
- Chrome (3)
- Cost Efficient (3)
- H.265 (3)
- HESP Alliance (3)
- HEVC (3)
- IBC (3)
- IBC trade show (3)
- React Native SDK (3)
- THEOplayer Partner Success Team (3)
- VMAP (3)
- VOD (3)
- Year Award (3)
- content integration (3)
- customer case (3)
- customise feature (3)
- dynamic ad insertion (3)
- scalable (3)
- server-side ad insertion (3)
- video (3)
- video trends (3)
- webRTC (3)
- "network api" (2)
- Amino Technologies (2)
- Android TV (2)
- CSI Awards (2)
- Encryption (2)
- FireTV (2)
- H.264 (2)
- LHLS (2)
- LL-DASH (2)
- MPEG (2)
- Microsoft Silverlight (2)
- NAB (2)
- OMID (2)
- Press Release (2)
- React Native (2)
- Start-Up Times (2)
- UI (2)
- VAST (2)
- VP9 (2)
- VPAID (2)
- VPAID2.0 (2)
- ad block detection (2)
- ad blocking (2)
- adobe (2)
- ads in HTML5 (2)
- analytics (2)
- android (2)
- captions (2)
- chromecast (2)
- chromecast support (2)
- clipping (2)
- closed captions (2)
- deloitte rising star (2)
- fast500 (2)
- frame accurate clipping (2)
- frame accurate seeking (2)
- metadata (2)
- multiple audio (2)
- playback speed (2)
- plugin-free (2)
- pricing (2)
- seamless transition (2)
- server-side ad replacement (2)
- subtitles (2)
- video publishers (2)
- viewer engagement (2)
- wowza (2)
- "smooth playback" (1)
- 360 Video (1)
- AOM (1)
- API (1)
- BVE (1)
- Best of Show (1)
- CEA-608 (1)
- CEA-708 (1)
- CORS (1)
- DIY (1)
- Edge (1)
- FCC (1)
- HLS stream (1)
- Hudl (1)
- LCEVC (1)
- Microsoft Azure Media Services (1)
- Monoscopic (1)
- NAB Show 2016 (1)
- NPM (1)
- NetOn.Live (1)
- OTT (1)
- Periscope (1)
- Real-time (1)
- SGAI (1)
- SIMID (1)
- Scale Up of the Year award (1)
- Seeking (1)
- Stereoscopic (1)
- Swisscom (1)
- TVB Europe (1)
- Tech Startup Day (1)
- Telenet (1)
- Uncategorized (1)
- University of Manitoba (1)
- User Interface (1)
- VR (1)
- VR180 (1)
- Vivaldi support (1)
- Vualto (1)
- adblock detection (1)
- apple tv (1)
- audio (1)
- autoplay (1)
- cloud (1)
- company news (1)
- facebook html5 (1)
- faster ABR (1)
- fmp4 (1)
- hiring (1)
- iGameMedia (1)
- iOS (1)
- iOS SDK (1)
- iPadOS (1)
- id3 (1)
- language localisation (1)
- micro moments (1)
- mobile ad (1)
- nagasoft (1)
- new web browser (1)
- offline playback (1)
- preloading (1)
- program-date-time (1)
- server-guided ad insertion (1)
- stream problems (1)
- streaming media east (1)
- support organization (1)
- thumbnails (1)
- use case (1)
- video clipping (1)
- video recording (1)
- video trends in 2016 (1)
- visibility (1)
- vulnerabilities (1)
- zero-day exploit (1)
- November 2024 (1)
- August 2024 (1)
- July 2024 (1)
- January 2024 (1)
- December 2023 (2)
- September 2023 (1)
- July 2023 (2)
- June 2023 (1)
- April 2023 (4)
- March 2023 (2)
- December 2022 (1)
- September 2022 (4)
- July 2022 (2)
- June 2022 (3)
- April 2022 (3)
- March 2022 (1)
- February 2022 (1)
- January 2022 (1)
- November 2021 (1)
- October 2021 (3)
- September 2021 (3)
- August 2021 (1)
- July 2021 (1)
- June 2021 (1)
- May 2021 (8)
- April 2021 (4)
- March 2021 (6)
- February 2021 (10)
- January 2021 (4)
- December 2020 (1)
- November 2020 (1)
- October 2020 (1)
- September 2020 (3)
- August 2020 (1)
- July 2020 (3)
- June 2020 (3)
- May 2020 (1)
- April 2020 (3)
- March 2020 (4)
- February 2020 (1)
- January 2020 (3)
- December 2019 (4)
- November 2019 (4)
- October 2019 (1)
- September 2019 (4)
- August 2019 (2)
- June 2019 (1)
- December 2018 (1)
- November 2018 (3)
- October 2018 (1)
- August 2018 (4)
- July 2018 (2)
- June 2018 (2)
- April 2018 (1)
- March 2018 (3)
- February 2018 (2)
- January 2018 (2)
- December 2017 (1)
- November 2017 (1)
- October 2017 (1)
- September 2017 (2)
- August 2017 (3)
- May 2017 (3)
- April 2017 (1)
- March 2017 (1)
- February 2017 (1)
- December 2016 (1)
- November 2016 (3)
- October 2016 (2)
- September 2016 (4)
- August 2016 (3)
- July 2016 (1)
- May 2016 (2)
- April 2016 (4)
- March 2016 (2)
- February 2016 (4)
- January 2016 (2)
- December 2015 (1)
- November 2015 (2)
- October 2015 (5)
- August 2015 (3)
- July 2015 (1)
- May 2015 (1)
- March 2015 (2)
- January 2015 (2)
- September 2014 (1)
- August 2014 (1)