# Using ByteArk Player SDK for Android

This walkthrough shows how to set up ByteArkPlayerFragment in your app. For details of each Option / API / Event, see the linked reference pages.

# 1. Set up the view container

Set up a view container to host ByteArkPlayerFragment. You may also create a ViewGroup container for Companion Ads.

private fun setupView() {
  enableEdgeToEdge()
  mBinding = ActivityMainBinding.inflate(layoutInflater)
  ViewCompat.setOnApplyWindowInsetsListener(mBinding.main) { v, insets ->
    val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
    v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
    insets
  }
  mFragmentContainer = mBinding.fragmentContainer
  mCompanionAdsSlotContainer = mBinding.companionAdSlotContainer
  setContentView(mBinding.root)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 2. Create ByteArkPlayerFragment

Build a ByteArkPlayerBuilder with the features you want, then build setting objects for each capability and pass them to ByteArkPlayerFragment.createInstance(...).

private fun setupPlayerFragment() {
  // Build the player
  val playerBuilder = ByteArkPlayerBuilder.Builder()
    .withContext(this)
    .withAutoPlay()
    .withControl()
    .withFullScreenButton()
    .withPictureInPicture()
    .withSeekButtons()
    .withSeekTime(10)
    .withShareOption()
    .withSettingButton()
    .build()
  // Companion Ad slot (optional)
  val companionAdSlot = ByteArkPlayerFragment.createCompanionAdSlot(
    mCompanionAdsSlotContainer, 728, 90
  )
  // Setting objects for each integration
  val chromeCastSetting = ByteArkPlayerFragment.createChromeCastSetting(true)
  val lighthouseSetting = ByteArkPlayerFragment.createLighthouseSetting(true, "PROJECT_ID", true)
  val nielsenSetting = ByteArkPlayerFragment.createNielsenSetting(
    "APP_ID", "APP_NAME", "th", "", "DEBUG"
  )
  val playbackSetting = ByteArkPlayerFragment.createPlaybackSetting(
    listOf(0.5F, 1.0F, 1.5F, 2.0F), 1F
  )
  // Create the fragment instance
  mPlayerFragment = ByteArkPlayerFragment.createInstance(
    playerBuilder,
    mFragmentListener,
    companionAdSlot,
    nielsenSetting,
    playbackSetting,
    lighthouseSetting,
    chromeCastSetting
  )
  supportFragmentManager.beginTransaction()
    .replace(mFragmentContainer.id, mPlayerFragment)
    .commit()
}
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

See Options for the full list of builder methods and setting objects.

# 3. Create a fragment listener

The listener receives events from the player. The example below shows the most common callbacks.

private var mFragmentListener = object : PlayerFragmentListener {
  override fun onPlayerReady() {
    // Player ready
  }
  override fun onPlay() {
    // Playback started
  }
  override fun onPause() {
    // Playback paused
  }
  override fun onEnded() {
    // Playback ended
  }
  override fun onError(errorCode: String, errorMessage: String) {
    // Handle playback error
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

Then attach the listener:

mPlayerFragment.addFragmentEventListener(mFragmentListener)
1

See Event Listeners Reference for all callbacks (~30) of PlayerFragmentListener.

# 4. Open a video and call the API

Create a ByteArkPlayerItem and call openMedia(...):

val playerItem = ByteArkPlayerItemBuilder.Builder()
  .withMediaId("VIDEO_ID")
  .withTitle("Big Buck Bunny")
  .withUrl("https://example.com/playlist.m3u8")
  .withPosterImage("https://example.com/poster.jpg")
  .build()
mPlayerFragment.openMedia(playerItem)
1
2
3
4
5
6
7
8

Common API calls:

mPlayerFragment.play()
mPlayerFragment.pause()
mPlayerFragment.seekTo(60_000L)
mPlayerFragment.setPlaybackSpeed(1.5F)
mPlayerFragment.toggleFullScreen()
mPlayerFragment.togglePictureInPicture()
1
2
3
4
5
6

See API Reference for the full ByteArkPlayerFragmentController interface.