SlideShare a Scribd company logo
1 of 49
Download to read offline
1. Opening
2. Pandu Kumar
Content Aware Encoding
3. Lars-Erik Ravn
Why Rewrite the Player?
4. Networking
Lars-Erik Ravn
Founder
Current mobile players and
Why write a new from scratch?
Agenda:
1. Current state of players
2. Why did we rewrite from scratch?
Current state
1. Experience with current players
2. Observations within the video industry
Why did we rewrite from scratch?
- Better end-user experience (there is a new generation of video consumers
and content - which needs more)
- Giving product owners more creative tools
- Simplify app developer experience making video products
- Dealing with legacy and politics
Online video technology industry
- Ingest
- Encode
- Storage
- Distribution
- Playback
- Insights
- Monetizing
- Payments
- Ads
Results of your work
- Netflix grade video back-end and CDN’s at the click of a button
- Encoders
- Parallelised encoding
- Both software and hardware
- Dynamic packaging
- Multiple manifests for same assets (HLS, MPEG-Dash)
- On demand transcoding / muxing
- Low latency streaming (LHLS, RT*)
More results of your work
- Real time synchronization of live streams
- Better compression
- Lower storage cost
- Smaller data stream
- CDN / Multi CDN
What about video players?
State of (mobile) video players
- Few options for app developers
- Have become a platform / OS level component
- Mainly tech problem, hard to handle low level graphics and a media pipeline
- Platform manufacturers have their own agenda
- Mainly developed to comply, not to innovate
- Apple, and anyone else developing OS / Browser etc. lagging on H256 because of not
investing in stuff they themselves does not use or see need to invest in right now.
- You will be on their mercy
- Developers are at the mercy of platform support
- Available options are mainly wrappers on the same stack
- This to allow for SLA and support, which you might have encountered is very limited or not
existing with platform offered players
Pain points
Fragmented / limited capabilities
- Streaming formats (HLS, MPEG-Dash, Smooth Streaming aso.)
- Containers (MP4, MKV, TS aso.)
- Codecs (H264, H265, QV1, VP9, VP10 aso.)
- DRM (Widevine, Fairplay, PlayReady)
- Subtitles (VTT, SSA, SRT, SUB, ASS aso.)
- Functionality (Forced quality on Apple i.e.)
Video Player API
- New video player API for each platform you want to target
- Quirks, pitfalls, hacks and workarounds
- Inconsistent reporting of events and data (Metrics and measuring)
- Seemingly simple tasks get complicated to handle
This is why third party wrapped players exists, though that’s kind of expensive and
does make everything lowest common denominator.
Seeking in AVPlayer
import AVFoundation
//--------------------------------------
// Option 1: Standard seek using CMTime
//--------------------------------------
let player = AVPlayer()
// I want to seek 10 seconds into the video
// But what is a timescale?!
let time = CMTime( seconds: 10, preferredTimescale: 1 )
// But this never ends up exactly 10 seconds into the
video..
player.seek( to: time )
Seeking in AVPlayer
import AVFoundation
//--------------------------------------
// Option 2: Seeking using tolerance
//--------------------------------------
// Zero tolerance! Why isn't this
default?
player.seek( to: time,
toleranceBefore: CMTime.zero,
toleranceAfter: CMTime.zero )
Seeking in AVPlayer and Movi Player
import AVFoundation
//--------------------------------------
// Option 2: Seeking using tolerance
//--------------------------------------
// Zero tolerance! Why isn't this
default?
player.seek( to: time,
toleranceBefore: CMTime.zero,
toleranceAfter: CMTime.zero )
import MoviPlayerSDK
let player = MoviPlayer()
player.position = 10.0
Looping in AVPlayer
import AVFoundation
//--------------------------------------
// Option 1: Use KVO to seek to the start
//--------------------------------------
let player = AVPlayer()
NotificationCenter.default.addObserver(
forName:
NSNotification.Name.AVPlayerItemDidPlayToEndTime,
object: nil,
queue: nil
){notification in
player.seek( to: kCMTimeZero )
player.play()
}
Looping in AVPlayer
import AVFoundation
//-----------------------------------------------
// Option 2: Use AVPlayerLooper
//-----------------------------------------------
var playerLooper: AVPlayerLooper?
// But then I have to use AVQueuePlayer instead of
AVPlayer
let queuePlayer = AVQueuePlayer( url: url )
// and keep a reference to the player looper..
videoLooper = AVPlayerLooper( player: queuePlayer,
templateItem: item )
Looping in AVPlayer and Movi Player
import MoviPlayerSDK
let player = MoviPlayer()
player.isLooping = true
import AVFoundation
//-----------------------------------------------
// Option 2: Use AVPlayerLooper
//-----------------------------------------------
var playerLooper: AVPlayerLooper?
// But then I have to use AVQueuePlayer instead of
AVPlayer
let queuePlayer = AVQueuePlayer( url: url )
// and keep a reference to the player looper..
videoLooper = AVPlayerLooper( player: queuePlayer,
templateItem: item )
Stopping
Stopping in AVPlayer
import AVFoundation
//--------------------------------------
// Option 1: Pause
//--------------------------------------
let player = AVPlayer()
// But this isn't the same as stopping..?
player.pause()
Stopping in AVPlayer
import AVFoundation
// Option 2: Release player
//-----------------------------------------------
// But this means my player has to be optional and
mutable..
// and that I have to recreate the player with all its
// settings later..
var player: AVPlayer? = AVPlayer()
player = nil
Stopping in AVPlayer
import AVFoundation
// Option 2: Release player
//-----------------------------------------------
// But this means my player has to be optional and mutable..
// and that I have to recreate the player with all its
// settings later..
var player: AVPlayer? = AVPlayer()
player = nil
// Option 3: Set nil player item
// ¯_(ツ)_/¯
player.replaceCurrentItem( with: nil )
Stopping in AVPlayer
import AVFoundation
// Option 2: Release player
//-----------------------------------------------
// But this means my player has to be optional and mutable..
// and that I have to recreate the player with all its
// settings later..
var player: AVPlayer? = AVPlayer()
player = nil
import MoviPlayerSDK
let player = MoviPlayer()
player.stop()
// Option 3: Set nil player item
// ¯_(ツ)_/¯
player.replaceCurrentItem( with: nil )
Targeting multiple platforms
- Difficult to manage
- Often results in one team per platform
- Multiple streaming endpoints, formats, manifests often needed
Experience
New generation of consumers and content
Expecting more than a passive and static presentation
User experience
- Previous generation human computer interface principle
- Designed to play video at 1x forward (fixed rate)
- Controls resemble DVD player
- Seeking feels like teleporting
- Skip 10 sec, 30 sec etc
- “Don’t touch it - it will break”
Innovation is hard
- Developers are boxed in to certain video experiences
- Product owners / UX / UI designers are held back by this
- Currently innovation is happening outside the video player
- Fancy buttons, overlays, chat, social etc.
So why is it like this?
- Legacy in what video is and how the medium works
- Comes from advertising way back
- A set storyline and experience pre-composed from A to Z
- Tech has been fueling this concept
- Encoding (Entropy to make transportable on limited bandwidth)
- Storage / formats (Optimised for 1x linear A-Z delivery and playback)
- Streaming / end-points (Manifests are made for 1x A-Z)
The spec is deterministic playback
By design - the pipelines are deterministic and static - and all made for a
low-memory footprint - which in all reality is not a bottleneck on any
modern device.
Download Parser Demuxer Decoder Renderer
Download Parser Demuxer Decoder Renderer
GOP
Our innovation to change players for good!
What drives us when building Movi Player is
- End-user should be able to experience video with creative control
- User experience should leverage capabilities in modern devices
- Development of video experiences should be dead simple
- Developers should be able to choose any tool and framework
- Developers should be able to consume any streaming end-point
Modular Cross platform systems
- Extendable to any input and output system
- Extendable to consume any media format (audio, video, subs, rich media)
- C++ makes SDK portable, we can adopt new platforms quickly
- Unity, React, (WebAssembly)
Video Player API
- Convenient, unified API for current modern languages and frameworks
- AVPlayer API is written in Objective C and those concepts.
- Not to useful for swift / modern video app developers
- Consistent behavior across all devices
- Functionality, reporting etc
https://movi.ai/docs
Overview Movi Player
C API
Movi Player Core C++
Cross Platform
Native
Wrapped Native
C# API
MoviPlayer
macOS
MoviPlayer
tvOS
MoviPlayer
iOS
MoviPlayer
Android
MoviPlayer
Android TV
MoviPlayer
Unity3D
Kotlin / Java APISwift / Obj-C API
JS / Typescript
MoviPlayer
NativeScript
JS / Typescript
MoviPlayer
ReactNative
C#
MoviPlayer
Xamarin
Dart
MoviPlayer
Flutter
Leverage platform strengths
- Conform to platform / framework patterns and practices
- Not poor ported libraries
- Rendering (OpenGL, Vulkan, Metal, DirectX)
- Hardware capabilities (Decoders, encoders, input interfaces)
- Native UI controls
- Make it feel and perform native to platform - no bogus wrappers, webviews or poor ports
Major breakthroughs from rewrite from scratch
- Interactive VoD and Live streaming experience
- Super fast startup time - 100ms
- HLS, DASH and fMP4 on all platforms
- Unified cross platform features and capabilities
- Unified cross platform API
- Hardware acceleration wherever possible
- Real time viewer attention insights
By rewriting from scratch video
feels mobile!
Finally =)
Demo
Help shape the future of video by joining
Movi Pioneer Program
movi.ai/pioneer

