# Event Listeners Reference

ByteArk Player ส่ง Event ผ่าน 2 รูปแบบ: Delegate (ByteArkPlayerPlaybackDelegate) สำหรับการรับ Event แบบ Type-safe และ Notification (ByteArkPlayerPlaybackEngineNotification) สำหรับใช้งานใน Plugin

# รูปแบบที่ 1 — Delegate

มี 2 วิธีในการรับ Delegate callbacks:

Subclass ByteArkPlayerViewController และ override callback methods:

class PlayerViewController: ByteArkPlayerViewController {
  override func playbackPlay(player: ByteArkPlayer) {
    super.playbackPlay(player: player)
    // เริ่มเล่นวิดีโอ
  }
}
1
2
3
4
5
6

หรือ Assign delegate บน Player instance:

class CustomViewController: UIViewController, ByteArkPlayerPlaybackDelegate {
  override func viewDidLoad() {
    super.viewDidLoad()
    playerViewController.player.delegate = self
  }
  func playbackPlay(player: ByteArkPlayer) {
    // เริ่มเล่นวิดีโอ
  }
}
1
2
3
4
5
6
7
8
9
10

# Player lifecycle callbacks

Callback Description
playerReady(player:) Player ถูกสร้างและพร้อมรับวิดีโอ
playerLoadingMetadata(player:) เริ่มโหลด Metadata ของวิดีโอ
playerLoadedMetadata(player:) โหลด Metadata เสร็จสิ้น
playbackReady(player:, item:) พร้อมเล่นวิดีโอแล้ว
playbackFirstPlay(player:) เล่นวิดีโอเป็นครั้งแรก
playbackPlay(player:) เริ่ม/กลับมาเล่นวิดีโอ
playbackPause(player:) หยุดเล่นชั่วคราว
playbackEnded(player:) เล่นวิดีโอจบ
playbackStalled(player:) Player เข้าสู่สถานะ Stalled

# Buffer & seek callbacks

Callback Description
playbackSeeking(player:) เริ่ม Seek
playbackSeeked(player:) Seek เสร็จสิ้น
playbackBuffering(player:) เริ่ม Buffer
playbackBuffered(player:) Buffer เสร็จสิ้น

# Progress & status callbacks

Callback Description
playbackTimeupdate(player:, time:) ตำแหน่งเวลาในการเล่นวิดีโออัปเดต
playbackError(player:, error:) เกิด Error ในการเล่นวิดีโอ

# UI callbacks

Callback Description
playerEnterFullscreen(player:) เข้าโหมด Fullscreen
playerExitFullscreen(player:) ออกจากโหมด Fullscreen
playerEnterPictureInPictureMode(player:) เข้าโหมด Picture-in-Picture
playerExitPictureInPictureMode(player:) ออกจากโหมด Picture-in-Picture

# Tracks & playback callbacks

Callback Description
playbackMuted(player:) ปิดเสียง
playbackUnmuted(player:) เปิดเสียง
playbackSpeedChanged(player:, speed:) ความเร็วในการเล่นถูกเปลี่ยน
playbackVolumeChanged(player:, volume:) ระดับเสียงถูกเปลี่ยน
playbackAudioTrackChanged(player:, audioTrack:) Audio track ถูกเปลี่ยน
playbackSubtitleTrackChanged(player:, subtitleTrack:) ซับไตเติ้ลถูกเปลี่ยน
playbackResolutionChanged(player:, resolution:) ความละเอียดถูกเปลี่ยน
playbackPlaylistItemChanged(player:, item:) เปลี่ยนวิดีโอใน Playlist

# รูปแบบที่ 2 — Notification

สำหรับใช้งานภายใน Plugin หรือเมื่อต้องการ Observer แบบ Notification center:

let token = player.addPlaybackEngineObserve(
  for: ByteArkPlayerPlaybackEngineNotification.play
) { notification in
  // จัดการ event
}
1
2
3
4
5

ค่า Notification ทั้งหมดอยู่ใน enum ByteArkPlayerPlaybackEngineNotification:

Notification Description
.ready Player พร้อมใช้งาน
.loadingMetadata / .loadedMetadata สถานะการโหลด Metadata
.firstPlay / .play / .pause / .ended Playback lifecycle
.seeking / .seeked Seek
.stalled / .buffering / .buffered Buffer สถานะ
.timeupdate ตำแหน่งเวลาอัปเดต
.error เกิด Error
.playbackItemReady วิดีโอใน Playlist พร้อมเล่น
.enterPictureInPictureMode / .exitPictureInPictureMode PiP สถานะ
.enablePictureInPictureMode / .disablePictureInPictureMode เปิด/ปิด PiP
.enterFullscreenMode / .exitFullscreenMode Fullscreen สถานะ
.muted / .unmuted สถานะปิด/เปิดเสียง
.playbackSpeedChanged ความเร็วถูกเปลี่ยน
.playbackVolumeChanged ระดับเสียงถูกเปลี่ยน
.audioTrackChanged / .subtitleTrackChanged / .resolutionChanged Track/Quality เปลี่ยน
.playlistItemChanged Playlist item เปลี่ยน