Top Banner
© 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple. #WWDC14 Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names Media
343

Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Apr 27, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

© 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple.

#WWDC14

Direct Access to Video Encoding and Decoding

Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names

Media

Page 2: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Introduction

Hardware encode and decode can improve user experience

Page 3: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Introduction

Hardware encode and decode can improve user experience• Better performance

Page 4: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Introduction

Hardware encode and decode can improve user experience• Better performance

• Increased efficiency

Page 5: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Introduction

Hardware encode and decode can improve user experience• Better performance

• Increased efficiency

• Extend battery life

Page 6: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

What You Will Learn

Page 7: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

What You Will Learn

Case Studies

Page 8: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

What You Will Learn

Case Studies

1. Displaying an H.264 stream in a layer in your application

Page 9: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

What You Will Learn

Case Studies

1. Displaying an H.264 stream in a layer in your application

2. Decoding an H.264 stream and accessing the decoded buffers

Page 10: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

What You Will Learn

Case Studies

1. Displaying an H.264 stream in a layer in your application

2. Decoding an H.264 stream and accessing the decoded buffers

3. Compressing a sequence of images into a movie file

Page 11: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

What You Will Learn

Case Studies

1. Displaying an H.264 stream in a layer in your application

2. Decoding an H.264 stream and accessing the decoded buffers

3. Compressing a sequence of images into a movie file

4. Compressing a sequence of images into an H.264 stream for the network

Page 12: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

What You Will Learn

Case Studies

1. Displaying an H.264 stream in a layer in your application

2. Decoding an H.264 stream and accessing the decoded buffers

3. Compressing a sequence of images into a movie file

4. Compressing a sequence of images into an H.264 stream for the network

Using multi-pass encoding in AVFoundation and Video Toolbox

Page 13: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Media Interfaces OverviewWith a focus on video

Page 14: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVKit

Media Interfaces OverviewWith a focus on video

Page 15: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVKit

Media Interfaces OverviewWith a focus on video

AVFoundation

Page 16: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVKit

Media Interfaces OverviewWith a focus on video

AVFoundation

Video Toolbox

Page 17: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVKit

Media Interfaces OverviewWith a focus on video

AVFoundation

Video Toolbox

Core Media

Core Video

Page 18: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVKit

AV Foundation

Video Toolbox

AVKit

AV Foundation

Video Toolbox

AVFoundation

Video Toolbox

Media Interface Focus

AVKit

Core Media

Core Video

AVKit

AVFoundation

Video Toolbox

Page 19: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVKit

AV Foundation

Video Toolbox

AVKit

AV Foundation

Video Toolbox

AVFoundation

Video Toolbox

Media Interface Focus

AVFoundation • Decompress direct to display

• Compress directly to file

AVKit

Core Media

Core Video

AVKit

AVFoundation

Video Toolbox

Page 20: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVKit

AV Foundation

Video Toolbox

AVKit

AV Foundation

Video Toolbox

AVFoundation

Video Toolbox

Media Interface Focus

AVFoundation • Decompress direct to display

• Compress directly to file

Video Toolbox • Decompress to CVPixelBuffer

• Compress to CMSampleBuffer

AVKit

Core Media

Core Video

AVKit

AVFoundation

Video Toolbox

Page 21: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVKit

AV Foundation

Video Toolbox

AVKit

AV Foundation

Video Toolbox

AVFoundation

Video Toolbox

Media Interface Focus

AVKit

AVFoundation

Video Toolbox

Page 22: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVKit

AV Foundation

Video Toolbox

Hardware Codec Usage

AVKit

AVFoundation

Video Toolbox

Page 23: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

iOS OS X

Always When Available

Always When Available

Always When Available and Requested

AVKit

AV Foundation

Video Toolbox

Hardware Codec Usage

AVKit

AVFoundation

Video Toolbox

Page 24: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

The Cast of Characters

CVPixelBuffer CVPixelBufferPool pixelBufferAttributes CMTime CMVideoFormatDescription CMBlockBuffer CMSampleBuffer CMClock CMTimebase

Page 25: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

The Cast of Characters

CVPixelBuffer CVPixelBufferPool pixelBufferAttributes CMTime CMVideoFormatDescription CMBlockBuffer CMSampleBuffer CMClock CMTimebase

Page 26: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

The Cast of Characters

CVPixelBuffer CVPixelBufferPool pixelBufferAttributes CMTime CMVideoFormatDescription CMBlockBuffer CMSampleBuffer CMClock CMTimebase

Uncompressed Raster Image Buffer

Page 27: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

CVPixelBuffer

The Cast of Characters

CVPixelBuffer CVPixelBufferPool pixelBufferAttributes CMTime CMVideoFormatDescription CMBlockBuffer CMSampleBuffer CMClock CMTimebase

Uncompressed Raster Image Buffer

Page 28: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

CVPixelBufferPool

The Cast of Characters

CVPixelBuffer CVPixelBufferPool pixelBufferAttributes CMTime CMVideoFormatDescription CMBlockBuffer CMSampleBuffer CMClock CMTimebase

CVPixelBuffers

Page 29: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

The Cast of Characters

CVPixelBuffer CVPixelBufferPool pixelBufferAttributes CMTime CMVideoFormatDescription CMBlockBuffer CMSampleBuffer CMClock CMTimebase

CFDictionary of requirements; May Include: • Width/height • Pixel format type (e.g., 32BGRA, YCbCr420) • Compatibility (e.g., OpenGL ES, Core Animation)

Page 30: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

The Cast of Characters

CVPixelBuffer CVPixelBufferPool pixelBufferAttributes CMTime CMVideoFormatDescription CMBlockBuffer CMSampleBuffer CMClock CMTimebase

64-bit Time Value (Numerator) 32-bit Time Scale (Denominator)

Page 31: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

The Cast of Characters

CVPixelBuffer CVPixelBufferPool pixelBufferAttributes CMTime CMVideoFormatDescription CMBlockBuffer CMSampleBuffer CMClock CMTimebase

Width/Height !Format Type—(kCMPixelFormat_32BGRA, kCMVideoCodecType_H264,…) !Extensions—(Pixel Aspect Ratio, Color Space,…)

Page 32: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

The Cast of Characters

CVPixelBuffer CVPixelBufferPool pixelBufferAttributes CMTime CMVideoFormatDescription CMBlockBuffer CMSampleBuffer CMClock CMTimebase

CMBlockBuffer

Page 33: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

The Cast of Characters

CVPixelBuffer CVPixelBufferPool pixelBufferAttributes CMTime CMVideoFormatDescription CMBlockBuffer CMSampleBuffer CMClock CMTimebase

Page 34: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

The Cast of Characters

CVPixelBuffer CVPixelBufferPool pixelBufferAttributes CMTime CMVideoFormatDescription CMBlockBuffer CMSampleBuffer CMClock CMTimebase

CMSampleBuffer CMSampleBuffer

Uncompressed Raster ImageCompressed Video Frame

or

Page 35: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

The Cast of Characters

CVPixelBuffer CVPixelBufferPool pixelBufferAttributes CMTime CMVideoFormatDescription CMBlockBuffer CMSampleBuffer CMClock CMTimebase

CMSampleBuffer CMSampleBuffer

Uncompressed Raster ImageCompressed Video Frame

or

CMTime CMTime

Page 36: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

The Cast of Characters

CVPixelBuffer CVPixelBufferPool pixelBufferAttributes CMTime CMVideoFormatDescription CMBlockBuffer CMSampleBuffer CMClock CMTimebase

CMSampleBuffer CMSampleBuffer

Uncompressed Raster ImageCompressed Video Frame

or

CMTime CMTime

CMVideoFormatDesc CMVideoFormatDesc

Page 37: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

The Cast of Characters

CVPixelBuffer CVPixelBufferPool pixelBufferAttributes CMTime CMVideoFormatDescription CMBlockBuffer CMSampleBuffer CMClock CMTimebase

CMSampleBuffer CMSampleBuffer

Uncompressed Raster ImageCompressed Video Frame

or

CMBlockBuffer

CMTime CMTime

CMVideoFormatDesc CMVideoFormatDesc

Page 38: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

The Cast of Characters

CVPixelBuffer CVPixelBufferPool pixelBufferAttributes CMTime CMVideoFormatDescription CMBlockBuffer CMSampleBuffer CMClock CMTimebase

CMSampleBuffer CMSampleBuffer

Uncompressed Raster ImageCompressed Video Frame

or

CMBlockBuffer