More Related Content

What's hot

UplinQ - ubuntu linux on the qualcomm® snapdragon™ 600 processor
UplinQ - ubuntu linux on the qualcomm® snapdragon™ 600 processorUplinQ - ubuntu linux on the qualcomm® snapdragon™ 600 processor
UplinQ - ubuntu linux on the qualcomm® snapdragon™ 600 processorSatya Harish
 
Windows 7 and Windows Server 2008 R2 SP1 Overview
Windows 7 and Windows Server 2008 R2 SP1 OverviewWindows 7 and Windows Server 2008 R2 SP1 Overview
Windows 7 and Windows Server 2008 R2 SP1 OverviewAmit Gatenyo
 
SG Android Devs Meetup July 2013
SG Android Devs Meetup July 2013SG Android Devs Meetup July 2013
SG Android Devs Meetup July 2013Huijie Wu
 
Reducing the boot time of Linux devices
Reducing the boot time of Linux devicesReducing the boot time of Linux devices
Reducing the boot time of Linux devicesChris Simmonds
 
Quickboot on i.MX6
Quickboot on i.MX6Quickboot on i.MX6
Quickboot on i.MX6Gary Bisson
 
Useful USB Gadgets on Linux
Useful USB Gadgets on LinuxUseful USB Gadgets on Linux
Useful USB Gadgets on LinuxGary Bisson
 
