/
event_handling.go
96 lines (81 loc) · 1.87 KB
/
event_handling.go
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
package main
import (
"log"
vlc "github.com/adrg/libvlc-go/v2"
)
func main() {
// Initialize libVLC. Additional command line arguments can be passed in
// to libVLC by specifying them in the Init function.
if err := vlc.Init("--no-video", "--quiet"); err != nil {
log.Fatal(err)
}
defer vlc.Release()
// Create a new player.
player, err := vlc.NewPlayer()
if err != nil {
log.Fatal(err)
}
defer func() {
player.Stop()
player.Release()
}()
// Add a media file from path or from URL.
// Set player media from URL:
// media, err := player.LoadMediaFromURL("http://stream-uk1.radioparadise.com/mp3-32")
// Set player media from path:
media, err := player.LoadMediaFromPath("test.mp3")
if err != nil {
log.Fatal(err)
}
defer media.Release()
// Retrieve player event manager.
manager, err := player.EventManager()
if err != nil {
log.Fatal(err)
}
// Create event handler.
quit := make(chan struct{})
eventCallback := func(event vlc.Event, userData interface{}) {
switch event {
case vlc.MediaPlayerEndReached:
log.Println("Player end reached")
close(quit)
case vlc.MediaPlayerTimeChanged:
media, err := player.Media()
if err != nil {
log.Println(err)
break
}
stats, err := media.Stats()
if err != nil {
log.Println(err)
break
}
log.Printf("%+v\n", stats)
}
}
// Register events with the event manager.
events := []vlc.Event{
vlc.MediaPlayerTimeChanged,
vlc.MediaPlayerEndReached,
}
var eventIDs []vlc.EventID
for _, event := range events {
eventID, err := manager.Attach(event, eventCallback, nil)
if err != nil {
log.Fatal(err)
}
eventIDs = append(eventIDs, eventID)
}
// De-register attached events.
defer func() {
for _, eventID := range eventIDs {
manager.Detach(eventID)
}
}()
// Start playing the media.
if err = player.Play(); err != nil {
log.Fatal(err)
}
<-quit
}