CMTime CMTime

CMVideoFormatDesc CMVideoFormatDesc

CVPixelBuffer

Page 39: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

CMClock

The Cast of Characters

CVPixelBuffer CVPixelBufferPool pixelBufferAttributes CMTime CMVideoFormatDescription CMBlockBuffer CMSampleBuffer CMClock CMTimebase

Page 40: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

CMClock

The Cast of Characters

Wraps a source of time

A clock’s time always increases CMClockGetHostTimeClock() wraps mach_absolute_time()

CMClock

Page 41: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

The Cast of Characters

CVPixelBuffer CVPixelBufferPool pixelBufferAttributes CMTime CMVideoFormatDescription CMBlockBuffer CMSampleBuffer CMClock CMTimebase

CMClock

Page 42: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

CMTimebase

Provides:

The Cast of Characters

A controlled view onto a CMClockCMClock

Page 43: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

CMTimebase

• Time mappingProvides:

The Cast of Characters

A controlled view onto a CMClockCMTimebaseSetTime(timebase, kCMTimeZero); CMClock

Page 44: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

CMTimebase

• Time mappingProvides:

• Rate control

CMClock

The Cast of Characters

A controlled view onto a CMClockCMTimebaseSetTime(timebase, kCMTimeZero);CMTimebaseSetRate(timebase, 1.0);

CMClock

Page 45: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Case One Displaying video from a network stream

Page 46: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Case One Overview

Network

Page 47: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Case One Overview

Compressed Video Samples

H.264 H.264 H.264

Network

Page 48: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Case One Overview

Compressed Video Samples

H.264 H.264 H.264

Network

AVSampleBufferDisplayLayer

Page 49: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVSampleBufferDisplayLayerA closer look

AVSampleBufferDisplayLayer

Page 50: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVSampleBufferDisplayLayerA closer look

H.264 H.264 H.264

CMSampleBuffersAVSampleBufferDisplayLayer

Page 51: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVSampleBufferDisplayLayerA closer look

H.264 H.264 H.264

CMSampleBuffersAVSampleBufferDisplayLayer

Video Decoder

Page 52: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVSampleBufferDisplayLayerA closer look

H.264 H.264 H.264

CMSampleBuffersAVSampleBufferDisplayLayer

CVPixelBuffers

Video Decoder

Page 53: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVSampleBufferDisplayLayerA closer look

H.264 H.264 H.264

CMSampleBuffersAVSampleBufferDisplayLayer

CVPixelBuffers

Video Decoder

Page 54: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVSampleBufferDisplayLayer Input

H.264 H.264 H.264

Elementary Stream

Page 55: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVSampleBufferDisplayLayer Input

H.264 H.264 H.264

Elementary Stream

H.264 H.264 H.264

CMSampleBuffers

Page 56: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVSampleBufferDisplayLayer Input

H.264 H.264 H.264

Elementary Stream

H.264 H.264 H.264

CMSampleBuffers

processing

Page 57: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

H.264 Syntax

Elementary Stream MPEG-4

Page 58: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

H.264 Syntax

Elementary Stream MPEG-4

Page 59: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

H.264 SyntaxNetwork Abstraction Layer (NAL)

Page 60: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

H.264 stream consists of a sequence of NAL Units (NALUs)

H.264 SyntaxNetwork Abstraction Layer (NAL)

NALUNALUNALUNALUNALUNALUNALUNALUNALUNALU

Page 61: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

H.264 stream consists of a sequence of NAL Units (NALUs)

NAL Units may contain

H.264 SyntaxNetwork Abstraction Layer (NAL)

NALUNALUNALUNALUNALUNALUNALUNALUNALUNALU

Page 62: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

H.264 stream consists of a sequence of NAL Units (NALUs)

NAL Units may contain• Video frame (or slice of video frame)

H.264 SyntaxNetwork Abstraction Layer (NAL)

NALUNALUNALUNALUNALUNALUNALUNALUNALUNALU

Page 63: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

H.264 stream consists of a sequence of NAL Units (NALUs)

NAL Units may contain• Video frame (or slice of video frame)

H.264 SyntaxNetwork Abstraction Layer (NAL)

P FrameB FrameB FrameP Frame

NALUNALUNALUNALUNALUNALUNALUNALUNALUNALU

Page 64: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

H.264 stream consists of a sequence of NAL Units (NALUs)

NAL Units may contain• Video frame (or slice of video frame)

P FrameI Frame

H.264 SyntaxNetwork Abstraction Layer (NAL)

P FrameB FrameB FrameP Frame

NALUNALUNALUNALUNALUNALUNALUNALUNALUNALU

Page 65: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

H.264 stream consists of a sequence of NAL Units (NALUs)

NAL Units may contain• Video frame (or slice of video frame)

• H.264 parameter sets

- Sequence Parameter Set (SPS) and Picture Parameter Set (PPS)

P FrameI Frame

H.264 SyntaxNetwork Abstraction Layer (NAL)

P FrameB FrameB FrameP FramePPSSPS

NALUNALUNALUNALUNALUNALUNALUNALUNALUNALU

Page 66: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

H.264 SyntaxParameter sets: SPS and PPS

MPEG-4Elementary Stream

Page 67: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Parameter Sets in Stream

SPS

PPS

I frame

P frame

B frame

B frame…

H.264 SyntaxParameter sets: SPS and PPS

MPEG-4Elementary Stream

Page 68: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Parameter Sets in Stream

SPS

PPS

I frame

P frame

B frame

B frame…

H.264 SyntaxParameter sets: SPS and PPS

Parameter Sets in Format Description

SPS

PPS

CMVideoFormatDescription

I frame

P frame

B frame

B frame…

MPEG-4Elementary Stream

Page 69: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

H.264 SyntaxConversion

MPEG-4Elementary Stream

Page 70: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

H.264 SyntaxConversion

SPS

PPS

MPEG-4Elementary Stream

Page 71: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

H.264 SyntaxConversion

SPS

PPS

CMVideoFormatDescription

SPS

PPS

MPEG-4Elementary Stream

Page 72: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

H.264 SyntaxConversion

SPS

PPS

CMVideoFormatDescription

SPS

PPS

CMVideoFormatDescriptionCreateFromH264ParameterSets

MPEG-4Elementary Stream

Page 73: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

H.264 SyntaxNAL Unit headers

MPEG-4Elementary Stream

Page 74: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

H.264 SyntaxNAL Unit headers

MPEG-4Elementary Stream

NAL Unit

00 00 01

3- or 4-Byte Header: Start Code

Page 75: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

H.264 SyntaxNAL Unit headers

MPEG-4Elementary Stream

NAL Unit

00 00 01

4-Byte Header: Length

NAL Unit(32768 bytes)

00 00 80 00

3- or 4-Byte Header: Start Code

Page 76: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

NAL Unit

00 00 01

Building a CMSampleBufferNAL Unit conversion

Page 77: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

NAL Unit(32768 bytes)

00 00 80 00

Building a CMSampleBufferNAL Unit conversion

Page 78: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

CMBlockBuffer

NAL Unit(32768 bytes)

00 00 80 00

Building a CMSampleBufferNAL Unit conversion

Page 79: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

CMBlockBuffer

NAL Unit(32768 bytes)

00 00 80 00

Building a CMSampleBufferNAL Unit conversion

SPS

PPS

CMVideoFormatDesc

+

Page 80: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

CMBlockBuffer

NAL Unit(32768 bytes)

00 00 80 00

Building a CMSampleBufferNAL Unit conversion

SPS

PPS

CMVideoFormatDesc

+ CMTime+

Page 81: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

CMBlockBuffer

NAL Unit(32768 bytes)

00 00 80 00

Building a CMSampleBufferNAL Unit conversion

SPS

PPS

CMVideoFormatDesc

+ CMTime+

CMSampleBuffer

CMTime

CMVideoFormatDesc

CMBlockBuffer

=

Page 82: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

CMBlockBuffer

NAL Unit(32768 bytes)

00 00 80 00

Building a CMSampleBufferNAL Unit conversion

SPS

PPS

CMVideoFormatDesc

+ CMTime+

CMSampleBuffer

CMTime

CMVideoFormatDesc

CMBlockBuffer

=

CMSampleBufferCreate

Page 83: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVSampleBufferDisplayLayer and Time

AVSampleBufferDisplayLayer

Video Decoder

Page 84: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVSampleBufferDisplayLayer and Time

H.264 !

5.50s

H.264 !

5.40s

H.264 !

5.30s