ACPI and FreeBSD (Part 1)
ACPI and FreeBSD (Part 1)ACPI and FreeBSD (Part 1)
ACPI and FreeBSD (Part 1)Nate Lawson
 
The end of embedded Linux (as we know it)
The end of embedded Linux (as we know it)The end of embedded Linux (as we know it)
The end of embedded Linux (as we know it)Chris Simmonds
 
ABS 2014 - Android Kit Kat Internals
ABS 2014 - Android Kit Kat InternalsABS 2014 - Android Kit Kat Internals
ABS 2014 - Android Kit Kat InternalsBenjamin Zores
 
ACPI and FreeBSD (Part 2)
ACPI and FreeBSD (Part 2)ACPI and FreeBSD (Part 2)
ACPI and FreeBSD (Part 2)Nate Lawson
 
ABS 2012 - Android Device Porting Walkthrough
ABS 2012 - Android Device Porting WalkthroughABS 2012 - Android Device Porting Walkthrough
ABS 2012 - Android Device Porting WalkthroughBenjamin Zores
 
Introduction to AV Foundation
Introduction to AV FoundationIntroduction to AV Foundation
Introduction to AV FoundationChris Adamson
 
Capturing Stills, Sounds, and Scenes with AV Foundation
Capturing Stills, Sounds, and Scenes with AV FoundationCapturing Stills, Sounds, and Scenes with AV Foundation
Capturing Stills, Sounds, and Scenes with AV FoundationChris Adamson
 
Reducing boot time in embedded Linux
Reducing boot time in embedded LinuxReducing boot time in embedded Linux
Reducing boot time in embedded LinuxChris Simmonds
 
Embedded Android: Android beyond the smartphone
Embedded Android: Android beyond the smartphoneEmbedded Android: Android beyond the smartphone
Embedded Android: Android beyond the smartphoneChris Simmonds
 

