# 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
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
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
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 เปลี่ยน |