CMSampleBuffersAVSampleBufferDisplayLayer

Video Decoder

Page 85: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVSampleBufferDisplayLayer and Time

H.264 !

5.50s

H.264 !

5.40s

H.264 !

5.30s

CMSampleBuffersAVSampleBufferDisplayLayer

CVPixelBuffers

!!

5.10s

!!

5.20s

!!

5.00s

Video Decoder

Page 86: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

hostTime

AVSampleBufferDisplayLayer and Time

H.264 !

5.50s

H.264 !

5.40s

H.264 !

5.30s

CMSampleBuffersAVSampleBufferDisplayLayer

CVPixelBuffers

!!

5.10s

!!

5.20s

!!

5.00s

Video Decoder

Page 87: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

CMTimebase

AVSampleBufferDisplayLayer and Time

sbDisplayLayer.controlTimebase = CMTimebaseCreateWithMasterClock(CMClockGetHostTimeClock()); CMTimebaseSetTime(sbDisplayLayer.controlTimebase, CMTimeMake(5, 1)); CMTimebaseSetRate(sbDisplayLayer.controlTimebase, 1.0);

H.264 !

5.50s

H.264 !

5.40s

H.264 !

5.30s

CMSampleBuffersAVSampleBufferDisplayLayer

CVPixelBuffers

!!

5.10s

!!

5.20s

!!

5.00s

Video Decoder

Page 88: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Feeding AVSampleBufferDisplayLayerTwo scenarios

Page 89: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Feeding AVSampleBufferDisplayLayerTwo scenarios

AVSampleBufferDisplayLayer

Periodic Source

Page 90: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Feeding AVSampleBufferDisplayLayerTwo scenarios

AVSampleBufferDisplayLayer

Periodic Source

AVSampleBufferDisplayLayer

Unconstrained Source

Page 91: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Feeding AVSampleBufferDisplayLayerPeriodic source

AVSampleBufferDisplayLayer

Page 92: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

!

!

!

Frame arrival corresponds to display frequency

Enqueue with: [sbDisplayLayer enqueueSampleBuffer:sbuf];

Feeding AVSampleBufferDisplayLayerPeriodic source

AVSampleBufferDisplayLayer

Page 93: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Feeding AVSampleBufferDisplayLayerUnconstrained source

AVSampleBufferDisplayLayer

Page 94: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

!

!

!

!

AVSampleBufferDisplayLayer throttles input: [sbDisplayLayer requestMediaDataWhenReadyOnQueue:dispatchQueue usingBlock:^{ while ([sbDisplayLayer isReadyForMoreMediaData]) { CMSampleBuffer sbuf = copyNextSBuf(); [sbDisplayLayer enqueueSampleBuffer:sbuf]; CFRelease(sbuf); } }];

Feeding AVSampleBufferDisplayLayerUnconstrained source

AVSampleBufferDisplayLayer

Page 95: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

!

!

!

!

AVSampleBufferDisplayLayer throttles input: [sbDisplayLayer requestMediaDataWhenReadyOnQueue:dispatchQueue usingBlock:^{ while ([sbDisplayLayer isReadyForMoreMediaData]) { CMSampleBuffer sbuf = copyNextSBuf(); [sbDisplayLayer enqueueSampleBuffer:sbuf]; CFRelease(sbuf); } }];

Feeding AVSampleBufferDisplayLayerUnconstrained source

AVSampleBufferDisplayLayer

Page 96: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

!

!

!

!

AVSampleBufferDisplayLayer throttles input: [sbDisplayLayer requestMediaDataWhenReadyOnQueue:dispatchQueue usingBlock:^{ while ([sbDisplayLayer isReadyForMoreMediaData]) { CMSampleBuffer sbuf = copyNextSBuf(); [sbDisplayLayer enqueueSampleBuffer:sbuf]; CFRelease(sbuf); } }];

Feeding AVSampleBufferDisplayLayerUnconstrained source

AVSampleBufferDisplayLayer

Page 97: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

!

!

!

!

AVSampleBufferDisplayLayer throttles input: [sbDisplayLayer requestMediaDataWhenReadyOnQueue:dispatchQueue usingBlock:^{ while ([sbDisplayLayer isReadyForMoreMediaData]) { CMSampleBuffer sbuf = copyNextSBuf(); [sbDisplayLayer enqueueSampleBuffer:sbuf]; CFRelease(sbuf); } }];

Feeding AVSampleBufferDisplayLayerUnconstrained source

AVSampleBufferDisplayLayer

Page 98: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVSampleBufferDisplayLayer Summary

H.264

CMSampleBuffers

H.264

Elementary Stream

AVSampleBufferDisplayLayer

CMTimebase

Page 99: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Creation of AVSampleBufferDisplayLayer

AVSampleBufferDisplayLayer Summary

H.264

CMSampleBuffers

H.264

Elementary Stream

AVSampleBufferDisplayLayer

CMTimebase

Page 100: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Creation of AVSampleBufferDisplayLayer

Converting an H.264 elementary stream into CMSampleBuffers

AVSampleBufferDisplayLayer Summary

H.264

CMSampleBuffers

H.264

Elementary Stream

AVSampleBufferDisplayLayer

CMTimebase

Page 101: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Creation of AVSampleBufferDisplayLayer

Converting an H.264 elementary stream into CMSampleBuffers

Providing CMSampleBuffers to AVSampleBufferDisplayLayer

AVSampleBufferDisplayLayer Summary

H.264

CMSampleBuffers

H.264

Elementary Stream

AVSampleBufferDisplayLayer

CMTimebase

Page 102: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Creation of AVSampleBufferDisplayLayer

Converting an H.264 elementary stream into CMSampleBuffers

Providing CMSampleBuffers to AVSampleBufferDisplayLayer

Using a custom CMTimebase with AVSampleBufferDisplayLayer

AVSampleBufferDisplayLayer Summary

H.264

CMSampleBuffers

H.264

Elementary Stream

AVSampleBufferDisplayLayer

CMTimebase

Page 103: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Case TwoGetting CVPixelBuffers from a compressed stream

Page 104: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVSampleBufferDisplayLayer

Page 105: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVSampleBufferDisplayLayer

H.264 H.264 H.264

CMSampleBuffersAVSampleBufferDisplayLayer

CVPixelBuffers

Video Decoder

Page 106: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTDecompressionSessionGetting access to the decoder

Video Decoder

Page 107: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTDecompressionSessionGetting access to the decoder

VTDecompressionSession

Video Decoder

Page 108: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTDecompressionSessionGetting access to the decoder

H.264 H.264 H.264

CMSampleBuffers

VTDecompressionSession

Video Decoder

Page 109: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTDecompressionSessionGetting access to the decoder

H.264 H.264 H.264

CMSampleBuffers

VTDecompressionSession

Video Decoder

CVPixelBuffers

Page 110: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTDecompressionSessionGetting access to the decoder

H.264 H.264 H.264

CMSampleBuffers

VTDecompressionSession

Video Decoder

OutputCallback

CVPixelBuffers

Page 111: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Creating a VTDecompressionSession

What you need

Page 112: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Creating a VTDecompressionSession

What you need• Description of source data—CMVideoFormatDescription

Page 113: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Creating a VTDecompressionSession

What you need• Description of source data—CMVideoFormatDescription

• Requirements for output buffers—pixelBufferAttributes

Page 114: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Creating a VTDecompressionSession

What you need• Description of source data—CMVideoFormatDescription

• Requirements for output buffers—pixelBufferAttributes

• A VTDecompressionOutputCallback

Page 115: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Requirements for Output CVPixelBuffersCreating a pixelBufferAttributes dictionary

Page 116: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Example: OpenGL ES render pipeline

Requirements for Output CVPixelBuffersCreating a pixelBufferAttributes dictionary

VTDecompressionSession

Page 117: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Example: OpenGL ES render pipeline!

!

!

!

!

To require OpenGL ES compatibility— NSDictionary *destinationImageBufferAttributes = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithBool:YES],(id)kCVPixelBufferOpenGLESCompatibilityKey, nil];

Requirements for Output CVPixelBuffersCreating a pixelBufferAttributes dictionary

VTDecompressionSession

Page 118: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Example: OpenGL ES render pipeline!

!

!

!

!

To require OpenGL ES compatibility— NSDictionary *destinationImageBufferAttributes = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithBool:YES],(id)kCVPixelBufferOpenGLESCompatibilityKey, nil];

Requirements for Output CVPixelBuffersCreating a pixelBufferAttributes dictionary