What's hot (19)

Polstra 44con2012
Polstra 44con2012Polstra 44con2012
Polstra 44con2012
 
UplinQ - ubuntu linux on the qualcomm® snapdragon™ 600 processor
UplinQ - ubuntu linux on the qualcomm® snapdragon™ 600 processorUplinQ - ubuntu linux on the qualcomm® snapdragon™ 600 processor
UplinQ - ubuntu linux on the qualcomm® snapdragon™ 600 processor
 
Windows 7 and Windows Server 2008 R2 SP1 Overview
Windows 7 and Windows Server 2008 R2 SP1 OverviewWindows 7 and Windows Server 2008 R2 SP1 Overview
Windows 7 and Windows Server 2008 R2 SP1 Overview
 
Bring Out the Best in Embedded Computing
Bring Out the Best in Embedded ComputingBring Out the Best in Embedded Computing
Bring Out the Best in Embedded Computing
 
SG Android Devs Meetup July 2013
SG Android Devs Meetup July 2013SG Android Devs Meetup July 2013
SG Android Devs Meetup July 2013
 
Balancing Power & Performance Webinar
Balancing Power & Performance WebinarBalancing Power & Performance Webinar
Balancing Power & Performance Webinar
 
Reducing the boot time of Linux devices
Reducing the boot time of Linux devicesReducing the boot time of Linux devices
Reducing the boot time of Linux devices
 
Quickboot on i.MX6
Quickboot on i.MX6Quickboot on i.MX6
Quickboot on i.MX6
 
Useful USB Gadgets on Linux
Useful USB Gadgets on LinuxUseful USB Gadgets on Linux
Useful USB Gadgets on Linux
 
ACPI and FreeBSD (Part 1)
ACPI and FreeBSD (Part 1)ACPI and FreeBSD (Part 1)
ACPI and FreeBSD (Part 1)
 
The end of embedded Linux (as we know it)
The end of embedded Linux (as we know it)The end of embedded Linux (as we know it)
The end of embedded Linux (as we know it)
 
ABS 2014 - Android Kit Kat Internals
ABS 2014 - Android Kit Kat InternalsABS 2014 - Android Kit Kat Internals
ABS 2014 - Android Kit Kat Internals
 
ACPI and FreeBSD (Part 2)
ACPI and FreeBSD (Part 2)ACPI and FreeBSD (Part 2)
ACPI and FreeBSD (Part 2)
 
ABS 2012 - Android Device Porting Walkthrough
ABS 2012 - Android Device Porting WalkthroughABS 2012 - Android Device Porting Walkthrough
ABS 2012 - Android Device Porting Walkthrough
 
Introduction to AV Foundation
Introduction to AV FoundationIntroduction to AV Foundation
Introduction to AV Foundation
 
Capturing Stills, Sounds, and Scenes with AV Foundation
Capturing Stills, Sounds, and Scenes with AV FoundationCapturing Stills, Sounds, and Scenes with AV Foundation
Capturing Stills, Sounds, and Scenes with AV Foundation
 
Reducing boot time in embedded Linux
Reducing boot time in embedded LinuxReducing boot time in embedded Linux
Reducing boot time in embedded Linux
 
Android Booting Scenarios
Android Booting ScenariosAndroid Booting Scenarios
Android Booting Scenarios
 
Embedded Android: Android beyond the smartphone
Embedded Android: Android beyond the smartphoneEmbedded Android: Android beyond the smartphone
Embedded Android: Android beyond the smartphone
 

Similar to Movi presentation Singapore video tech meetup

Utf 8'en'ibm sametime 9 - voice and video deployment
Utf 8'en'ibm sametime 9 - voice and video deployment Utf 8'en'ibm sametime 9 - voice and video deployment
Utf 8'en'ibm sametime 9 - voice and video deployment a8us
 
Minko - Scripting 3D apps with Lua and C++
Minko - Scripting 3D apps with Lua and C++Minko - Scripting 3D apps with Lua and C++
Minko - Scripting 3D apps with Lua and C++Minko3D
 
20040927-Commons-Riddle.ppt
20040927-Commons-Riddle.ppt20040927-Commons-Riddle.ppt
20040927-Commons-Riddle.pptVideoguy
 
