2020 Audio & Video
WWDC20 · 22 min · Audio & Video
Author fragmented MPEG-4 content with AVAssetWriter
Transform your audio and video content into fragmented MPEG-4 files for a faster and smoother HLS streaming experience. Learn how to work with the fragmented MPEG-4 format, generate fragmented content from a movie, and set up AVAssetWriter to create fragments for HLS output.
Watch at developer.apple.com ↗Code shown on screen · 6 snippets
Instantiate AVAssetWriter and input
// Instantiate asset writer
let assetWriter = AVAssetWriter(contentType: UTType(AVFileType.mp4.rawValue)!)
// Add inputs
let videoInput = AVAssetWriterInput(mediaType: .video, outputSettings: compressionSettings)
assetWriter.add(videoInput) Configure AVAssetWriter
assetWriter.outputFileTypeProfile = .mpeg4AppleHLS
assetWriter.preferredOutputSegmentInterval = CMTime(seconds: 6.0, preferredTimescale: 1)
assetWriter.initialSegmentStartTime = myInitialSegmentStartTime
assetWriter.delegate = myDelegateObject Delegate methods
optional func assetWriter(_ writer: AVAssetWriter, didOutputSegmentData segmentData: Data, segmentType: AVAssetSegmentType)
optional func assetWriter(_ writer: AVAssetWriter, didOutputSegmentData segmentData: Data, segmentType: AVAssetSegmentType, segmentReport: AVAssetSegmentReport?) AVAssetSegmentType
public enum AVAssetSegmentType : Int {
case initialization = 1
case separable = 2
} Custom segmentation
// Set properties
assetWriter.outputFileTypeProfile = .mpeg4AppleHLS
assetWriter.preferredOutputSegmentInterval = .indefinite
assetWriter.delegate = myDelegateObject
// Passthrough
let videoInput = AVAssetWriterInput(mediaType: .video, outputSettings: nil) Audio has dependencies
extension AVAssetTrack {
/* indicates whether this audio track has dependencies (e.g. kAudioFormatMPEGD_USAC) */
open var hasAudioSampleDependencies: Bool { get }
}