VTDecompressionSession

Page 119: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Optimizing OutputDo not over specify

Page 120: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

kCVPixelBufferOpenGLESCompatibilityKey requested

Optimizing OutputDo not over specify

Page 121: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

kCVPixelBufferOpenGLESCompatibilityKey requested

Optimizing OutputDo not over specify

VTDecompressionSession

DecoderYUV

YUV

Page 122: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

kCVPixelBufferOpenGLESCompatibilityKey and ‘BGRA’ pixel format required

kCVPixelBufferOpenGLESCompatibilityKey requested

Optimizing OutputDo not over specify

VTDecompressionSession

DecoderYUV

YUV

Page 123: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTDecompressionSession

DecoderYUV

kCVPixelBufferOpenGLESCompatibilityKey and ‘BGRA’ pixel format required

kCVPixelBufferOpenGLESCompatibilityKey requested

Optimizing OutputDo not over specify

VTDecompressionSession

DecoderYUV

YUV

BGRA

Page 124: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTDecompressionSession

DecoderYUV

VTDecompressionSession

DecoderYUV BGRA

kCVPixelBufferOpenGLESCompatibilityKey and ‘BGRA’ pixel format required

kCVPixelBufferOpenGLESCompatibilityKey requested

Optimizing OutputDo not over specify

VTDecompressionSession

DecoderYUV

YUV

BGRA

Page 125: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTDecompressionSession

DecoderYUV BGRA

kCVPixelBufferOpenGLESCompatibilityKey and ‘BGRA’ pixel format required

kCVPixelBufferOpenGLESCompatibilityKey requested

Optimizing OutputDo not over specify

VTDecompressionSession

DecoderYUV

YUV

BGRA

Page 126: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTDecompressionOutputCallback

Page 127: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTDecompressionOutputCallback

OutputCallbackVTDecompressionSession

Page 128: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTDecompressionOutputCallback

OutputCallbackVTDecompressionSession

VTDecompressionOutputCallback receives

Page 129: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTDecompressionOutputCallback

OutputCallbackVTDecompressionSession

VTDecompressionOutputCallback receives• Output CVPixelBuffer

Page 130: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTDecompressionOutputCallback

OutputCallbackVTDecompressionSession

VTDecompressionOutputCallback receives• Output CVPixelBuffer

• Presentation time stamp

Page 131: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTDecompressionOutputCallback

OutputCallbackVTDecompressionSession

VTDecompressionOutputCallback receives• Output CVPixelBuffer

• Presentation time stamp

• Decompression error codes

Page 132: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTDecompressionOutputCallback

OutputCallbackVTDecompressionSession

VTDecompressionOutputCallback receives• Output CVPixelBuffer

• Presentation time stamp

• Decompression error codes

• Dropped frames

Page 133: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Feeding VTDecompressionSession

VTDecompressionSessionH.264 H.264 H.264

CMSampleBuffers

Page 134: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Feeding VTDecompressionSession

VTDecompressionSessionH.264 H.264 H.264

CMSampleBuffers

err = VTDecompressionSessionDecodeFrame( session, sbuf, inFlags, refCon, &outFlags );

Page 135: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Feeding VTDecompressionSession

VTDecompressionSessionH.264 H.264 H.264

CMSampleBuffers

err = VTDecompressionSessionDecodeFrame( session, sbuf, inFlags, refCon, &outFlags );

Wants CMSampleBuffers

Page 136: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Feeding VTDecompressionSession

VTDecompressionSessionH.264 H.264 H.264

CMSampleBuffers

err = VTDecompressionSessionDecodeFrame( session, sbuf, inFlags, refCon, &outFlags );

Wants CMSampleBuffers

Decode order

Page 137: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Feeding VTDecompressionSession

VTDecompressionSessionH.264 H.264 H.264

CMSampleBuffers

err = VTDecompressionSessionDecodeFrame( session, sbuf, inFlags, refCon, &outFlags );

Wants CMSampleBuffers

Decode order

Synchronous by default

Page 138: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Feeding VTDecompressionSession

VTDecompressionSessionH.264 H.264 H.264

CMSampleBuffers

err = VTDecompressionSessionDecodeFrame( session, sbuf, inFlags, refCon, &outFlags );

Wants CMSampleBuffers

Decode order

Synchronous by default

Set kVTDecodeFrame_EnableAsynchronousDecompression for async

Page 139: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Async Decompression

Page 140: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Async Decompression

Decoder blocks when full—Decoder back pressure

Page 141: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Async Decompression

Decoder blocks when full—Decoder back pressure

Finish async frames with VTDecompressionSessionWaitForAsynchronousFrames

Page 142: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Changing CMVideoFormatDescription

Page 143: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Changing CMVideoFormatDescription

SPS1

PPS1

formatDesc1

I frame

P frame

B frame

B frame…

Page 144: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Changing CMVideoFormatDescription

SPS1

PPS1

formatDesc1

I frame

P frame

B frame

B frame…

err = VTDecompressionSessionCreate( kCFAllocatorDefault, formatDesc1, … , &session );

Page 145: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Changing CMVideoFormatDescription

SPS1

PPS1

formatDesc1

I frame

P frame

B frame

B frame…

SPS2

PPS2

formatDesc2

I frame

P frame

B frame

B frame…

err = VTDecompressionSessionCreate( kCFAllocatorDefault, formatDesc1, … , &session );

Page 146: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Changing CMVideoFormatDescription

SPS1

PPS1

formatDesc1

I frame

P frame

B frame

B frame…

SPS2

PPS2

formatDesc2

I frame

P frame

B frame

B frame…

err = VTDecompressionSessionCreate( kCFAllocatorDefault, formatDesc1, … , &session );Boolean needNewSession = ( VTDecompressionSessionCanAcceptFormatDescription( session, formatDesc2 ) == false);

Page 147: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTDecompressionSession Summary

Page 148: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTDecompressionSession Summary

Creation of VTDecompressionSession

Page 149: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTDecompressionSession Summary

Creation of VTDecompressionSession

Make optimal decisions about output requirements

Page 150: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTDecompressionSession Summary

Creation of VTDecompressionSession

Make optimal decisions about output requirements

Run your VTDecompressionSession synchronously and asynchronously

Page 151: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTDecompressionSession Summary

Creation of VTDecompressionSession

Make optimal decisions about output requirements

Run your VTDecompressionSession synchronously and asynchronously

Handling changes in CMVideoFormatDescription

Page 152: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Case ThreeCompressing CVPixelBuffers into a file

Page 153: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Compressing Video into a File

Page 154: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Compressing Video into a File

CVPixelBuffers

Page 155: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Compressing Video into a File

Movie FileCVPixelBuffers

Page 156: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Compressing Video into a File

AVAssetWriter

Movie FileCVPixelBuffers

Page 157: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Compressing Video into a File

AVAssetWriter

Video Encoder

Movie FileCVPixelBuffers

Page 158: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Compressing Video into a File

AVAssetWriter

Video Encoder H.264

CMSampleBuffersMovie File

CVPixelBuffers

Page 159: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Compressing Video into a File

AVAssetWriter

Video Encoder

FileWriterH.264

CMSampleBuffersMovie File

CVPixelBuffers

Page 160: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

For More Details on AVAssetWriter

WWDC 2013—Moving to AVKit and AVFoundation

WWDC 2011—Working with Media in AVFoundation

Page 161: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Case FourCompressing CVPixelBuffers for the network

Page 162: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Back Inside AVAssetWriter

AVAssetWriter

Video Encoder

FileWriterH.264

CMSampleBuffersMovie File

CVPixelBuffers

Page 163: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTCompressionSessionGetting access to the encoder

Page 164: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTCompressionSessionGetting access to the encoder

Video Encoder

Page 165: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTCompressionSessionGetting access to the encoder

VTCompressionSession

Video Encoder

Page 166: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

CVPixelBuffers

VTCompressionSessionGetting access to the encoder

VTCompressionSession

Video Encoder

Page 167: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

CVPixelBuffers

VTCompressionSessionGetting access to the encoder

VTCompressionSession

Video Encoder

H.264 H.264 H.264

CMSampleBuffers

Page 168: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

CVPixelBuffers

VTCompressionSessionGetting access to the encoder

VTCompressionSession

Video Encoder

H.264 H.264 H.264

CMSampleBuffers

Page 169: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Creating a VTCompressionSession

What you need:

Page 170: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Creating a VTCompressionSession

What you need:• Dimensions for compressed output