Are AAA 3D Games for the Web Possible?
Are AAA 3D Games for the Web Possible?Are AAA 3D Games for the Web Possible?
Are AAA 3D Games for the Web Possible?Renaun Erickson
 
Building fast,scalable game server in node.js
Building fast,scalable game server in node.jsBuilding fast,scalable game server in node.js
Building fast,scalable game server in node.jsXie ChengChao
 
International Journal of Computational Engineering Research(IJCER)
International Journal of Computational Engineering Research(IJCER)International Journal of Computational Engineering Research(IJCER)
International Journal of Computational Engineering Research(IJCER)ijceronline
 
Qualcomm Snapdragon Processors: A Super Gaming Platform
Qualcomm Snapdragon Processors: A Super Gaming Platform Qualcomm Snapdragon Processors: A Super Gaming Platform
Qualcomm Snapdragon Processors: A Super Gaming Platform Qualcomm Developer Network
 
UplinQ - qualcomm® snapdragon™ processors a super gaming platform
UplinQ - qualcomm® snapdragon™ processors a super gaming platformUplinQ - qualcomm® snapdragon™ processors a super gaming platform
UplinQ - qualcomm® snapdragon™ processors a super gaming platformSatya Harish
 
Ubuntu and Linux Terminal Server Project
Ubuntu and Linux Terminal Server ProjectUbuntu and Linux Terminal Server Project
Ubuntu and Linux Terminal Server ProjectSameer Verma
 
Agentless System Crawler - InterConnect 2016
Agentless System Crawler - InterConnect 2016Agentless System Crawler - InterConnect 2016
Agentless System Crawler - InterConnect 2016Canturk Isci
 
Open source Android 10 on Orange Pi: Meth or Reality?
Open source Android 10 on Orange Pi: Meth or Reality?Open source Android 10 on Orange Pi: Meth or Reality?
Open source Android 10 on Orange Pi: Meth or Reality?GlobalLogic Ukraine
 
"The Vision API Maze: Options and Trade-offs," a Presentation from the Khrono...
"The Vision API Maze: Options and Trade-offs," a Presentation from the Khrono..."The Vision API Maze: Options and Trade-offs," a Presentation from the Khrono...
"The Vision API Maze: Options and Trade-offs," a Presentation from the Khrono...Edge AI and Vision Alliance
 
Getting the best out of WebRTC
Getting the best out of WebRTCGetting the best out of WebRTC
Getting the best out of WebRTCDigium
 
Getting the Best Out Of WebRTC - Astricon 2014
Getting the Best Out Of WebRTC - Astricon 2014Getting the Best Out Of WebRTC - Astricon 2014
Getting the Best Out Of WebRTC - Astricon 2014Dan Jenkins
 
Ubuntu Core 技术详解
Ubuntu Core 技术详解Ubuntu Core 技术详解
Ubuntu Core 技术详解Rex Tsai
 
Windows7: Video Improvements
Windows7: Video ImprovementsWindows7: Video Improvements
Windows7: Video Improvementswonderu
 
UplinQ - bring out the best in embedded computing
UplinQ - bring out the best in embedded computingUplinQ - bring out the best in embedded computing
UplinQ - bring out the best in embedded computingSatya Harish
 

Similar to Movi presentation Singapore video tech meetup (20)

Utf 8'en'ibm sametime 9 - voice and video deployment
Utf 8'en'ibm sametime 9 - voice and video deployment Utf 8'en'ibm sametime 9 - voice and video deployment
Utf 8'en'ibm sametime 9 - voice and video deployment
 
Minko - Scripting 3D apps with Lua and C++
Minko - Scripting 3D apps with Lua and C++Minko - Scripting 3D apps with Lua and C++
Minko - Scripting 3D apps with Lua and C++
 
20040927-Commons-Riddle.ppt
20040927-Commons-Riddle.ppt20040927-Commons-Riddle.ppt
20040927-Commons-Riddle.ppt
 
Are AAA 3D Games for the Web Possible?
Are AAA 3D Games for the Web Possible?Are AAA 3D Games for the Web Possible?
Are AAA 3D Games for the Web Possible?
 
Building fast,scalable game server in node.js
Building fast,scalable game server in node.jsBuilding fast,scalable game server in node.js
Building fast,scalable game server in node.js
 
Video Drivers
Video DriversVideo Drivers
Video Drivers
 
