Add Video Annotation to PDF in Swift for iOS

Add an animated GIF or inline video. Get additional resources by visiting multimedia PDF annotations library in iOS.s/


//
// Copyright © 2020-2025 PSPDFKit GmbH. All rights reserved.
//
// The Nutrient sample applications are licensed with a modified BSD license.
// Please see License for details. This notice may not be removed from this file.
//
import PSPDFKit
import PSPDFKitUI
class CustomGalleryExample: Example {
override init() {
super.init()
title = "Custom Gallery Example"
contentDescription = "Add animated gif or inline video."
category = .multimedia
priority = 200
}
override func invoke(with delegate: ExampleRunnerDelegate) -> UIViewController? {
let document = AssetLoader.document(for: .annualReport)
document.annotationSaveMode = .disabled
let image = UIImage(named: "mas_audio_b41570.gif")!
// Extract the image size to use it to size the annotation bounds
let imageSize = image.size.applying(CGAffineTransform(scaleX: 0.5, y: 0.5))
let pageSize = document.pageInfoForPage(at: 0)?.size ?? CGSize(width: 500, height: 500)
// Create an action with custom options to execute on tapping the embedded video.
let trailerVideoURL = URL(string: "http://movietrailers.apple.com/movies/wb/islandoflemurs/islandoflemurs-tlr1_480p.mov?width=848&height=480")!
let sheetVideoAction = URLAction(url: trailerVideoURL, options: [
// Disable browser controls.
.controlsKey: false,
// Will present as sheet on iPad, is ignored on iPhone.
.sizeKey: CGSize(width: 620, height: 400)
])
// Using the `pspdfkit://` scheme enables automatic gallery content detection.
let videoLink = LinkAnnotation(url: URL(string: "pspdfkit://localhost/Bundle/mas_audio_b41570.gif")!)
videoLink.boundingBox = CGRect(x: 0, y: pageSize.height - imageSize.height - 64.0, width: imageSize.width, height: imageSize.height)
videoLink.action?.subActions = [sheetVideoAction]
document.add(annotations: [videoLink])
// Adding a single video inline.
let embeddedVideoURL = URL(string: "pspdfkit://movietrailers.apple.com/movies/wb/islandoflemurs/islandoflemurs-tlr1_480p.mov?width=848&height=480")!
let embeddedVideoAnnotation = LinkAnnotation(url: embeddedVideoURL)
let embeddedVideoAnnotationOrigin = CGPoint(x: pageSize.width - imageSize.width, y: pageSize.height - imageSize.height - 64)
embeddedVideoAnnotation.boundingBox = CGRect(origin: embeddedVideoAnnotationOrigin, size: imageSize)
// Disable playback controls of the video
embeddedVideoAnnotation.controlsEnabled = false
document.add(annotations: [embeddedVideoAnnotation])
let pdfViewController = PDFViewController(document: document) {
// Disable annotation editing.
$0.editableAnnotationTypes = nil
}
return pdfViewController
}
}

This code sample is an example that illustrates how to use our SDK. Please adapt it to your specific use case.