Page 171: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Creating a VTCompressionSession

What you need:• Dimensions for compressed output

• Format for compression (e.g., kCMVideoCodecType_H264)

Page 172: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Creating a VTCompressionSession

What you need:• Dimensions for compressed output

• Format for compression (e.g., kCMVideoCodecType_H264)

• PixelBufferAttributes describing source buffer requirements (optional)

Page 173: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Creating a VTCompressionSession

What you need:• Dimensions for compressed output

• Format for compression (e.g., kCMVideoCodecType_H264)

• PixelBufferAttributes describing source buffer requirements (optional)

• A VTCompressionOutputCallback

Page 174: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Configuring VTCompressionSession

Page 175: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Configuring VTCompressionSession

Configure compression using VTSessionSetProperty() calls

Page 176: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Configuring VTCompressionSession

Configure compression using VTSessionSetProperty() callskVTCompressionPropertyKey_AllowFrameReordering

Page 177: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Configuring VTCompressionSession

Configure compression using VTSessionSetProperty() callskVTCompressionPropertyKey_AllowFrameReorderingkVTCompressionPropertyKey_AverageBitRate

Page 178: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Configuring VTCompressionSession

Configure compression using VTSessionSetProperty() callskVTCompressionPropertyKey_AllowFrameReorderingkVTCompressionPropertyKey_AverageBitRatekVTCompressionPropertyKey_H264EntropyMode

Page 179: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Configuring VTCompressionSession

Configure compression using VTSessionSetProperty() callskVTCompressionPropertyKey_AllowFrameReorderingkVTCompressionPropertyKey_AverageBitRatekVTCompressionPropertyKey_H264EntropyMode kVTH264EntropyMode_CAVLC/kVTH264EntropyMode_CABAC

Page 180: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Configuring VTCompressionSession

Configure compression using VTSessionSetProperty() callskVTCompressionPropertyKey_AllowFrameReorderingkVTCompressionPropertyKey_AverageBitRatekVTCompressionPropertyKey_H264EntropyMode kVTH264EntropyMode_CAVLC/kVTH264EntropyMode_CABACkVTCompressionPropertyKey_RealTime

Page 181: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Configuring VTCompressionSession

Configure compression using VTSessionSetProperty() callskVTCompressionPropertyKey_AllowFrameReorderingkVTCompressionPropertyKey_AverageBitRatekVTCompressionPropertyKey_H264EntropyMode kVTH264EntropyMode_CAVLC/kVTH264EntropyMode_CABACkVTCompressionPropertyKey_RealTimekVTCompressionPropertyKey_ProfileLevel

Page 182: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Configuring VTCompressionSession

Configure compression using VTSessionSetProperty() callskVTCompressionPropertyKey_AllowFrameReorderingkVTCompressionPropertyKey_AverageBitRatekVTCompressionPropertyKey_H264EntropyMode kVTH264EntropyMode_CAVLC/kVTH264EntropyMode_CABACkVTCompressionPropertyKey_RealTimekVTCompressionPropertyKey_ProfileLevel for example: kVTProfileLevel_H264_Main_AutoLevel

Page 183: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Configuring VTCompressionSession

Configure compression using VTSessionSetProperty() callskVTCompressionPropertyKey_AllowFrameReorderingkVTCompressionPropertyKey_AverageBitRatekVTCompressionPropertyKey_H264EntropyMode kVTH264EntropyMode_CAVLC/kVTH264EntropyMode_CABACkVTCompressionPropertyKey_RealTimekVTCompressionPropertyKey_ProfileLevel for example: kVTProfileLevel_H264_Main_AutoLevel

…and many more

Page 184: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Feeding VTCompressionSession

VTCompressionSession

Page 185: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Feeding VTCompressionSession

err = VTCompressionSessionEncodeFrame( session, pixelBuffer, presentationTime, … );

VTCompressionSession

Page 186: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Feeding VTCompressionSession

err = VTCompressionSessionEncodeFrame( session, pixelBuffer, presentationTime, … );

• Source frames as CVPixelBuffers with presentation time

VTCompressionSession

Page 187: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Feeding VTCompressionSession

err = VTCompressionSessionEncodeFrame( session, pixelBuffer, presentationTime, … );

• Source frames as CVPixelBuffers with presentation time

• Presentation order

VTCompressionSession

Page 188: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Feeding VTCompressionSession

err = VTCompressionSessionEncodeFrame( session, pixelBuffer, presentationTime, … );

• Source frames as CVPixelBuffers with presentation time

• Presentation order

• Output may be delayed

VTCompressionSession

Page 189: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Feeding VTCompressionSession

err = VTCompressionSessionEncodeFrame( session, pixelBuffer, presentationTime, … );

• Source frames as CVPixelBuffers with presentation time

• Presentation order

• Output may be delayed

• Use VTCompressionSessionCompleteFrames() to finish pending frames

VTCompressionSession

Page 190: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTCompressionOutputCallback

VTCompressionSession

Page 191: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTCompressionOutputCallback

H.264 OutputCallbackVTCompressionSession

Page 192: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTCompressionOutputCallback

VTCompressionOutputCallback:

H.264 OutputCallbackVTCompressionSession

Page 193: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTCompressionOutputCallback

VTCompressionOutputCallback:• Output CMSampleBuffer

H.264 OutputCallbackVTCompressionSession

Page 194: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTCompressionOutputCallback

VTCompressionOutputCallback:• Output CMSampleBuffer

• Compression error codes

H.264 OutputCallbackVTCompressionSession

Page 195: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTCompressionOutputCallback

VTCompressionOutputCallback:• Output CMSampleBuffer

• Compression error codes

• Dropped frames

H.264 OutputCallbackVTCompressionSession

Page 196: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTCompressionOutputCallback

VTCompressionOutputCallback:• Output CMSampleBuffer

• Compression error codes

• Dropped frames

• Frames emitted in decode order

H.264 OutputCallbackVTCompressionSession

Page 197: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

CMSampleBuffers and Elementary Streams

Page 198: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

CMSampleBuffers and Elementary Streams

H.264 H.264 H.264

CMSampleBuffers

MPEG-4

Page 199: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

CMSampleBuffers and Elementary Streams

H.264 H.264 H.264

CMSampleBuffers

Elementary StreamMPEG-4

Page 200: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

CMSampleBuffers and Elementary Streams

H.264 H.264 H.264

CMSampleBuffers

Elementary StreamMPEG-4

Processing

Page 201: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

H.264 SyntaxConversion of parameter sets

MPEG-4 Elementary Stream

Page 202: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

H.264 SyntaxConversion of parameter sets

SPS

PPS

CMVideoFormatDescription

MPEG-4 Elementary Stream

Page 203: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

H.264 SyntaxConversion of parameter sets

SPS

PPS

CMVideoFormatDescription

SPS

PPS

MPEG-4 Elementary Stream

Page 204: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

H.264 SyntaxConversion of parameter sets

CMVideoFormatDescriptionGetH264ParameterSetAtIndex

SPS

PPS

CMVideoFormatDescription

SPS

PPS

MPEG-4 Elementary Stream

Page 205: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

H.264 SyntaxNAL Unit headers

MPEG-4 Elementary Stream

Page 206: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

H.264 SyntaxNAL Unit headers

MPEG-4

I Frame(32768 bytes)

00 00 80 00

4-Byte Header: Length

Elementary Stream

Page 207: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

H.264 SyntaxNAL Unit headers

MPEG-4

3- or 4-Byte Header: Start Code

I Frame

00 00 01

I Frame(32768 bytes)

00 00 80 00

4-Byte Header: Length

Elementary Stream

Page 208: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTCompressionSession Summary

Page 209: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTCompressionSession Summary

Creation of VTCompressionSession

Page 210: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTCompressionSession Summary

Creation of VTCompressionSession

Configuring the compressor

Page 211: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTCompressionSession Summary

Creation of VTCompressionSession

Configuring the compressor

Providing CVPixelBuffers to VTCompressionSession

Page 212: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTCompressionSession Summary

Creation of VTCompressionSession

Configuring the compressor

Providing CVPixelBuffers to VTCompressionSession

Converting CMSampleBuffers into H.264 elementary stream packaging

Page 213: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Multi-Pass Encoding

Erik Turnquist Core Media Engineer

Page 214: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Quality vs. Bit Rate

Page 215: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Untitled 1Quality Bit Rate

High

Low

Medium

Page 216: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

BuildQuality Bit Rate

High

Low

Medium

Page 217: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