International Journal of Computational Engineering Research(IJCER)
International Journal of Computational Engineering Research(IJCER)International Journal of Computational Engineering Research(IJCER)
International Journal of Computational Engineering Research(IJCER)
 
Qualcomm Snapdragon Processors: A Super Gaming Platform
Qualcomm Snapdragon Processors: A Super Gaming Platform Qualcomm Snapdragon Processors: A Super Gaming Platform
Qualcomm Snapdragon Processors: A Super Gaming Platform
 
UplinQ - qualcomm® snapdragon™ processors a super gaming platform
UplinQ - qualcomm® snapdragon™ processors a super gaming platformUplinQ - qualcomm® snapdragon™ processors a super gaming platform
UplinQ - qualcomm® snapdragon™ processors a super gaming platform
 
Symbian OS
Symbian  OS Symbian  OS
Symbian OS
 
Ubuntu and Linux Terminal Server Project
Ubuntu and Linux Terminal Server ProjectUbuntu and Linux Terminal Server Project
Ubuntu and Linux Terminal Server Project
 
Agentless System Crawler - InterConnect 2016
Agentless System Crawler - InterConnect 2016Agentless System Crawler - InterConnect 2016
Agentless System Crawler - InterConnect 2016
 
WebRTC for Mobile
WebRTC for MobileWebRTC for Mobile
WebRTC for Mobile
 
Open source Android 10 on Orange Pi: Meth or Reality?
Open source Android 10 on Orange Pi: Meth or Reality?Open source Android 10 on Orange Pi: Meth or Reality?
Open source Android 10 on Orange Pi: Meth or Reality?
 
"The Vision API Maze: Options and Trade-offs," a Presentation from the Khrono...
"The Vision API Maze: Options and Trade-offs," a Presentation from the Khrono..."The Vision API Maze: Options and Trade-offs," a Presentation from the Khrono...
"The Vision API Maze: Options and Trade-offs," a Presentation from the Khrono...
 
Getting the best out of WebRTC
Getting the best out of WebRTCGetting the best out of WebRTC
Getting the best out of WebRTC
 
Getting the Best Out Of WebRTC - Astricon 2014
Getting the Best Out Of WebRTC - Astricon 2014Getting the Best Out Of WebRTC - Astricon 2014
Getting the Best Out Of WebRTC - Astricon 2014
 
Ubuntu Core 技术详解
Ubuntu Core 技术详解Ubuntu Core 技术详解
Ubuntu Core 技术详解
 
Windows7: Video Improvements
Windows7: Video ImprovementsWindows7: Video Improvements
Windows7: Video Improvements
 
UplinQ - bring out the best in embedded computing
UplinQ - bring out the best in embedded computingUplinQ - bring out the best in embedded computing
UplinQ - bring out the best in embedded computing
 

Recently uploaded

HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about usDynamic Netsoft
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...aditisharan08
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationkaushalgiri8080
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxTier1 app
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number SystemsJheuzeDellosa
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfkalichargn70th171
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 
The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfPower Karaoke
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 

Recently uploaded (20)

HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about us
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanation
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number Systems
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdfThe Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
The Essentials of Digital Experience Monitoring_ A Comprehensive Guide.pdf
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 
The Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdfThe Evolution of Karaoke From Analog to App.pdf
The Evolution of Karaoke From Analog to App.pdf
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 

