# การสร้าง Plugins สำหรับ ByteArk Player SDK for iOS
ByteArk Player SDK for iOS มาพร้อมกับระบบ Plugin ที่ทำให้สามารถปรับแต่ง video player ให้เหมาะกับความต้องการของคุณได้
# วิธีการสร้าง Plugin
ในการสร้าง Plugin ของ ByteArk Player SDK for iOS จะให้ class ByteArkPlayerPlugin สำหรับใช้ subclass ซึ่ง class นี้มาพร้อมกับ player attribute ที่เป็น instance ของ ByteArkPlayer ที่กำลังใช้งานอยู่
open class ByteArkPlayerPlugin: NSObject {
/// A ByteArkPlayer instance, plugin will have a player instance before the configure function is called
public var player: ByteArkPlayer?
// Provide plugin name
open class var PluginName: String { get }
public override init() {
super.init()
}
/// Configure plugin such as subscribe notification event, setup views etc...
open func configure() {
}
/// Destroy plugin to unsubscribe notification event, remove views etc...
open func destroy() {
}
/// Adds an entry to the notification center to receive notifications that passed to the provided block.
///
///- Parameters:
/// - notification: the Notification.Name to register for delivery to the observer block
/// - block: the block that executes when receiving a notification.
open func addPluginObserver(
for notification: ByteArkPlayerPluginNotification,
using block: @escaping (Notification) -> Void) -> any NSObjectProtocol {
}
}
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
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
# ตัวอย่างวิธีการสร้าง Plugin
ในตัวอย่างนี้สาธิตวิธีสร้าง Plugin ที่จะ log event การเล่นวิดีโอ
- สร้าง
ByteArkPlayerLoggerPlugin
ที่ subclass มาจากByteArkPlayerPlugin
- Override
PluginName
เพื่อ return ชื่อของปลั๊กอิน - Override
func configure()
ใน method นี้ จะทำการ subscribe event การเล่นวิดีโอ และ log event - Override
func destroy()
ใน method นี้ จะทำการ unsubscribe event ที่เราได้ subscribe ไว้ในconfigure
method
class ByteArkPlayerLoggerPlugin: ByteArkPlayerPlugin {
private var observerTokens: [NSObjectProtocol] = []
override class var PluginName: String {
"ByteArkPlayerLoggerPlugin"
}
override func configure() {
// Handle ByteArk Player events
var token: NSObjectProtocol
let ByteArkPlayerNotification = ByteArkPlayerPlaybackEngineNotification.self
// subscribe events
token = player.addPlaybackEngineObserver(for: ByteArkPlayerNotification.ready, using: playbackEngineReady(_:))
observerTokens.append(token)
token = player.addPlaybackEngineObserver(for: ByteArkPlayerNotification.firstPlay, using: playbackEnginePlay(_:))
observerTokens.append(token)
token = player.addPlaybackEngineObserver(for: ByteArkPlayerNotification.firstPlay, using: playbackEnginePause(_:))
observerTokens.append(token)
token = player.addPlaybackEngineObserver(for: ByteArkPlayerNotification.firstPlay, using: playbackEngineEnded(_:))
observerTokens.append(token)
}
override func destroy() {
let nc = NotificationCenter.default
// Handle ByteArk Player events
for token in observerTokens {
nc.removeObserver(token)
}
observerTokens.removeAll()
}
@objc func playbackEngineReady(notification: Notification) {
print("Player Ready")
}
@objc func playbackEnginePlay(notification: Notification) {
print("Playback Play")
}
@objc func playbackEnginePause(notification: Notification) {
print("Playback Pause")
}
@objc func playbackEngineEnded(notification: Notification) {
print("Playback End")
}
}
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
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
หากต้องการเพิ่ม Plugin ของคุณไปยัง ByteArkPlayer ให้ใช้ method .addPlugin(plugin:, name: )
ใน ByteArkPlayerConfigBuilder
let loggerPlugin = ByteArkPlayerLoggerPlugin()
do {
let config = try ByteArkPlayerConfigBuilder()
.item(item)
.autoplay(true)
.addPlugin(plugin: loggerPlugin, with: loggerPlugin.PluginName)
.build()
player.configure(with: config)
} catch {
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13