Complete Guide to Video Playback Using AVPlayerViewController in Swift

Nov 22, 2025 · Programming · 8 views · 7.8

Keywords: Swift | AVPlayerViewController | Video Playback | AVKit | iOS Development

Abstract: This article provides a comprehensive guide to implementing video playback in Swift using AVKit's AVPlayerViewController. Covering both SwiftUI and UIKit approaches, it details essential framework imports, player initialization, controller presentation, and security configurations for network video streaming. The content includes practical code examples, best practices for execution timing, and comparisons with direct AVPlayer usage.

Overview of AVKit Framework

AVKit is Apple's multimedia framework designed for playing audio and video content in iOS and macOS applications. As a higher-level wrapper around AVFoundation, AVKit provides simplified interfaces, with AVPlayerViewController offering a complete video playback interface including standard controls, progress bars, and full-screen toggling.

Required Framework Imports

Before using AVPlayerViewController, relevant frameworks must be imported. Both SwiftUI and UIKit projects require the AVKit framework. Notably, while AVPlayerViewController belongs to AVKit, its underlying implementation depends on AVFoundation, so importing both frameworks is recommended for complete functionality.

import AVKit
import AVFoundation

Implementation in SwiftUI Environment

In SwiftUI, the VideoPlayer view enables quick integration of video playback functionality. This approach is most concise and suitable for modern SwiftUI application development.

import SwiftUI
import AVKit

struct ContentView: View {
    var body: some View {
        let videoURL = URL(string: "https://test-videos.co.uk/vids/bigbuckbunny/mp4/h264/720/Big_Buck_Bunny_720_10s_5MB.mp4")
        let player = AVPlayer(url: videoURL!)
        VideoPlayer(player: player)
    }
}

The VideoPlayer view automatically manages the player's lifecycle, eliminating the need for manual playback state control.

Standard Implementation in UIKit Environment

In traditional UIKit projects, AVPlayerViewController offers more flexibility. Below is the standard implementation process:

let videoURL = URL(string: "https://test-videos.co.uk/vids/bigbuckbunny/mp4/h264/720/Big_Buck_Bunny_720_10s_5MB.mp4")
let player = AVPlayer(url: videoURL!)
let playerViewController = AVPlayerViewController()
playerViewController.player = player
self.present(playerViewController, animated: true) {
    playerViewController.player!.play()
}

This implementation presents a complete video playback interface modally, allowing users to control playback via on-screen controls.

Alternative Approach Using AVPlayer Directly

Beyond AVPlayerViewController, developers can use AVPlayer with AVPlayerLayer to create custom video playback interfaces.

let videoURL = URL(string: "https://test-videos.co.uk/vids/bigbuckbunny/mp4/h264/720/Big_Buck_Bunny_720_10s_5MB.mp4")
let player = AVPlayer(url: videoURL!)
let playerLayer = AVPlayerLayer(player: player)
playerLayer.frame = self.view.bounds
self.view.layer.addSublayer(playerLayer)
player.play()

This method suits scenarios requiring fully customized playback interfaces but necessitates manual handling of playback controls and user interactions.

Best Practices for Code Execution Timing

Video playback-related code should execute at appropriate lifecycle stages. Initializing the player in the viewDidAppear(_:) method is recommended to ensure the view is fully loaded and displayed.

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    // Video playback initialization code
}

Security Configuration for Network Video Playback

When playing videos from the network, configure App Transport Security in the app's Info.plist file. Specifically, add the Allow Arbitrary Loads entry and set its value to YES to permit loading non-HTTPS content.

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

Objective-C Implementation Reference

For projects still using Objective-C, AVPlayerViewController usage is similar to Swift:

NSURL *videoURL = [NSURL URLWithString:@"https://test-videos.co.uk/vids/bigbuckbunny/mp4/h264/720/Big_Buck_Bunny_720_10s_5MB.mp4"];
AVPlayer *player = [AVPlayer playerWithURL:videoURL];
AVPlayerViewController *playerViewController = [AVPlayerViewController new];
playerViewController.player = player;
[self presentViewController:playerViewController animated:YES completion:^{
    [playerViewController.player play];
}];

Common Issues and Solutions

In practice, issues like player initialization failures or video loading problems may arise. Common causes include incorrect URL formats, improper network permissions, or unsupported video formats. Implementing appropriate error handling and validating with reliable test video URLs is advised during development.

Performance Optimization Recommendations

For applications requiring multiple video playback or handling large video files, implement proper resource management. Release unused player instances promptly to avoid memory leaks. Additionally, consider using AVPlayerItem for better control over playback states and buffering strategies.

Copyright Notice: All rights in this article are reserved by the operators of DevGex. Reasonable sharing and citation are welcome; any reproduction, excerpting, or re-publication without prior permission is prohibited.