# 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:

  1. Basic usage — Subclass ByteArkPlayerViewController and present it directly.
  2. Advanced usage — Embed ByteArkPlayerViewController inside 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)
    }
  }
}
1
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 ByteArkPlayerConfigBuilder and ByteArkPlayerItemBuilder.

# 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
  }
}
1
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
  }
}
1
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 ByteArkPlayerPlaybackDelegate callbacks.

# 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()
1
2
3
4
5
6

See API Reference for all player methods, including tracks, resolution, subtitles, and playlist management.