# Using ByteArk Player SDK for iOS
This walkthrough shows how to set up ByteArkPlayerViewController in your app. For details of each Option / API / Event, see the linked reference pages.
ByteArk Player SDK for iOS is built on the ByteArkPlayerViewController class — a subclass of UIViewController with a player property that exposes the Player API and delivers events through a delegate.
You can use the SDK in two ways:
- Basic usage — Subclass
ByteArkPlayerViewControllerand present it directly. - Advanced usage — Embed
ByteArkPlayerViewControllerinside a container view of another view controller.
# 1. Basic usage
Subclass ByteArkPlayerViewController and override viewDidLoad() to configure the player.
import UIKit
import ByteArkPlayerSDK
class PlayerViewController: ByteArkPlayerViewController {
override func viewDidLoad() {
super.viewDidLoad()
do {
// Build the ByteArkPlayerItem
let item = try ByteArkPlayerItemBuilder()
.media(URL(string: "<MEDIA_URL>")!)
.title("Big Buck Bunny")
.build()
// Build the ByteArkPlayerConfig
let config = try ByteArkPlayerConfigBuilder(licenseKey: "<YOUR_LICENSE_KEY>")
.item(item)
.autoplay(true)
.build()
// Configure the player
player.configure(with: config)
} catch {
print(error.localizedDescription)
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Then present PlayerViewController as usual.
See Options for all builder methods on
ByteArkPlayerConfigBuilderandByteArkPlayerItemBuilder.
# 2. Advanced usage
Embed ByteArkPlayerViewController in a container view to lay it out together with other UI components.
class CustomViewController: UIViewController, ByteArkPlayerPlaybackDelegate {
@IBOutlet weak var containerView: UIView!
var playerViewController: ByteArkPlayerViewController?
override func viewDidLoad() {
super.viewDidLoad()
// Add ByteArkPlayerViewController as a child
let playerViewController = ByteArkPlayerViewController()
addChild(playerViewController)
containerView.addSubview(playerViewController.view)
playerViewController.didMove(toParent: self)
playerViewController.view.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
playerViewController.view.leftAnchor.constraint(equalTo: containerView.leftAnchor),
playerViewController.view.rightAnchor.constraint(equalTo: containerView.rightAnchor),
playerViewController.view.topAnchor.constraint(equalTo: containerView.topAnchor),
playerViewController.view.bottomAnchor.constraint(equalTo: containerView.bottomAnchor),
])
self.playerViewController = playerViewController
let player = playerViewController.player
do {
let item = try ByteArkPlayerItemBuilder()
.media(URL(string: "<MEDIA_URL>")!)
.title("Big Buck Bunny")
.build()
let config = try ByteArkPlayerConfigBuilder(licenseKey: "<YOUR_LICENSE_KEY>")
.item(item)
.autoplay(true)
.build()
// Assign delegate to receive events
player.delegate = self
player.configure(with: config)
} catch {
print(error.localizedDescription)
}
}
// MARK: - ByteArkPlayerPlaybackDelegate
func playbackReady(player: ByteArkPlayer, item: ByteArkPlayerItem) {
// The video is ready to play
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# 3. Receiving events from the player
Two ways to receive events:
Subclass ByteArkPlayerViewController and override callback methods:
class PlayerViewController: ByteArkPlayerViewController {
override func playbackPlay(player: ByteArkPlayer) {
super.playbackPlay(player: player)
// Playback started
}
override func playbackError(player: ByteArkPlayer, error: NSError) {
super.playbackError(player: player, error: error)
// Handle error
}
}
2
3
4
5
6
7
8
9
10
11
Or assign player.delegate in another view controller (see "Advanced usage").
See Event Listeners Reference for all
ByteArkPlayerPlaybackDelegatecallbacks.
# 4. Calling Player APIs
Common API calls:
player.play()
player.pause()
player.seek(to: 60) { _ in } // Go to 1:00
player.setPlaybackSpeed(1.5) // Playback at 1.5x
player.toggleFullscreen()
player.togglePictureInPictureMode()
2
3
4
5
6
See API Reference for all player methods, including tracks, resolution, subtitles, and playlist management.
# Related topics
- Content Protection (Apple FairPlay) — play FairPlay-protected content
- Playback Engine — use a custom playback engine
- Creating Plugins — extend the player with your own plugin
← Installation Options →