SlideShare uma empresa Scribd logo
1 de 83
Mobile Movies with
HTTP Live Streaming
   Chris Adamson • @invalidname
    March 9, 2013 • Chicago, IL




   Sides and code available on my blog:
      http://www.subfurther.com/blog
So Many Streaming
     Apps!
Netflix
Flixter
ABC
PBS
NBC Olympics Live
     Extra
DirecTV
UStream
Crunchyroll
TwitchTV
iTunes Festival
Apple Events
Oh, and it can be embedded
     in the <video> tag
Sounds good? How
do I get in on that?
What You'll Learn

• What streaming is (and isn't)

• Setting up HLS on the server

• Using HLS streams in iOS apps

• Real-world deployment
HLS: What It Is (and
      isn't)
Good Ol' Broadcast
Broadcast Media

• Always live on some channel (a band of EM
  spectrum).

• Every client tuned to that channel sees the
  same thing, at the same time.

• One-way, one-to-many model.
Internet
• Generally one-to-one (host to host).

 • Multicast IP is an exception, but is rare on
   the public Internet.

• Two-way communication over sockets.

• Routing can take many hops, via multiple
  transport media (wire, wifi, cellular, etc.).
Impedence Mismatch!
Ye Olde Streaming
• Client makes socket connection and keeps it
  open for duration of program.

• Server sends media at playback speed (plus
  buffering).

 • Shoutcast: MP3 files served slowly over HTTP.

• Typically use a special port number and special
  server software.
Streaming Problems
• Difficult and expensive to scale.

• Special port numbers routinely blocked by
  businesses, ISPs, firewalls, etc.

• Competing standards: Real Player, Windows
  Media, QuickTime (all with their own plugins).

    • No wonder Flash won.

• Good luck holding a socket connection on cellular.
What If…
• We didn't need an always-on socket
  connection?

• We could just run over port 80?

• We could just adopt industry standards like
  H.264 and AAC instead of cooking custom
  codecs?
HTTP Live Streaming
• Serves media as a series of short flat files, via
  HTTP, usually on port 80.

• Any web server will do.

• Client software reassembles the data into a
  continuous media stream.

• Spec does not specify contents, but Apple uses
  H.264 and AAC, just like all their media apps.
Serving up HLS


• Client URL is an .m3u8 playlist file

• Playlist points to the media segment files
The HLS playlist
#EXTM3U
                    Format: .m3u8 format,
#EXT-X-TARGETDURATION:10
#EXT-X-VERSION:3
                            just a list of files to play
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
   Metadata tags describe
#EXTINF:9.975,
 
fileSequence0.ts
           the contents
#EXTINF:9.975,
 
fileSequence1.ts
#EXTINF:9.975,
 
           Each segment file
fileSequence2.ts
#EXTINF:9.9767,

                            preceded by metadata
fileSequence3.ts
           (e.g., duration)
#EXTINF:9.975,
 

[...]
                      If no end tag, client

#EXT-X-ENDLIST
             refreshes periodically
<video src="prog_index.m3u8" width="640" height="480"
controls autoplay>No video tag support</video>
How is this better than
   a flat .m4v file?
• Streams can provide variants for different
  bandwidths (as we’ll see…)

• Segments make it easier to scrub into the
  video

• Streams can be live video
The “Live” in HLS
• A playlist is a live stream if it doesn’t have an
  #EXT-X-ENDLIST tag

• Live playlist will generally just contain the last
  minute or so of segments

• Client will refresh playlist every minute or so,
  download whatever segments it doesn’t
  already have, queue them locally

• “Live” isn’t really “live” (often a minute behind)
Serving up HLS
mediafilesegmenter
• Splits an A/V file into segment files, creates
  the .m3u8 playlist

• Source must be .mov or .m4v with H.264 video,
  AAC audio

• Output segments will be MPEG-2 Transport
  Stream (.ts) files, or .aac if audio-only

• Segment paths are relative, use -b to prepend
  URL stub
Technical Note TN2224
The following audio and video formats are supported:

• Video: H.264 Baseline Profile Level 3.0 (iPhone/iPod Touch),
  Main Profile Level 3.1 (iPad 1,2)

• Audio: HE-AAC or AAC-LC up to 48 kHz, stereo audio OR
  MP3 (MPEG-1 Audio Layer 3) 8 kHz to 48 kHz, stereo audio

Note: iPhone 3G supports Baseline Profile Level 3.1. If your
app runs on older iPhones, however, you should use H.264
Baseline Profile 3.0 for compatibility.
Yuna:HTTP Live Streaming tests cadamson$ mediafilesegmenter
-f basic source/IMG_0251.MOV
Jun 24 2012 10:01:24.203: Using floating point is not
backward compatible to iOS 4.1 or earlier devices
Jun 24 2012 10:01:24.204: Processing file /Users/cadamson/
Documents/HTTP Live Streaming tests/source/IMG_0251.MOV
Jun 24 2012 10:01:24.338: Finalized /Users/cadamson/
Documents/HTTP Live Streaming tests/basic/fileSequence0.ts
Jun 24 2012 10:01:24.375: segment bitrate 3.78028e+06 is
new max
Jun 24 2012 10:01:24.468: Finalized /Users/cadamson/
Documents/HTTP Live Streaming tests/basic/fileSequence1.ts
Jun 24 2012 10:01:24.554: Finalized /Users/cadamson/
Documents/HTTP Live Streaming tests/basic/fileSequence2.ts
Jun 24 2012 10:01:24.631: Finalized /Users/cadamson/
Documents/HTTP Live Streaming tests/basic/fileSequence3.ts
Jun 24 2012 10:01:24.717: Finalized /Users/cadamson/
Documents/HTTP Live Streaming tests/basic/fileSequence4.ts
Demo
Variant Playlists
• One bitrate does not fit all: Mac on Ethernet
  versus iPhone on Edge.

• Solution: encode your video at multiple
  bitrates, offer metadata in playlist about what's
  available, let client figure out which to use.

• HLS clients automatically switch to best variant
  for current network conditions, switch on the
  fly.
variantplaylistcreator
• Creates a playlist that itself points to playlists
  created with mediafilesegmenter.

  • Each entry contains metadata describing the
    bitrate and encoding of the variant.

• Tool takes argument pairs: file or URL of a
  variant .m3u8, and metadata .plist created with
  mediafilesegmenter -I flag

• First entry in variant playlist is default; client will try
  this one first
Encoding the variants
TN2224
Recommendations
Creating variants
Yuna:HTTP Live Streaming tests cadamson$
mediafilesegmenter -I -f variants/
broadband/ source/IMG_0254_Broadband.m4v

Yuna:HTTP Live Streaming tests cadamson$
mediafilesegmenter -I -f variants/wifi
source/IMG_0254_WiFi.m4v

Yuna:HTTP Live Streaming tests cadamson$
mediafilesegmenter -I -f variants/
cellular source/IMG_0254_Cellular.m4v
Creating variant playlist
Yuna:HTTP Live Streaming tests cadamson$
variantplaylistcreator -o variants/
variants.m3u8 variants/broadband/
prog_index.m3u8 source/
IMG_0254_Broadband.plist variants/wifi/
prog_index.m3u8 source/
IMG_0254_WiFi.plist variants/cellular/
prog_index.m3u8 source/
IMG_0254_Cellular.plist
Demo
That's Great, but…
How do we keep people from stealing our stream?
Encryption
• HLS encrypts files, not transport.

• Easy to scale: still serving flat files, but now
  they're useless without decryption keys.

• Serving the keys still needs to be secure.

• Necessary, but not sufficient, for DRM.
Encrypting a playlist
Yuna:HTTP Live Streaming tests cadamson$ mediafilesegmenter -
I -k keys -f encrypted/cellular source/IMG_0426_Cellular.m4v
Jun 24 2012 18:59:47.115: Using new key/iv rotation period;
this is not backward compatible to iOS 3.1.* or earlier
devices.  Use the "-encrypt-iv=sequence" option for
compatibility with those devices.
Jun 24 2012 18:59:47.115: Using floating point is not
backward compatible to iOS 4.1 or earlier devices
Jun 24 2012 18:59:47.115: Processing file /Users/cadamson/
Documents/HTTP Live Streaming tests/source/
IMG_0426_Cellular.m4v
Jun 24 2012 18:59:47.152: changing IV
Jun 24 2012 18:59:47.160: Finalized /Users/cadamson/
Documents/HTTP Live Streaming tests/encrypted/cellular/
fileSequence0.ts
Jun 24 2012 18:59:47.160: segment bitrate 271257 is new max
Encrypted .ts files
Protect those keys




/www/protected


                 /www/hls
Demo
Captions
• HLS supports CEA-608 closed captions in the
  MPEG-2 Transport Stream

 • If using file segmenter, add a closed-
   caption track (type 'clcp') to your source
   QuickTime .mov

 • Or use Compressor and Sonic Scenarist
Client-side HLS
Opening an HLS
        stream

• Provide the .m3u8 URL to
  MPMoviePlayerController or AVPlayer

• Add the movie view or layer to your UI,
  customizing size or scaling if necessary
Create an
   MPMoviePlayerController

// create new movie player
self.moviePlayer = [[MPMoviePlayerController alloc]

 
 
 
 
 
 
 
 initWithContentURL:streamURL];
[self.moviePlayer prepareToPlay];



     • This is the same as playing a local file or
       any other URL
Add it to your UI

[self.moviePlayer.view setFrame:

 
 
 
 
 
 
 self.movieContainerView.bounds];
[self.movieContainerView addSubview:

 
 
 
 
 
 
 
 self.moviePlayer.view];
self.moviePlayer.scalingMode =

 
 
 
 
 
 
 
 MPMovieScalingModeFill;


   • Can inspect the moviePlayer's naturalSize, though
     it may change during playback (listen for
     MPMovieNaturalSizeAvailableNotification),
     or just setFullscreen:animated:
MPMovieScalingMode
    AspectFit
MPMovieScalingMode
    AspectFill
MPMovieScalingMode 
       Fill
Accessing Encrypted
     Streams
• Media Player and AV Foundation can use
  NSURLCredentials that you've provided

• Place credentials in
  NSURLCredentialStorage

• Server can provide the keys securely(*) with
  HTTP Basic or Digest authentication, an
  HTTPS script, etc.
     * - For various values of "secure"
Setting credentials (1)

NSURLProtectionSpace *protectionSpace = 

 [[NSURLProtectionSpace alloc]

 
 initWithHost:host

 
 port:port

 
 protocol:protocol

 
 realm:realm

 
 authenticationMethod:

 
 
 NSURLAuthenticationMethodDefault];
Setting credentials (2)

NSURLCredential *credential =

 [NSURLCredential credentialWithUser:username

 
 
 
 
 
 
 
 
         password:password

 
 
 
 
 
 
 
 
 
 
 persistence:

 
 
 NSURLCredentialPersistenceForSession];

[[NSURLCredentialStorage

 sharedCredentialStorage]

 
 setDefaultCredential:credential

 
    forProtectionSpace:protectionSpace];
Live Streaming
Live Streaming
• mediastreamsegmenter mostly works like the
  file version, but takes its input from UDP
  stream or a Unix pipe

 • Only difference is that .m3u8 file doesn't
   have an EXT-X-ENDLIST tag, so client
   reloads periodically to fetch new segments

• How the heck do you create a UDP A/V
  stream?
You Don't


• None of Apple's tools create the required
  stream

 • This is a "third party opportunity"

 • Which begs the question… buy or build?
Streaming in the Real
       World
     It's not all about iPhones…
Streaming Clients
• Mobile Devices: iPhone, iPad, iPod Touch…
  plus Android, Windows Mobile, etc.

• Mac and Windows PCs

• Over-the-top (OTT) boxes: Apple TV, Roku

• Game consoles
Let's Get Practical
• What devices do you have to be on?

• What devices will you get for free?

 • HLS is the preferred format for Roku

• How to encode and deliver to the devices
  you need?
HLS Alternatives
• Flash still rules on the desktop/browser
  space, thanks in part to Mozilla's obstinance
  about H.264 in <video> (irony alert: H.264 is
  the de facto standard for Flash video)

• Adobe Dynamic Streaming and Microsoft
  Smooth Streaming are highly similar to HLS:
  bitrate-adaptive streams over HTTP
MPEG-DASH
• Attempt at a standardized approach to HTTP
  adaptive-bitrate streaming. ISO/IEC 23009-1.




           http://xkcd.com/927/
Emerging Consensus

• Flash for PCs

• HTTP Live Streaming for iOS

• Plus whatever other devices you need to
  support
Real-World HLS

• Can you competently encode all your media
  at all the variant bitrates you need?

• Do you have a way to QC all your streams?

• Can you handle the server load?
Build or Buy: Services
• Provide hosting, transcoding, bandwidth

 • All-in-one: UStream, LiveStream, Justin.tv /
   Twitch.tv (all of which have iOS apps)

 • May provide broadcast tools (Flash applet,
   Telestream Wirecast, etc.

 • Often free with ads; you pay to go ad-free,
   embed on your site, etc.
invalidstream




http://www.ustream.tv/channel/invalidstream
Production Demo




http://www.telestream.net/wirecast/
Content Delivery
            Networks




http://en.wikipedia.org/wiki/Content_delivery_network
Content Delivery
        Networks
• CDNs host your media on edge servers that
  are closer to your clients. Less strain on your
  servers and the backbones.

• Examples: Akamai, Limelight, EdgeCast

• Big media companies may have their own
  CDN

• Most already know how to do HLS
Buy or Build: Encoders
Buy or Build:
          Bandwidth

• Each HLS client will consume up to 1GB /
  hour, depending on variant bitrates, client
  bandwidth, etc.

• Many CDNs charge around $0.20/GB.
Bandwidth Costs




Prices from ScaleEngine, UStream, and LiveStream as of
                    October 2012
Self-Hosted Costs




Prices from MacMiniColo and Amazon EC2 as of March 2013
Wrap Up
Takeaways
• HLS is a very practical streaming solution

• Only part of the picture if you're multi-platform

• Encoding and serving correctly requires
  some care and expertise, and a lot of money

• Client-side software requirements are fairly
  simple
Q&A
Slides and code will be available on my blog:
        http://www.subfurther.com/blog
    http://www.slideshare.net/invalidname
                      
               @invalidname

Mais conteúdo relacionado

Destaque

Core Audio Intro (Detroit Mobile City 2013)
Core Audio Intro (Detroit Mobile City 2013)Core Audio Intro (Detroit Mobile City 2013)
Core Audio Intro (Detroit Mobile City 2013)Chris Adamson
 
Building A Streaming Apple TV App (CocoaConf San Jose, Nov 2016)
Building A Streaming Apple TV App (CocoaConf San Jose, Nov 2016)Building A Streaming Apple TV App (CocoaConf San Jose, Nov 2016)
Building A Streaming Apple TV App (CocoaConf San Jose, Nov 2016)Chris Adamson
 
Stupid Video Tricks, CocoaConf Las Vegas
Stupid Video Tricks, CocoaConf Las VegasStupid Video Tricks, CocoaConf Las Vegas
Stupid Video Tricks, CocoaConf Las VegasChris Adamson
 
Firebase: Totally Not Parse All Over Again (Unless It Is)
Firebase: Totally Not Parse All Over Again (Unless It Is)Firebase: Totally Not Parse All Over Again (Unless It Is)
Firebase: Totally Not Parse All Over Again (Unless It Is)Chris Adamson
 
Stupid Video Tricks, CocoaConf Seattle 2014
Stupid Video Tricks, CocoaConf Seattle 2014Stupid Video Tricks, CocoaConf Seattle 2014
Stupid Video Tricks, CocoaConf Seattle 2014Chris Adamson
 
Core Image: The Most Fun API You're Not Using, CocoaConf Atlanta, December 2014
Core Image: The Most Fun API You're Not Using, CocoaConf Atlanta, December 2014Core Image: The Most Fun API You're Not Using, CocoaConf Atlanta, December 2014
Core Image: The Most Fun API You're Not Using, CocoaConf Atlanta, December 2014Chris Adamson
 
Introduction to the Roku SDK
Introduction to the Roku SDKIntroduction to the Roku SDK
Introduction to the Roku SDKChris Adamson
 
Stupid Video Tricks (CocoaConf DC, March 2014)
Stupid Video Tricks (CocoaConf DC, March 2014)Stupid Video Tricks (CocoaConf DC, March 2014)
Stupid Video Tricks (CocoaConf DC, March 2014)Chris Adamson
 
Core Audio in iOS 6 (CocoaConf Portland, Oct. '12)
Core Audio in iOS 6 (CocoaConf Portland, Oct. '12)Core Audio in iOS 6 (CocoaConf Portland, Oct. '12)
Core Audio in iOS 6 (CocoaConf Portland, Oct. '12)Chris Adamson
 
Core Image: The Most Fun API You're Not Using (CocoaConf Columbus 2014)
Core Image: The Most Fun API You're Not Using (CocoaConf Columbus 2014)Core Image: The Most Fun API You're Not Using (CocoaConf Columbus 2014)
Core Image: The Most Fun API You're Not Using (CocoaConf Columbus 2014)Chris Adamson
 
Get On The Audiobus (CocoaConf Atlanta, November 2013)
Get On The Audiobus (CocoaConf Atlanta, November 2013)Get On The Audiobus (CocoaConf Atlanta, November 2013)
Get On The Audiobus (CocoaConf Atlanta, November 2013)Chris Adamson
 
iOS Media APIs (MobiDevDay Detroit, May 2013)
iOS Media APIs (MobiDevDay Detroit, May 2013)iOS Media APIs (MobiDevDay Detroit, May 2013)
iOS Media APIs (MobiDevDay Detroit, May 2013)Chris Adamson
 
Firebase: Totally Not Parse All Over Again (Unless It Is) (CocoaConf San Jose...
Firebase: Totally Not Parse All Over Again (Unless It Is) (CocoaConf San Jose...Firebase: Totally Not Parse All Over Again (Unless It Is) (CocoaConf San Jose...
Firebase: Totally Not Parse All Over Again (Unless It Is) (CocoaConf San Jose...Chris Adamson
 
Mobile Movies with HTTP Live Streaming (CocoaConf DC, March 2013)
Mobile Movies with HTTP Live Streaming (CocoaConf DC, March 2013)Mobile Movies with HTTP Live Streaming (CocoaConf DC, March 2013)
Mobile Movies with HTTP Live Streaming (CocoaConf DC, March 2013)Chris Adamson
 

Destaque (17)

Core What?
Core What?Core What?
Core What?
 
Core Audio Intro (Detroit Mobile City 2013)
Core Audio Intro (Detroit Mobile City 2013)Core Audio Intro (Detroit Mobile City 2013)
Core Audio Intro (Detroit Mobile City 2013)
 
Building A Streaming Apple TV App (CocoaConf San Jose, Nov 2016)
Building A Streaming Apple TV App (CocoaConf San Jose, Nov 2016)Building A Streaming Apple TV App (CocoaConf San Jose, Nov 2016)
Building A Streaming Apple TV App (CocoaConf San Jose, Nov 2016)
 
Stupid Video Tricks, CocoaConf Las Vegas
Stupid Video Tricks, CocoaConf Las VegasStupid Video Tricks, CocoaConf Las Vegas
Stupid Video Tricks, CocoaConf Las Vegas
 
Firebase: Totally Not Parse All Over Again (Unless It Is)
Firebase: Totally Not Parse All Over Again (Unless It Is)Firebase: Totally Not Parse All Over Again (Unless It Is)
Firebase: Totally Not Parse All Over Again (Unless It Is)
 
Stupid Video Tricks, CocoaConf Seattle 2014
Stupid Video Tricks, CocoaConf Seattle 2014Stupid Video Tricks, CocoaConf Seattle 2014
Stupid Video Tricks, CocoaConf Seattle 2014
 
Core Image: The Most Fun API You're Not Using, CocoaConf Atlanta, December 2014
Core Image: The Most Fun API You're Not Using, CocoaConf Atlanta, December 2014Core Image: The Most Fun API You're Not Using, CocoaConf Atlanta, December 2014
Core Image: The Most Fun API You're Not Using, CocoaConf Atlanta, December 2014
 
Introduction to the Roku SDK
Introduction to the Roku SDKIntroduction to the Roku SDK
Introduction to the Roku SDK
 
Stupid Video Tricks (CocoaConf DC, March 2014)
Stupid Video Tricks (CocoaConf DC, March 2014)Stupid Video Tricks (CocoaConf DC, March 2014)
Stupid Video Tricks (CocoaConf DC, March 2014)
 
Core Audio in iOS 6 (CocoaConf Portland, Oct. '12)
Core Audio in iOS 6 (CocoaConf Portland, Oct. '12)Core Audio in iOS 6 (CocoaConf Portland, Oct. '12)
Core Audio in iOS 6 (CocoaConf Portland, Oct. '12)
 
Core Image: The Most Fun API You're Not Using (CocoaConf Columbus 2014)
Core Image: The Most Fun API You're Not Using (CocoaConf Columbus 2014)Core Image: The Most Fun API You're Not Using (CocoaConf Columbus 2014)
Core Image: The Most Fun API You're Not Using (CocoaConf Columbus 2014)
 
Get On The Audiobus (CocoaConf Atlanta, November 2013)
Get On The Audiobus (CocoaConf Atlanta, November 2013)Get On The Audiobus (CocoaConf Atlanta, November 2013)
Get On The Audiobus (CocoaConf Atlanta, November 2013)
 
iOS Media APIs (MobiDevDay Detroit, May 2013)
iOS Media APIs (MobiDevDay Detroit, May 2013)iOS Media APIs (MobiDevDay Detroit, May 2013)
iOS Media APIs (MobiDevDay Detroit, May 2013)
 
Bonjour, iCloud
Bonjour, iCloudBonjour, iCloud
Bonjour, iCloud
 
Stupid Video Tricks
Stupid Video TricksStupid Video Tricks
Stupid Video Tricks
 
Firebase: Totally Not Parse All Over Again (Unless It Is) (CocoaConf San Jose...
Firebase: Totally Not Parse All Over Again (Unless It Is) (CocoaConf San Jose...Firebase: Totally Not Parse All Over Again (Unless It Is) (CocoaConf San Jose...
Firebase: Totally Not Parse All Over Again (Unless It Is) (CocoaConf San Jose...
 
Mobile Movies with HTTP Live Streaming (CocoaConf DC, March 2013)
Mobile Movies with HTTP Live Streaming (CocoaConf DC, March 2013)Mobile Movies with HTTP Live Streaming (CocoaConf DC, March 2013)
Mobile Movies with HTTP Live Streaming (CocoaConf DC, March 2013)
 

Mais de Chris Adamson

Whatever Happened to Visual Novel Anime? (AWA/Youmacon 2018)
Whatever Happened to Visual Novel Anime? (AWA/Youmacon 2018)Whatever Happened to Visual Novel Anime? (AWA/Youmacon 2018)
Whatever Happened to Visual Novel Anime? (AWA/Youmacon 2018)Chris Adamson
 
Whatever Happened to Visual Novel Anime? (JAFAX 2018)
Whatever Happened to Visual Novel Anime? (JAFAX 2018)Whatever Happened to Visual Novel Anime? (JAFAX 2018)
Whatever Happened to Visual Novel Anime? (JAFAX 2018)Chris Adamson
 
Media Frameworks Versus Swift (Swift by Northwest, October 2017)
Media Frameworks Versus Swift (Swift by Northwest, October 2017)Media Frameworks Versus Swift (Swift by Northwest, October 2017)
Media Frameworks Versus Swift (Swift by Northwest, October 2017)Chris Adamson
 
Fall Premieres: Media Frameworks in iOS 11, macOS 10.13, and tvOS 11 (CocoaCo...
Fall Premieres: Media Frameworks in iOS 11, macOS 10.13, and tvOS 11 (CocoaCo...Fall Premieres: Media Frameworks in iOS 11, macOS 10.13, and tvOS 11 (CocoaCo...
Fall Premieres: Media Frameworks in iOS 11, macOS 10.13, and tvOS 11 (CocoaCo...Chris Adamson
 
CocoaConf Chicago 2017: Media Frameworks and Swift: This Is Fine
CocoaConf Chicago 2017: Media Frameworks and Swift: This Is FineCocoaConf Chicago 2017: Media Frameworks and Swift: This Is Fine
CocoaConf Chicago 2017: Media Frameworks and Swift: This Is FineChris Adamson
 
Forward Swift 2017: Media Frameworks and Swift: This Is Fine
Forward Swift 2017: Media Frameworks and Swift: This Is FineForward Swift 2017: Media Frameworks and Swift: This Is Fine
Forward Swift 2017: Media Frameworks and Swift: This Is FineChris Adamson
 
Video Killed the Rolex Star (CocoaConf Columbus, July 2015)
Video Killed the Rolex Star (CocoaConf Columbus, July 2015)Video Killed the Rolex Star (CocoaConf Columbus, July 2015)
Video Killed the Rolex Star (CocoaConf Columbus, July 2015)Chris Adamson
 
Core Audio in iOS 6 (CocoaConf San Jose, April 2013)
Core Audio in iOS 6 (CocoaConf San Jose, April 2013) Core Audio in iOS 6 (CocoaConf San Jose, April 2013)
Core Audio in iOS 6 (CocoaConf San Jose, April 2013) Chris Adamson
 
Objective-C Is Not Java
Objective-C Is Not JavaObjective-C Is Not Java
Objective-C Is Not JavaChris Adamson
 

Mais de Chris Adamson (9)

Whatever Happened to Visual Novel Anime? (AWA/Youmacon 2018)
Whatever Happened to Visual Novel Anime? (AWA/Youmacon 2018)Whatever Happened to Visual Novel Anime? (AWA/Youmacon 2018)
Whatever Happened to Visual Novel Anime? (AWA/Youmacon 2018)
 
Whatever Happened to Visual Novel Anime? (JAFAX 2018)
Whatever Happened to Visual Novel Anime? (JAFAX 2018)Whatever Happened to Visual Novel Anime? (JAFAX 2018)
Whatever Happened to Visual Novel Anime? (JAFAX 2018)
 
Media Frameworks Versus Swift (Swift by Northwest, October 2017)
Media Frameworks Versus Swift (Swift by Northwest, October 2017)Media Frameworks Versus Swift (Swift by Northwest, October 2017)
Media Frameworks Versus Swift (Swift by Northwest, October 2017)
 
Fall Premieres: Media Frameworks in iOS 11, macOS 10.13, and tvOS 11 (CocoaCo...
Fall Premieres: Media Frameworks in iOS 11, macOS 10.13, and tvOS 11 (CocoaCo...Fall Premieres: Media Frameworks in iOS 11, macOS 10.13, and tvOS 11 (CocoaCo...
Fall Premieres: Media Frameworks in iOS 11, macOS 10.13, and tvOS 11 (CocoaCo...
 
CocoaConf Chicago 2017: Media Frameworks and Swift: This Is Fine
CocoaConf Chicago 2017: Media Frameworks and Swift: This Is FineCocoaConf Chicago 2017: Media Frameworks and Swift: This Is Fine
CocoaConf Chicago 2017: Media Frameworks and Swift: This Is Fine
 
Forward Swift 2017: Media Frameworks and Swift: This Is Fine
Forward Swift 2017: Media Frameworks and Swift: This Is FineForward Swift 2017: Media Frameworks and Swift: This Is Fine
Forward Swift 2017: Media Frameworks and Swift: This Is Fine
 
Video Killed the Rolex Star (CocoaConf Columbus, July 2015)
Video Killed the Rolex Star (CocoaConf Columbus, July 2015)Video Killed the Rolex Star (CocoaConf Columbus, July 2015)
Video Killed the Rolex Star (CocoaConf Columbus, July 2015)
 
Core Audio in iOS 6 (CocoaConf San Jose, April 2013)
Core Audio in iOS 6 (CocoaConf San Jose, April 2013) Core Audio in iOS 6 (CocoaConf San Jose, April 2013)
Core Audio in iOS 6 (CocoaConf San Jose, April 2013)
 
Objective-C Is Not Java
Objective-C Is Not JavaObjective-C Is Not Java
Objective-C Is Not Java
 

Último

Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 

Último (20)

Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 

Mobile Movies with HTTP Live Streaming (CocoaConf Chicago, March 2013)

  • 1. Mobile Movies with HTTP Live Streaming Chris Adamson • @invalidname March 9, 2013 • Chicago, IL Sides and code available on my blog: http://www.subfurther.com/blog
  • 5. ABC
  • 6. PBS
  • 14. Oh, and it can be embedded in the <video> tag
  • 15. Sounds good? How do I get in on that?
  • 16. What You'll Learn • What streaming is (and isn't) • Setting up HLS on the server • Using HLS streams in iOS apps • Real-world deployment
  • 17. HLS: What It Is (and isn't)
  • 19. Broadcast Media • Always live on some channel (a band of EM spectrum). • Every client tuned to that channel sees the same thing, at the same time. • One-way, one-to-many model.
  • 20. Internet • Generally one-to-one (host to host). • Multicast IP is an exception, but is rare on the public Internet. • Two-way communication over sockets. • Routing can take many hops, via multiple transport media (wire, wifi, cellular, etc.).
  • 22. Ye Olde Streaming • Client makes socket connection and keeps it open for duration of program. • Server sends media at playback speed (plus buffering). • Shoutcast: MP3 files served slowly over HTTP. • Typically use a special port number and special server software.
  • 23. Streaming Problems • Difficult and expensive to scale. • Special port numbers routinely blocked by businesses, ISPs, firewalls, etc. • Competing standards: Real Player, Windows Media, QuickTime (all with their own plugins). • No wonder Flash won. • Good luck holding a socket connection on cellular.
  • 24. What If… • We didn't need an always-on socket connection? • We could just run over port 80? • We could just adopt industry standards like H.264 and AAC instead of cooking custom codecs?
  • 25. HTTP Live Streaming • Serves media as a series of short flat files, via HTTP, usually on port 80. • Any web server will do. • Client software reassembles the data into a continuous media stream. • Spec does not specify contents, but Apple uses H.264 and AAC, just like all their media apps.
  • 26. Serving up HLS • Client URL is an .m3u8 playlist file • Playlist points to the media segment files
  • 27.
  • 28. The HLS playlist #EXTM3U Format: .m3u8 format, #EXT-X-TARGETDURATION:10 #EXT-X-VERSION:3 just a list of files to play #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-PLAYLIST-TYPE:VOD Metadata tags describe #EXTINF:9.975, fileSequence0.ts the contents #EXTINF:9.975, fileSequence1.ts #EXTINF:9.975, Each segment file fileSequence2.ts #EXTINF:9.9767, preceded by metadata fileSequence3.ts (e.g., duration) #EXTINF:9.975, [...] If no end tag, client #EXT-X-ENDLIST refreshes periodically
  • 29. <video src="prog_index.m3u8" width="640" height="480" controls autoplay>No video tag support</video>
  • 30. How is this better than a flat .m4v file? • Streams can provide variants for different bandwidths (as we’ll see…) • Segments make it easier to scrub into the video • Streams can be live video
  • 31. The “Live” in HLS • A playlist is a live stream if it doesn’t have an #EXT-X-ENDLIST tag • Live playlist will generally just contain the last minute or so of segments • Client will refresh playlist every minute or so, download whatever segments it doesn’t already have, queue them locally • “Live” isn’t really “live” (often a minute behind)
  • 33.
  • 34. mediafilesegmenter • Splits an A/V file into segment files, creates the .m3u8 playlist • Source must be .mov or .m4v with H.264 video, AAC audio • Output segments will be MPEG-2 Transport Stream (.ts) files, or .aac if audio-only • Segment paths are relative, use -b to prepend URL stub
  • 35. Technical Note TN2224 The following audio and video formats are supported: • Video: H.264 Baseline Profile Level 3.0 (iPhone/iPod Touch), Main Profile Level 3.1 (iPad 1,2) • Audio: HE-AAC or AAC-LC up to 48 kHz, stereo audio OR MP3 (MPEG-1 Audio Layer 3) 8 kHz to 48 kHz, stereo audio Note: iPhone 3G supports Baseline Profile Level 3.1. If your app runs on older iPhones, however, you should use H.264 Baseline Profile 3.0 for compatibility.
  • 36. Yuna:HTTP Live Streaming tests cadamson$ mediafilesegmenter -f basic source/IMG_0251.MOV Jun 24 2012 10:01:24.203: Using floating point is not backward compatible to iOS 4.1 or earlier devices Jun 24 2012 10:01:24.204: Processing file /Users/cadamson/ Documents/HTTP Live Streaming tests/source/IMG_0251.MOV Jun 24 2012 10:01:24.338: Finalized /Users/cadamson/ Documents/HTTP Live Streaming tests/basic/fileSequence0.ts Jun 24 2012 10:01:24.375: segment bitrate 3.78028e+06 is new max Jun 24 2012 10:01:24.468: Finalized /Users/cadamson/ Documents/HTTP Live Streaming tests/basic/fileSequence1.ts Jun 24 2012 10:01:24.554: Finalized /Users/cadamson/ Documents/HTTP Live Streaming tests/basic/fileSequence2.ts Jun 24 2012 10:01:24.631: Finalized /Users/cadamson/ Documents/HTTP Live Streaming tests/basic/fileSequence3.ts Jun 24 2012 10:01:24.717: Finalized /Users/cadamson/ Documents/HTTP Live Streaming tests/basic/fileSequence4.ts
  • 37. Demo
  • 38. Variant Playlists • One bitrate does not fit all: Mac on Ethernet versus iPhone on Edge. • Solution: encode your video at multiple bitrates, offer metadata in playlist about what's available, let client figure out which to use. • HLS clients automatically switch to best variant for current network conditions, switch on the fly.
  • 39. variantplaylistcreator • Creates a playlist that itself points to playlists created with mediafilesegmenter. • Each entry contains metadata describing the bitrate and encoding of the variant. • Tool takes argument pairs: file or URL of a variant .m3u8, and metadata .plist created with mediafilesegmenter -I flag • First entry in variant playlist is default; client will try this one first
  • 42. Creating variants Yuna:HTTP Live Streaming tests cadamson$ mediafilesegmenter -I -f variants/ broadband/ source/IMG_0254_Broadband.m4v Yuna:HTTP Live Streaming tests cadamson$ mediafilesegmenter -I -f variants/wifi source/IMG_0254_WiFi.m4v Yuna:HTTP Live Streaming tests cadamson$ mediafilesegmenter -I -f variants/ cellular source/IMG_0254_Cellular.m4v
  • 43. Creating variant playlist Yuna:HTTP Live Streaming tests cadamson$ variantplaylistcreator -o variants/ variants.m3u8 variants/broadband/ prog_index.m3u8 source/ IMG_0254_Broadband.plist variants/wifi/ prog_index.m3u8 source/ IMG_0254_WiFi.plist variants/cellular/ prog_index.m3u8 source/ IMG_0254_Cellular.plist
  • 44. Demo
  • 45. That's Great, but… How do we keep people from stealing our stream?
  • 46. Encryption • HLS encrypts files, not transport. • Easy to scale: still serving flat files, but now they're useless without decryption keys. • Serving the keys still needs to be secure. • Necessary, but not sufficient, for DRM.
  • 47. Encrypting a playlist Yuna:HTTP Live Streaming tests cadamson$ mediafilesegmenter - I -k keys -f encrypted/cellular source/IMG_0426_Cellular.m4v Jun 24 2012 18:59:47.115: Using new key/iv rotation period; this is not backward compatible to iOS 3.1.* or earlier devices.  Use the "-encrypt-iv=sequence" option for compatibility with those devices. Jun 24 2012 18:59:47.115: Using floating point is not backward compatible to iOS 4.1 or earlier devices Jun 24 2012 18:59:47.115: Processing file /Users/cadamson/ Documents/HTTP Live Streaming tests/source/ IMG_0426_Cellular.m4v Jun 24 2012 18:59:47.152: changing IV Jun 24 2012 18:59:47.160: Finalized /Users/cadamson/ Documents/HTTP Live Streaming tests/encrypted/cellular/ fileSequence0.ts Jun 24 2012 18:59:47.160: segment bitrate 271257 is new max
  • 50. Demo
  • 51. Captions • HLS supports CEA-608 closed captions in the MPEG-2 Transport Stream • If using file segmenter, add a closed- caption track (type 'clcp') to your source QuickTime .mov • Or use Compressor and Sonic Scenarist
  • 53. Opening an HLS stream • Provide the .m3u8 URL to MPMoviePlayerController or AVPlayer • Add the movie view or layer to your UI, customizing size or scaling if necessary
  • 54. Create an MPMoviePlayerController // create new movie player self.moviePlayer = [[MPMoviePlayerController alloc] initWithContentURL:streamURL]; [self.moviePlayer prepareToPlay]; • This is the same as playing a local file or any other URL
  • 55. Add it to your UI [self.moviePlayer.view setFrame: self.movieContainerView.bounds]; [self.movieContainerView addSubview: self.moviePlayer.view]; self.moviePlayer.scalingMode = MPMovieScalingModeFill; • Can inspect the moviePlayer's naturalSize, though it may change during playback (listen for MPMovieNaturalSizeAvailableNotification), or just setFullscreen:animated:
  • 56. MPMovieScalingMode AspectFit
  • 57. MPMovieScalingMode AspectFill
  • 59. Accessing Encrypted Streams • Media Player and AV Foundation can use NSURLCredentials that you've provided • Place credentials in NSURLCredentialStorage • Server can provide the keys securely(*) with HTTP Basic or Digest authentication, an HTTPS script, etc. * - For various values of "secure"
  • 60. Setting credentials (1) NSURLProtectionSpace *protectionSpace = [[NSURLProtectionSpace alloc] initWithHost:host port:port protocol:protocol realm:realm authenticationMethod: NSURLAuthenticationMethodDefault];
  • 61. Setting credentials (2) NSURLCredential *credential = [NSURLCredential credentialWithUser:username         password:password persistence: NSURLCredentialPersistenceForSession]; [[NSURLCredentialStorage sharedCredentialStorage] setDefaultCredential:credential forProtectionSpace:protectionSpace];
  • 63. Live Streaming • mediastreamsegmenter mostly works like the file version, but takes its input from UDP stream or a Unix pipe • Only difference is that .m3u8 file doesn't have an EXT-X-ENDLIST tag, so client reloads periodically to fetch new segments • How the heck do you create a UDP A/V stream?
  • 64. You Don't • None of Apple's tools create the required stream • This is a "third party opportunity" • Which begs the question… buy or build?
  • 65. Streaming in the Real World It's not all about iPhones…
  • 66. Streaming Clients • Mobile Devices: iPhone, iPad, iPod Touch… plus Android, Windows Mobile, etc. • Mac and Windows PCs • Over-the-top (OTT) boxes: Apple TV, Roku • Game consoles
  • 67. Let's Get Practical • What devices do you have to be on? • What devices will you get for free? • HLS is the preferred format for Roku • How to encode and deliver to the devices you need?
  • 68. HLS Alternatives • Flash still rules on the desktop/browser space, thanks in part to Mozilla's obstinance about H.264 in <video> (irony alert: H.264 is the de facto standard for Flash video) • Adobe Dynamic Streaming and Microsoft Smooth Streaming are highly similar to HLS: bitrate-adaptive streams over HTTP
  • 69. MPEG-DASH • Attempt at a standardized approach to HTTP adaptive-bitrate streaming. ISO/IEC 23009-1. http://xkcd.com/927/
  • 70. Emerging Consensus • Flash for PCs • HTTP Live Streaming for iOS • Plus whatever other devices you need to support
  • 71. Real-World HLS • Can you competently encode all your media at all the variant bitrates you need? • Do you have a way to QC all your streams? • Can you handle the server load?
  • 72. Build or Buy: Services • Provide hosting, transcoding, bandwidth • All-in-one: UStream, LiveStream, Justin.tv / Twitch.tv (all of which have iOS apps) • May provide broadcast tools (Flash applet, Telestream Wirecast, etc. • Often free with ads; you pay to go ad-free, embed on your site, etc.
  • 75. Content Delivery Networks http://en.wikipedia.org/wiki/Content_delivery_network
  • 76. Content Delivery Networks • CDNs host your media on edge servers that are closer to your clients. Less strain on your servers and the backbones. • Examples: Akamai, Limelight, EdgeCast • Big media companies may have their own CDN • Most already know how to do HLS
  • 77. Buy or Build: Encoders
  • 78. Buy or Build: Bandwidth • Each HLS client will consume up to 1GB / hour, depending on variant bitrates, client bandwidth, etc. • Many CDNs charge around $0.20/GB.
  • 79. Bandwidth Costs Prices from ScaleEngine, UStream, and LiveStream as of October 2012
  • 80. Self-Hosted Costs Prices from MacMiniColo and Amazon EC2 as of March 2013
  • 82. Takeaways • HLS is a very practical streaming solution • Only part of the picture if you're multi-platform • Encoding and serving correctly requires some care and expertise, and a lot of money • Client-side software requirements are fairly simple
  • 83. Q&A Slides and code will be available on my blog: http://www.subfurther.com/blog http://www.slideshare.net/invalidname @invalidname