QualityQuality Bit Rate

High

Low

Medium

Page 218: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

BuildQuality Bit Rate

High

Low

Medium

Page 219: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

QuantityQuality Bit Rate

High

Low

Medium

Page 220: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

BothQuality Bit Rate

High

Low

Medium

Page 221: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

What Is Multi-Pass Encoding?

Page 222: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Single-Pass Encoding

Page 223: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Single-Pass Encoding

VTCompressionSession

Video Encoder

CVPixelBuffers

H.264 H.264

CMSampleBuffers Movie File

Page 224: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Single-Pass Encoding

Finished

VTCompressionSession

Video Encoder

CVPixelBuffers

H.264 H.264

CMSampleBuffers Movie File

Page 225: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Single-Pass Encoding

Finished

VTCompressionSession

Video Encoder

CVPixelBuffers

H.264 H.264

CMSampleBuffers Movie File

Page 226: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Multi-Pass Encoding

Page 227: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Multi-Pass Encoding

VTCompressionSession

Video Encoder

CVPixelBuffers

H.264 H.264

CMSampleBuffers

Page 228: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Multi-Pass Encoding

VTCompressionSession

Video Encoder

CVPixelBuffers

H.264 H.264

CMSampleBuffers Frame Database

Encoder Database

Page 229: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Multi-Pass Encoding

VTCompressionSession

Video Encoder

CVPixelBuffers

H.264 H.264

CMSampleBuffers Frame Database

Resend Frames

Encoder Database

Page 230: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Multi-Pass Encoding

VTCompressionSession

Video Encoder

CVPixelBuffers

H.264 H.264

CMSampleBuffers Frame Database

Encoder Database

Page 231: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Multi-Pass Encoding

Finished

VTCompressionSession

Video Encoder

CVPixelBuffers

H.264 H.264

CMSampleBuffers Frame Database

Encoder Database

Page 232: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Multi-Pass Encoding

Finished

VTCompressionSession

Video Encoder

CVPixelBuffers

H.264 H.264

CMSampleBuffers Frame Database

Encoder Database

Page 233: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Multi-Pass Encoding

Finished

VTCompressionSession

Video Encoder

CVPixelBuffers

H.264 H.264

CMSampleBuffers Frame Database

Movie FileEncoder Database

Page 234: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Multi-Pass Encoding

Finished

VTCompressionSession

Video Encoder

CVPixelBuffers

H.264 H.264

CMSampleBuffers Frame Database

Movie FileEncoder Database

Page 235: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Single-Pass Multi-Pass

Hardware Accelerated

Knowledge of Future

Change Decisions

Optimal Quality per Bit

Multi-Pass Encoder Features

Page 236: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Single-Pass Multi-Pass

Hardware Accelerated

Knowledge of Future

Change Decisions

Optimal Quality per Bit

Multi-Pass Encoder Features

Page 237: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Single-Pass Multi-Pass

Hardware Accelerated

Knowledge of Future

Change Decisions

Optimal Quality per Bit

Multi-Pass Encoder Features

Page 238: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Single-Pass Multi-Pass

Hardware Accelerated

Knowledge of Future

Change Decisions

Optimal Quality per Bit

Multi-Pass Encoder Features

Page 239: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Single-Pass Multi-Pass

Hardware Accelerated

Knowledge of Future

Change Decisions

Optimal Quality per Bit

Multi-Pass Encoder Features

Page 240: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

New APIs

Page 241: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVKit

AVFoundation

Video Toolbox

Core Media

Core Video

Page 242: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVFoundation

New AVAssetExportSession property

Pass descriptions for AVAssetWriterInput

Reuse of AVAssetReaderOutput

Page 243: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetExportSessionOverview

Page 244: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetExportSessionOverview

Video Encoder

CVPixelBuffers

H.264

CMSampleBuffers

Video DecoderH.264

CMSampleBuffersMovie File Movie File

Page 245: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetExportSessionOverview

AVAssetExportSession

Video Encoder

CVPixelBuffers

H.264

CMSampleBuffers

Video DecoderH.264

CMSampleBuffersMovie File Movie File

Page 246: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetExportSessionNew APIs

Page 247: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetExportSessionNew APIs

Multiple passes are taken care of automatically

Page 248: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetExportSessionNew APIs

Multiple passes are taken care of automatically• Falls back to single-pass if not supported

Page 249: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetExportSessionNew APIs

Multiple passes are taken care of automatically• Falls back to single-pass if not supported@property (nonatomic) BOOL canPerformMultiplePassesOverSourceMediaData;

Page 250: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetWriterOverview

Page 251: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetWriterOverview

Video Encoder

CVPixelBuffers

H.264

CMSampleBuffers Movie File

Page 252: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetWriterOverview

Video Encoder

CVPixelBuffers

H.264

CMSampleBuffers Movie File

Page 253: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetWriterOverview

AVAssetWriterInput

Video Encoder

CVPixelBuffers

H.264

CMSampleBuffers Movie File

Page 254: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetWriterOverview

Page 255: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetWriterOverview

Video Encoder

CVPixelBuffers

H.264

CMSampleBuffers Movie File

Page 256: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetWriterOverview

Video DecoderH.264

CMSampleBuffersMovie File

Video Encoder

CVPixelBuffers

H.264

CMSampleBuffers Movie File

Page 257: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetReaderOutput AVAssetWriterInput

AVAssetWriterOverview

Video DecoderH.264

CMSampleBuffersMovie File

Video Encoder

CVPixelBuffers

H.264

CMSampleBuffers Movie File

Page 258: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetWriterInputNew APIs

Page 259: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetWriterInputNew APIs

Enable multi-pass encoding if supported @property (nonatomic) BOOL performsMultiPassEncodingIfSupported;

Page 260: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetWriterInputNew APIs

Enable multi-pass encoding if supported @property (nonatomic) BOOL performsMultiPassEncodingIfSupported;

End current pass after appending samples - (void)markCurrentPassAsFinished;

Page 261: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetWriterInputNew APIs

Enable multi-pass encoding if supported @property (nonatomic) BOOL performsMultiPassEncodingIfSupported;

End current pass after appending samples - (void)markCurrentPassAsFinished;

Triggers encoder analysis

Page 262: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetWriterInputNew APIs

Enable multi-pass encoding if supported @property (nonatomic) BOOL performsMultiPassEncodingIfSupported;

End current pass after appending samples - (void)markCurrentPassAsFinished;

Triggers encoder analysis

Encoder decides if it wants more passes and what time ranges

Page 263: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetWriterInputPassDescription

0 3 5 7

Page 264: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetWriterInputPassDescription

Encoder’s request for samples in next pass • May contain subsets of entire sequence

0 3 5 7

Page 265: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetWriterInputPassDescription

Encoder’s request for samples in next pass • May contain subsets of entire sequence

Query pass description time ranges

@property (nonatomic, readonly) NSArray *sourceTimeRanges;

0 3 5 7

Page 266: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetWriterInputPassDescription

Encoder’s request for samples in next pass • May contain subsets of entire sequence

Query pass description time ranges

@property (nonatomic, readonly) NSArray *sourceTimeRanges;

Array of CMTimeRanges as NSValues

0 3 5 7

Page 267: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetWriterInputPass descriptions

Page 268: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetWriterInputPass descriptions

Block is called when encoder makes decision about next pass - (void)respondToEachPassDescriptionOnQueue:(dispatch_queue_t)queue usingBlock:(dispatch_block_t)block;

Page 269: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetWriterInputPass descriptions

Block is called when encoder makes decision about next pass - (void)respondToEachPassDescriptionOnQueue:(dispatch_queue_t)queue usingBlock:(dispatch_block_t)block;

Get the new description @property (readonly) AVAssetWriterInputPassDescription *currentPassDescription;

Page 270: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetWriterInputSample

Page 271: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

