# การใช้งาน ByteArk Player SDK for Android

# 1. Setup View Container

Setup View Container สำหรับ attach ByteArkPlayerFragment โดย Optional ว่าสามารถสร้าง ViewGroup Container สำหรับ Companion Ads ได้อีกด้วย

...
private fun setupView() {
  // Setup View Binding
  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
17
18
19

# 2. สร้าง ByteArkPlayerFragment

สร้าง ByteArkPlayerFragment โดยใช้งาน Function createInstance โดยท่านสามารถสามารถเพิ่ม Config สำหรับการใช้งาน Feature พิเศษต่างๆ ได้โดยการใช้ Helper Function จากใน ByteArkPlayerFragment

ตัวอย่างการสร้าง Fragment Instance

...
private fun setupPlayerFragment() {
  val playerBuilder = ByteArkPlayerFragment.createPlayerBuilderWithConfig(
    true, false, true, false, true,
    true, false, 30, true, true,
    true, false, true, null, null,
    ADS_URL, true
  )
  val companionAdSlot = ByteArkPlayerFragment.createCompanionAdSlot(mCompanionAdsSlotContainer, 728, 90)
  val chromeCastSetting = ByteArkPlayerFragment.createChromeCastSetting(true)
  val lighthouseSetting = ByteArkPlayerFragment.createLighthouseSetting(true, "TEST", true)
  val nielsenSetting = ByteArkPlayerFragment.createNielsenSetting(
    "P1D9F153A-B0F5-43B9-A765-FF0330342DAD",
    "ByteArk Demo",
    "1.0",
    "",
    "DEBUG"
  )
  val playBackSetting = ByteArkPlayerFragment.createPlaybackSetting(listOf(0.5F , 1.0F, 1.5F, 2.0F), 1F)
  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

โดย Config ต่างๆ ที่ใช้สร้าง Fragment ประกอบด้วย

  1. ByteArkPlayerBuilder

    • สร้างด้วย Function ByteArkPlayerFragment.createPlayerBuilderWithConfig
    • สามารถใช้งานเพื่อปรับพฤติกรรมการใช้งานของ Video Player ให้เป็นไปตามที่ท่านต้องการ
  2. ByteArkCompanionAdSlot

    • สร้างด้วย Function ByteArkPlayerFragment.createCompanionAdSlot
    • สามารถใช้งานเพื่อกำหนด Container และคุณสมบัติที่จะแสดงผล Companion Ads
    • What is companion ads? (opens new window)
  3. ByteArkChromeCastSetting

    • สร้างด้วย ByteArkPlayerFragment.createChromeCastSetting
    • สามารถใช้งานเพื่อกำหนดคุณสมบัติของการใช้งาน Feature Google Chromecast
  4. ByteArkLighthouseSetting

    • สร้างด้วย ByteArkPlayerFragment.createLighthouseSetting
    • สามารถใช้งานเพื่อกำหนดคุณสมบัติของการใช้งาน ByteArkLighthouse Analytic
  5. ByteArkNielsenSetting

    • สร้างด้วย ByteArkPlayerFragment.createNielsenSetting
    • สามารถใช้งานเพื่อกำหนดคุณสมบัติของการใช้งาน Nielsen DCR SDK
  6. ByteArkPlaybackSetting

    • สร้างด้วย ByteArkPlayerFragment.createPlaybackSetting
    • สามารถใช้งานเพื่อกำหนดคุณสมบัติของการใช้งานความเร็วของ Playback

# 3. สร้าง Fragment Listener เพื่อฟัง Callback จาก Video Player

private var mFragmentListener = object : PlayerFragmentListener {
  override fun onAdsBreakEnd() {
  }
  override fun onAdsBreakStart() {
  }
  override fun onAdsClicked() {
  }
  override fun onAdsComplete() {
  }
  override fun onAdsDestroy() {
  }
  override fun onAdsEnd() {
  }
  override fun onAdsError(errorMessage: String?) {
  }
  override fun onAdsRequest() {
  }
  override fun onAdsSkipped() {
  }
  override fun onAdsStart() {
  }
  override fun onBufferStart() {
  }
  override fun onBufferStop() {
  }
  override fun onCues(cues: List<Cue>) {
  }
  override fun onEnded() {
  }
  override fun onError(errorCode: String, errorMessage: String) {
  }
  override fun onFirstPlay() {
  }
  override fun onFullScreenEnter() {
  }
  override fun onFullScreenExit() {
  }
  override fun onLoad() {
  }
  override fun onMediaReady() {
  }
  override fun onPause() {
  }
  override fun onPipModeEnter() {
  }
  override fun onPipModeExit() {
  }
  override fun onPlay() {
  }
  override fun onPlaybackRateChange() {
  }
  override fun onPlayerItemChange(
    updatePlayerItem: ByteArkPlayerItem,
    isPlaylist: Boolean,
    isQueue: Boolean,
    index: Int
  ) {
  }
  override fun onPlayerReady() {
  }
  override fun onPlayerSizeChange(width: Int, height: Int) {
  }
  override fun onProgressUpdate(position: Long, bufferedPosition: Long) {
  }
  override fun onSeekEnd() {
  }
  override fun onSeekStart() {
  }
  override fun onStop() {
  }
  override fun onStoryBoardLoaded(storyBoard: StoryBoard) {
  }
  override fun onTimelineUpdate(duration: Long, isLive: Boolean) {
  }
  override fun onVideoSizeChange(width: Int, height: Int) {
  }
}
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146

โดยสามารถ Implement Listener ได้จาก Interface PlayerFragmentListener

# 4. การเรียกใช้งาน Player API

สามารถเรียกใช้งาน Player API ได้ผ่านการใช้งาน ByteArkPlayerFragment Instance

โดย Function ทั้งหมด จะเป็นไปตาม Interface ByteArkPlayerFragmentController โดยสามารถใช้งานได้ดังนี้

interface ByteArkPlayerFragmentController {
  // Setup function
  fun startService()
  fun releaseService()
  fun addFragmentEventListener(listener: PlayerFragmentListener)
  fun removeFragmentEventListener(listener: PlayerFragmentListener)
  fun addCompanionAdSlot(byteArkCompanionAdSlot: ByteArkCompanionAdSlot)
  // Media Controller function
  fun openMedia(playerItem: ByteArkPlayerItem)
  fun openPlaylist(playlist: ByteArkPlayerPlaylist)
  fun getPlayerItem() : ByteArkPlayerItem?
  fun getCurrentQueue() : List<ByteArkPlayerItem>
  fun selectQueueItem(playerItem: ByteArkPlayerItem)
  fun addItemToQueue(playerItem: ByteArkPlayerItem)
  fun removeQueueItem(playerItem: ByteArkPlayerItem)
  fun getPlaylist() : ByteArkPlayerPlaylist?
  // Player Controller function
  fun play()
  fun pause()
  fun seekForward()
  fun seekBackward()
  fun seekTo(position: Long)
  fun next()
  fun previous()
  fun getCurrentAudio() : ByteArkAudio?
  fun getAudios() : List<ByteArkAudio>
  fun setAudio(audio: ByteArkAudio)
  fun getCurrentSubtitle() : ByteArkSubtitle?
  fun getSubtitles() : List<ByteArkSubtitle>
  fun setSubtitle(subtitle: ByteArkSubtitle)
  fun getCurrentResolution() : ByteArkResolution?
  fun getResolutions() : List<ByteArkResolution>
  fun setResolution(resolution: ByteArkResolution)
  fun getAvailablePlaybackSpeeds() : List<Float>
  fun getCurrentPlaybackSpeed() : Float
  fun setPlaybackSpeed(speed: Float)
  fun getCurrentTime() : Long
  fun getDuration() : Long
  fun isFullScreen() : Boolean
  fun isInPictureInPicture() : Boolean
  fun isBuffering() : Boolean
  fun isMuted() : Boolean
  fun isPlaying() : Boolean
  fun isReady() : Boolean
  fun isSeeking() : Boolean
  fun isEnded() : Boolean
  // UI Controller function
  fun toggleFullScreen()
  fun togglePictureInPicture()
  fun showControls()
  fun hideControls()
}
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68