Movi presentation Singapore video tech meetup

  • 1.
  • 2. 1. Opening 2. Pandu Kumar Content Aware Encoding 3. Lars-Erik Ravn Why Rewrite the Player? 4. Networking
  • 3. Lars-Erik Ravn Founder Current mobile players and Why write a new from scratch?
  • 4.
  • 5. Agenda: 1. Current state of players 2. Why did we rewrite from scratch?
  • 6. Current state 1. Experience with current players 2. Observations within the video industry
  • 7. Why did we rewrite from scratch? - Better end-user experience (there is a new generation of video consumers and content - which needs more) - Giving product owners more creative tools - Simplify app developer experience making video products - Dealing with legacy and politics
  • 8. Online video technology industry - Ingest - Encode - Storage - Distribution - Playback - Insights - Monetizing - Payments - Ads
  • 9. Results of your work - Netflix grade video back-end and CDN’s at the click of a button - Encoders - Parallelised encoding - Both software and hardware - Dynamic packaging - Multiple manifests for same assets (HLS, MPEG-Dash) - On demand transcoding / muxing - Low latency streaming (LHLS, RT*)
  • 10. More results of your work - Real time synchronization of live streams - Better compression - Lower storage cost - Smaller data stream - CDN / Multi CDN
  • 11. What about video players?
  • 12. State of (mobile) video players - Few options for app developers - Have become a platform / OS level component - Mainly tech problem, hard to handle low level graphics and a media pipeline - Platform manufacturers have their own agenda - Mainly developed to comply, not to innovate - Apple, and anyone else developing OS / Browser etc. lagging on H256 because of not investing in stuff they themselves does not use or see need to invest in right now. - You will be on their mercy - Developers are at the mercy of platform support - Available options are mainly wrappers on the same stack - This to allow for SLA and support, which you might have encountered is very limited or not existing with platform offered players
  • 14. Fragmented / limited capabilities - Streaming formats (HLS, MPEG-Dash, Smooth Streaming aso.) - Containers (MP4, MKV, TS aso.) - Codecs (H264, H265, QV1, VP9, VP10 aso.) - DRM (Widevine, Fairplay, PlayReady) - Subtitles (VTT, SSA, SRT, SUB, ASS aso.) - Functionality (Forced quality on Apple i.e.)
  • 15. Video Player API - New video player API for each platform you want to target - Quirks, pitfalls, hacks and workarounds - Inconsistent reporting of events and data (Metrics and measuring) - Seemingly simple tasks get complicated to handle This is why third party wrapped players exists, though that’s kind of expensive and does make everything lowest common denominator.
  • 16. Seeking in AVPlayer import AVFoundation //-------------------------------------- // Option 1: Standard seek using CMTime //-------------------------------------- let player = AVPlayer() // I want to seek 10 seconds into the video // But what is a timescale?! let time = CMTime( seconds: 10, preferredTimescale: 1 ) // But this never ends up exactly 10 seconds into the video.. player.seek( to: time )
  • 17. Seeking in AVPlayer import AVFoundation //-------------------------------------- // Option 2: Seeking using tolerance //-------------------------------------- // Zero tolerance! Why isn't this default? player.seek( to: time, toleranceBefore: CMTime.zero, toleranceAfter: CMTime.zero )
  • 18. Seeking in AVPlayer and Movi Player import AVFoundation //-------------------------------------- // Option 2: Seeking using tolerance //-------------------------------------- // Zero tolerance! Why isn't this default? player.seek( to: time, toleranceBefore: CMTime.zero, toleranceAfter: CMTime.zero ) import MoviPlayerSDK let player = MoviPlayer() player.position = 10.0
  • 19. Looping in AVPlayer import AVFoundation //-------------------------------------- // Option 1: Use KVO to seek to the start //-------------------------------------- let player = AVPlayer() NotificationCenter.default.addObserver( forName: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil, queue: nil ){notification in player.seek( to: kCMTimeZero ) player.play() }
  • 20. Looping in AVPlayer import AVFoundation //----------------------------------------------- // Option 2: Use AVPlayerLooper //----------------------------------------------- var playerLooper: AVPlayerLooper? // But then I have to use AVQueuePlayer instead of AVPlayer let queuePlayer = AVQueuePlayer( url: url ) // and keep a reference to the player looper.. videoLooper = AVPlayerLooper( player: queuePlayer, templateItem: item )
  • 21. Looping in AVPlayer and Movi Player import MoviPlayerSDK let player = MoviPlayer() player.isLooping = true import AVFoundation //----------------------------------------------- // Option 2: Use AVPlayerLooper //----------------------------------------------- var playerLooper: AVPlayerLooper? // But then I have to use AVQueuePlayer instead of AVPlayer let queuePlayer = AVQueuePlayer( url: url ) // and keep a reference to the player looper.. videoLooper = AVPlayerLooper( player: queuePlayer, templateItem: item )
  • 23. Stopping in AVPlayer import AVFoundation //-------------------------------------- // Option 1: Pause //-------------------------------------- let player = AVPlayer() // But this isn't the same as stopping..? player.pause()
  • 24. Stopping in AVPlayer import AVFoundation // Option 2: Release player //----------------------------------------------- // But this means my player has to be optional and mutable.. // and that I have to recreate the player with all its // settings later.. var player: AVPlayer? = AVPlayer() player = nil
  • 25. Stopping in AVPlayer import AVFoundation // Option 2: Release player //----------------------------------------------- // But this means my player has to be optional and mutable.. // and that I have to recreate the player with all its // settings later.. var player: AVPlayer? = AVPlayer() player = nil // Option 3: Set nil player item // ¯_(ツ)_/¯ player.replaceCurrentItem( with: nil )
  • 26. Stopping in AVPlayer import AVFoundation // Option 2: Release player //----------------------------------------------- // But this means my player has to be optional and mutable.. // and that I have to recreate the player with all its // settings later.. var player: AVPlayer? = AVPlayer() player = nil import MoviPlayerSDK let player = MoviPlayer() player.stop() // Option 3: Set nil player item // ¯_(ツ)_/¯ player.replaceCurrentItem( with: nil )
  • 27. Targeting multiple platforms - Difficult to manage - Often results in one team per platform - Multiple streaming endpoints, formats, manifests often needed
  • 29.
  • 30.
  • 31.
  • 32.
  • 33. New generation of consumers and content Expecting more than a passive and static presentation
  • 34. User experience - Previous generation human computer interface principle - Designed to play video at 1x forward (fixed rate) - Controls resemble DVD player - Seeking feels like teleporting - Skip 10 sec, 30 sec etc - “Don’t touch it - it will break”
  • 35. Innovation is hard - Developers are boxed in to certain video experiences - Product owners / UX / UI designers are held back by this - Currently innovation is happening outside the video player - Fancy buttons, overlays, chat, social etc.
  • 36. So why is it like this? - Legacy in what video is and how the medium works - Comes from advertising way back - A set storyline and experience pre-composed from A to Z - Tech has been fueling this concept - Encoding (Entropy to make transportable on limited bandwidth) - Storage / formats (Optimised for 1x linear A-Z delivery and playback) - Streaming / end-points (Manifests are made for 1x A-Z)
  • 37. The spec is deterministic playback By design - the pipelines are deterministic and static - and all made for a low-memory footprint - which in all reality is not a bottleneck on any modern device. Download Parser Demuxer Decoder Renderer
  • 38. Download Parser Demuxer Decoder Renderer GOP
  • 39. Our innovation to change players for good! What drives us when building Movi Player is - End-user should be able to experience video with creative control - User experience should leverage capabilities in modern devices - Development of video experiences should be dead simple - Developers should be able to choose any tool and framework - Developers should be able to consume any streaming end-point
  • 40. Modular Cross platform systems - Extendable to any input and output system - Extendable to consume any media format (audio, video, subs, rich media) - C++ makes SDK portable, we can adopt new platforms quickly - Unity, React, (WebAssembly)
  • 41. Video Player API - Convenient, unified API for current modern languages and frameworks - AVPlayer API is written in Objective C and those concepts. - Not to useful for swift / modern video app developers - Consistent behavior across all devices - Functionality, reporting etc https://movi.ai/docs
  • 42. Overview Movi Player C API Movi Player Core C++ Cross Platform Native Wrapped Native C# API MoviPlayer macOS MoviPlayer tvOS MoviPlayer iOS MoviPlayer Android MoviPlayer Android TV MoviPlayer Unity3D Kotlin / Java APISwift / Obj-C API JS / Typescript MoviPlayer NativeScript JS / Typescript MoviPlayer ReactNative C# MoviPlayer Xamarin Dart MoviPlayer Flutter
  • 43. Leverage platform strengths - Conform to platform / framework patterns and practices - Not poor ported libraries - Rendering (OpenGL, Vulkan, Metal, DirectX) - Hardware capabilities (Decoders, encoders, input interfaces) - Native UI controls - Make it feel and perform native to platform - no bogus wrappers, webviews or poor ports
  • 44. Major breakthroughs from rewrite from scratch - Interactive VoD and Live streaming experience - Super fast startup time - 100ms - HLS, DASH and fMP4 on all platforms - Unified cross platform features and capabilities - Unified cross platform API - Hardware acceleration wherever possible - Real time viewer attention insights
  • 45.
  • 46.
  • 47. By rewriting from scratch video feels mobile! Finally =)
  • 48. Demo
  • 49. Help shape the future of video by joining Movi Pioneer Program movi.ai/pioneer