# การสร้าง 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

# ตัวอย่างวิธีการสร้าง Plugin

ในตัวอย่างนี้สาธิตวิธีสร้าง Plugin ที่จะ log event การเล่นวิดีโอ

  1. สร้าง ByteArkPlayerLoggerPlugin ที่ subclass มาจาก ByteArkPlayerPlugin
  2. Override PluginName เพื่อ return ชื่อของปลั๊กอิน
  3. Override func configure() ใน method นี้ จะทำการ subscribe event การเล่นวิดีโอ และ log event
  4. 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

หากต้องการเพิ่ม 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