[assetWriterInput respondToEachPassDescriptionOnQueue:queue usingBlock:^{ AVAssetWriterInputPassDescription *pass = [assetWriterInput currentPassDescription]; if (pass != nil) { // Reconfigure source to deliver samples [source deliverSamplesFromPassDescription:pass]; // Ready to start next pass [assetWriterInput requestMediaDataWhenReadyOnQueue:queue usingBlock:block]; } else { // Finished [assetWriterInput markAsFinished]; } }];

AVAssetWriterInputSample

Page 272: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

[assetWriterInput respondToEachPassDescriptionOnQueue:queue usingBlock:^{ AVAssetWriterInputPassDescription *pass = [assetWriterInput currentPassDescription]; if (pass != nil) { // Reconfigure source to deliver samples [source deliverSamplesFromPassDescription:pass]; // Ready to start next pass [assetWriterInput requestMediaDataWhenReadyOnQueue:queue usingBlock:block]; } else { // Finished [assetWriterInput markAsFinished]; } }];

AVAssetWriterInputSample

Page 273: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

[assetWriterInput respondToEachPassDescriptionOnQueue:queue usingBlock:^{ AVAssetWriterInputPassDescription *pass = [assetWriterInput currentPassDescription]; if (pass != nil) { // Reconfigure source to deliver samples [source deliverSamplesFromPassDescription:pass]; // Ready to start next pass [assetWriterInput requestMediaDataWhenReadyOnQueue:queue usingBlock:block]; } else { // Finished [assetWriterInput markAsFinished]; } }];

AVAssetWriterInputSample

Page 274: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

[assetWriterInput respondToEachPassDescriptionOnQueue:queue usingBlock:^{ AVAssetWriterInputPassDescription *pass = [assetWriterInput currentPassDescription]; if (pass != nil) { // Reconfigure source to deliver samples [source deliverSamplesFromPassDescription:pass]; // Ready to start next pass [assetWriterInput requestMediaDataWhenReadyOnQueue:queue usingBlock:block]; } else { // Finished [assetWriterInput markAsFinished]; } }];

AVAssetWriterInputSample

Page 275: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

[assetWriterInput respondToEachPassDescriptionOnQueue:queue usingBlock:^{ AVAssetWriterInputPassDescription *pass = [assetWriterInput currentPassDescription]; if (pass != nil) { // Reconfigure source to deliver samples [source deliverSamplesFromPassDescription:pass]; // Ready to start next pass [assetWriterInput requestMediaDataWhenReadyOnQueue:queue usingBlock:block]; } else { // Finished [assetWriterInput markAsFinished]; } }];

AVAssetWriterInputSample

Page 276: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetReaderOutputNew APIs

Page 277: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetReaderOutputNew APIs

Prepare source for multi-pass @property (nonatomic) BOOL supportsRandomAccess;

Page 278: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetReaderOutputNew APIs

Prepare source for multi-pass @property (nonatomic) BOOL supportsRandomAccess;

Reconfigure source to deliver samples in time ranges - (void)resetForReadingTimeRanges:(NSArray *)timeRanges;

Page 279: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetReaderOutputNew APIs

Prepare source for multi-pass @property (nonatomic) BOOL supportsRandomAccess;

Reconfigure source to deliver samples in time ranges - (void)resetForReadingTimeRanges:(NSArray *)timeRanges;

All passes have completed - (void)markConfigurationAsFinal;

Page 280: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetReader and AVAssetWriter

Page 281: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetReader and AVAssetWriter

Enable AVAssetReaderOutput if AVAssetWriterInput support multi-pass readerOutput.supportsRandomAccess = writerInput.canPerformMultiplePasses;

Page 282: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetReader and AVAssetWriter

Enable AVAssetReaderOutput if AVAssetWriterInput support multi-pass readerOutput.supportsRandomAccess = writerInput.canPerformMultiplePasses;

Reconfigure source to deliver samples for an AVAssetWriterInput [readerOutput resetForReadingTimeRanges:passDescription.sourceTimeRanges];

Page 283: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetReaderOutputSample

Page 284: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVAssetReaderOutputSample

[assetWriterInput respondToEachPassDescriptionOnQueue:queue usingBlock:^{ AVAssetWriterInputPassDescription *pass = [assetWriterInput currentPassDescription]; if (currentPass != nil) { // Reconfigure source to deliver samples [readerOutput resetForReadingTimeRanges:pass.sourceTimeRanges]; // Ready to start next pass [assetWriterInput requestMediaDataWhenReadyOnQueue:queue usingBlock:block]; } else { // Finished [assetWriterInput markAsFinished]; } }];

Page 285: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

AVKit

AVFoundation

Video Toolbox

Core Media

Core Video

Page 286: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Video Toolbox

Encoder frame analysis database • VTMultiPassStorage

Additions to VTCompressionSession

Compressed frame database • VTFrameSilo

Page 287: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Video Toolbox Multi-PassArchitecture

Page 288: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Video Toolbox Multi-PassArchitecture

VTCompressionSession

Video Encoder

CVPixelBuffers

H.264 H.264

CMSampleBuffers

Page 289: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Video Toolbox Multi-PassArchitecture

VTCompressionSession

Video Encoder

CVPixelBuffers

H.264 H.264

CMSampleBuffers VTFrameSilo

VTMultiPassStorage

Page 290: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Video Toolbox Multi-PassArchitecture

VTCompressionSession

Video Encoder

CVPixelBuffers

H.264 H.264

CMSampleBuffers VTFrameSilo

ResendFrames

VTMultiPassStorage

Page 291: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Video Toolbox Multi-PassArchitecture

VTCompressionSession

Video Encoder

CVPixelBuffers

H.264 H.264

CMSampleBuffers VTFrameSilo

VTMultiPassStorage

Page 292: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Video Toolbox Multi-PassArchitecture

Finished

VTCompressionSession

Video Encoder

CVPixelBuffers

H.264 H.264

CMSampleBuffers VTFrameSilo

VTMultiPassStorage

Page 293: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Video Toolbox Multi-PassArchitecture

Finished

VTCompressionSession

Video Encoder

CVPixelBuffers

H.264 H.264

CMSampleBuffers VTFrameSilo

VTMultiPassStorage

Page 294: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Video Toolbox Multi-PassArchitecture

Finished

VTCompressionSession

Video Encoder

CVPixelBuffers

H.264 H.264

CMSampleBuffers VTFrameSilo

Movie FileVTMultiPassStorage

Page 295: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Video Toolbox Multi-PassArchitecture

Finished

VTCompressionSession

Video Encoder

CVPixelBuffers

H.264 H.264

CMSampleBuffers VTFrameSilo

Movie FileVTMultiPassStorage

Page 296: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTMultiPassStorage

VTMultiPassStorageEncoder Analysis

Page 297: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTMultiPassStorage

Create the encoder analysis storage error = VTMultiPassStorageCreate( allocator, fileURL, timeRange, options, &storage );

VTMultiPassStorageEncoder Analysis

Page 298: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTMultiPassStorage

Create the encoder analysis storage error = VTMultiPassStorageCreate( allocator, fileURL, timeRange, options, &storage );

Close the file error = VTMultiPassStorageClose( storage );

VTMultiPassStorageEncoder Analysis

Page 299: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTCompressionSession

VTMultiPassStorageVTCompressionSession

Video Encoder

Page 300: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTCompressionSession

Enable multi-pass error = VTSessionSetProperty( session, kVTCompressionPropertyKey_MultiPassStorage, multiPassStorage );

VTMultiPassStorageVTCompressionSession

Video Encoder

Page 301: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTCompressionSession

Page 302: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Begin a pass error = VTCompressionSessionBeginPass( session, 0, NULL );

VTCompressionSession

Page 303: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Begin a pass error = VTCompressionSessionBeginPass( session, 0, NULL );

End a pass • Asks the encoder if another pass can be performed error = VTCompressionSessionEndPass( session, &furtherPassesRequested, NULL );

Begin a pass error = VTCompressionSessionBeginPass( session, 0, NULL );

VTCompressionSession

Page 304: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Begin a pass error = VTCompressionSessionBeginPass( session, 0, NULL );

!

End a passAsks the encoder if another pass can be performed error = VTCompressionSessionEndPass( session,

&furtherPassesRequested, NULL );Retrieve time ranges for next pass error = VTCompressionSessionGetTimeRangesForNextPass( session, &timeRangesCount, &timeRangeArray );

Begin a pass error = VTCompressionSessionBeginPass( session, 0, NULL );

End a pass • Asks the encoder if another pass can be performed error = VTCompressionSessionEndPass( session, &furtherPassesRequested, NULL );

Begin a pass error = VTCompressionSessionBeginPass( session, 0, NULL );

VTCompressionSession

Page 305: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTFrameSilo

H.264 H.264

CMSampleBuffers VTFrameSilo

Page 306: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTFrameSilo

Create compressed frame storage error = VTFrameSiloCreate( allocator, fileURL, timeRange, options, &silo );

H.264 H.264

CMSampleBuffers VTFrameSilo

Page 307: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTFrameSilo

Create compressed frame storage error = VTFrameSiloCreate( allocator, fileURL, timeRange, options, &silo );

Add a sample in VTCompressionOutputCallback error = VTFrameSiloAddSampleBuffer( silo, sampleBuffer );

H.264 H.264

CMSampleBuffers VTFrameSilo

Page 308: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTFrameSilo

Create compressed frame storage error = VTFrameSiloCreate( allocator, fileURL, timeRange, options, &silo );

Add a sample in VTCompressionOutputCallback error = VTFrameSiloAddSampleBuffer( silo, sampleBuffer );

Prepare for next pass error = VTFrameSiloSetTimeRangesForNextPass( silo, timeRangeCount, timeRangeArray );

H.264 H.264

CMSampleBuffers VTFrameSilo

Page 309: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTFrameSilo

VTFrameSiloFile output

Movie File

Page 310: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

VTFrameSiloRetrieve samples for time range error = VTFrameSiloCallBlockForEachSampleBuffer( silo, timeRange, ^(CMSampleBuffer sampleBuffer) { // append sampleBuffer to movie file });

VTFrameSiloFile output

Movie File

Page 311: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Considerations

Page 312: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Best Choice

Real Time Single-Pass

Minimum Power Use Single-Pass

Minimum Temporary Storage Single-Pass

Best Quality Multi-Pass

Closer to Target Bit Rate Multi-Pass

Okay to Take Longer Multi-Pass

Your App Experiment

Use Case Considerations

Page 313: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Best Choice

Real Time Single-Pass

Minimum Power Use Single-Pass

Minimum Temporary Storage Single-Pass

Best Quality Multi-Pass

Closer to Target Bit Rate Multi-Pass

Okay to Take Longer Multi-Pass

Your App Experiment

Use Case Considerations

Page 314: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Best Choice

Real Time Single-Pass

Minimum Power Use Single-Pass

Minimum Temporary Storage Single-Pass

Best Quality Multi-Pass

Closer to Target Bit Rate Multi-Pass

Okay to Take Longer Multi-Pass

Your App Experiment

Use Case Considerations

Page 315: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Best Choice

Real Time Single-Pass

Minimum Power Use Single-Pass

Minimum Temporary Storage Single-Pass

Best Quality Multi-Pass

Closer to Target Bit Rate Multi-Pass

Okay to Take Longer Multi-Pass

Your App Experiment

Use Case Considerations

Page 316: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Best Choice

Real Time Single-Pass

Minimum Power Use Single-Pass

Minimum Temporary Storage Single-Pass

Best Quality Multi-Pass

Closer to Target Bit Rate Multi-Pass

Okay to Take Longer Multi-Pass

Your App Experiment

Use Case Considerations

Page 317: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Best Choice

Real Time Single-Pass

Minimum Power Use Single-Pass

Minimum Temporary Storage Single-Pass

Best Quality Multi-Pass

Closer to Target Bit Rate Multi-Pass

Okay to Take Longer Multi-Pass

Your App Experiment

Use Case Considerations

Page 318: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Best Choice

Real Time Single-Pass

Minimum Power Use Single-Pass

Minimum Temporary Storage Single-Pass

Best Quality Multi-Pass

Closer to Target Bit Rate Multi-Pass

Okay to Take Longer Multi-Pass

Your App Experiment

Use Case Considerations

Page 319: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Best Choice

Real Time Single-Pass

Minimum Power Use Single-Pass

Minimum Temporary Storage Single-Pass

Best Quality Multi-Pass

Closer to Target Bit Rate Multi-Pass

Okay to Take Longer Multi-Pass

Your App Experiment

Use Case Considerations

Page 320: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Best Choice

Real Time Single-Pass

Minimum Power Use Single-Pass

Minimum Temporary Storage Single-Pass

Best Quality Multi-Pass

Closer to Target Bit Rate Multi-Pass

Okay to Take Longer Multi-Pass

Your App Experiment

Use Case Considerations

Page 321: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Best Choice

Real Time Single-Pass

Minimum Power Use Single-Pass

Minimum Temporary Storage Single-Pass

Best Quality Multi-Pass

Closer to Target Bit Rate Multi-Pass

Okay to Take Longer Multi-Pass

Your App Experiment

Use Case Considerations

Page 322: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Best Choice

Real Time Single-Pass

Minimum Power Use Single-Pass

Minimum Temporary Storage Single-Pass

Best Quality Multi-Pass

Closer to Target Bit Rate Multi-Pass

Okay to Take Longer Multi-Pass

Your App Experiment

Use Case Considerations

Page 323: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Best Choice

Real Time Single-Pass

Minimum Power Use Single-Pass

Minimum Temporary Storage Single-Pass

Best Quality Multi-Pass

Closer to Target Bit Rate Multi-Pass

Okay to Take Longer Multi-Pass

Your App Experiment

Use Case Considerations

Page 324: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Best Choice

Real Time Single-Pass

Minimum Power Use Single-Pass

Minimum Temporary Storage Single-Pass

Best Quality Multi-Pass

Closer to Target Bit Rate Multi-Pass

Okay to Take Longer Multi-Pass

Your App Experiment

Use Case Considerations

Page 325: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Best Choice

Real Time Single-Pass

Minimum Power Use Single-Pass

Minimum Temporary Storage Single-Pass

Best Quality Multi-Pass

Closer to Target Bit Rate Multi-Pass

Okay to Take Longer Multi-Pass

Your App Experiment

Use Case Considerations

Page 326: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Best Choice

Real Time Single-Pass

Minimum Power Use Single-Pass

Minimum Temporary Storage Single-Pass

Best Quality Multi-Pass

Closer to Target Bit Rate Multi-Pass

Okay to Take Longer Multi-Pass

Your App Experiment

Use Case Considerations

Page 327: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Best Choice

Low Complexity Single/Multi

High Complexity Single/Multi

Varying Complexity Multi-Pass

Your Content Experiment

Content Considerations

Page 328: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Best Choice

Low Complexity Single/Multi

High Complexity Single/Multi

Varying Complexity Multi-Pass

Your Content Experiment

Content Considerations

Page 329: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Best Choice

Low Complexity Single/Multi

High Complexity Single/Multi

Varying Complexity Multi-Pass

Your Content Experiment

Content Considerations

Page 330: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Best Choice

Low Complexity Single/Multi

High Complexity Single/Multi

Varying Complexity Multi-Pass

Your Content Experiment

Content Considerations

Page 331: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Best Choice

Low Complexity Single/Multi

High Complexity Single/Multi

Varying Complexity Multi-Pass

Your Content Experiment

Content Considerations

Page 332: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Best Choice

Low Complexity Single/Multi

High Complexity Single/Multi

Varying Complexity Multi-Pass

Your Content Experiment

Content Considerations

Page 333: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Best Choice

Low Complexity Single/Multi

High Complexity Single/Multi

Varying Complexity Multi-Pass

Your Content Experiment

Content Considerations

Page 334: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Best Choice

Low Complexity Single/Multi

High Complexity Single/Multi

Varying Complexity Multi-Pass

Your Content Experiment

Content Considerations

Page 335: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Best Choice

Low Complexity Single/Multi

High Complexity Single/Multi

Varying Complexity Multi-Pass

Your Content Experiment

Content Considerations

Page 336: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Summary

Page 337: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Summary

AVFoundation provides powerful APIs to operate on media

Page 338: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Summary

AVFoundation provides powerful APIs to operate on media

Video Toolbox APIs provide direct codec access

Page 339: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Summary

AVFoundation provides powerful APIs to operate on media

Video Toolbox APIs provide direct codec access

Multi-pass can provide substantial quality improvements

Page 340: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

More Information

Evangelism [email protected]

!

AVFoundation Documentation AVFoundation Programming Guide https://developer.apple.com/library/ios/documentation/AudioVideo/Conceptual/AVFoundationPG/

Apple Developer Forums http://devforums.apple.com

Page 341: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Related Sessions

• Mastering Modern Media Playback Mission Tuesday 11:30AM

• Harnessing Metadata in Audiovisual Media Pacific Heights Tuesday 2:00PM

• Camera Capture: Manual Controls Marina Wednesday 11:30AM

• Introducing the Photos Frameworks Nob Hill Thursday 10:15AM

Page 342: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion

Labs

• AVFoundation and Camera Capture Lab Media Lab A Thursday 2:00PM

Page 343: Direct Access to Video Encoding and Decoding · Direct Access to Video Encoding and Decoding Session 513 David Eldred Tech Lead, Frameworks with “Video” in their names ... Conversion