Skip to content

Commit e76eabf

Browse files
committed
Add Media Playlist methods
1 parent ce35f12 commit e76eabf

File tree

3 files changed

+52
-4
lines changed

3 files changed

+52
-4
lines changed

master_playlist_tags.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ import (
1010
type MediaType string
1111

1212
const (
13-
MediaTypeAudio = "AUDIO"
14-
MediaTypeVideo = "VIDEO"
15-
MediaTypeSubtitles = "SUBTITLES"
16-
MediaTypeClosedCaptions = "CLOSED-CAPTIONS"
13+
MediaTypeAudio MediaType = "AUDIO"
14+
MediaTypeVideo MediaType = "VIDEO"
15+
MediaTypeSubtitles MediaType = "SUBTITLES"
16+
MediaTypeClosedCaptions MediaType = "CLOSED-CAPTIONS"
1717
)
1818

1919
// StreamInfAttrs represents the attributes of the EXT-X-STREAM-INF tag.

media_playlist_tags.go

+31
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,13 @@ import (
88
"time"
99
)
1010

11+
type MediaPlaylistType string
12+
13+
const (
14+
MediaPlaylistTypeEvent MediaPlaylistType = "EVENT"
15+
MediaPlaylistTypeVOD MediaPlaylistType = "VOD"
16+
)
17+
1118
// MediaPlaylistTags represents the tags of a media playlist.
1219
type MediaPlaylistTags Tags
1320

@@ -57,6 +64,30 @@ func (tags MediaPlaylistTags) TargetDuration() int {
5764
return duration
5865
}
5966

67+
// SetTargetDuration sets the value of the EXT-X-TARGETDURATION tag.
68+
func (tags MediaPlaylistTags) SetTargetDuration(duration int) {
69+
tags[TagExtXTargetDuration] = []string{strconv.Itoa(duration)}
70+
}
71+
72+
// PlaylistType returns the value of the EXT-X-PLAYLIST-TYPE tag.
73+
func (tags MediaPlaylistTags) PlaylistType() MediaPlaylistType {
74+
values, ok := tags[TagExtXPlaylistType]
75+
if !ok || len(values) == 0 {
76+
return ""
77+
}
78+
return MediaPlaylistType(values[0])
79+
}
80+
81+
// SetPlaylistType sets the value of the EXT-X-PLAYLIST-TYPE tag.
82+
func (tags MediaPlaylistTags) SetPlaylistType(playlistType MediaPlaylistType) {
83+
tags[TagExtXPlaylistType] = []string{string(playlistType)}
84+
}
85+
86+
// RemovePlaylistType removes the EXT-X-PLAYLIST-TYPE tag.
87+
func (tags MediaPlaylistTags) RemovePlaylistType() {
88+
delete(tags, TagExtXPlaylistType)
89+
}
90+
6091
// MediaSequence returns the value of the EXT-X-MEDIA-SEQUENCE tag.
6192
func (tags MediaPlaylistTags) MediaSequence() int64 {
6293
values, ok := tags[TagExtXMediaSequence]

media_playlist_tags_test.go

+17
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,36 @@ func TestMediaPlaylistTags(t *testing.T) {
1313
tags := MediaPlaylistTags{
1414
"EXT-X-VERSION": []string{"4"},
1515
"EXT-X-TARGETDURATION": []string{"12"},
16+
"EXT-X-PLAYLIST-TYPE": []string{"VOD"},
1617
"EXT-X-MEDIA-SEQUENCE": []string{"12345"},
1718
"EXT-X-DISCONTINUITY-SEQUENCE": []string{"123"},
1819
}
1920
assert.Equal(t, int(4), tags.Version())
2021
assert.Equal(t, 12, tags.TargetDuration())
22+
assert.Equal(t, MediaPlaylistTypeVOD, tags.PlaylistType())
2123
assert.Equal(t, int64(12345), tags.MediaSequence())
2224
assert.Equal(t, int64(123), tags.DiscontinuitySequence())
2325
})
2426

2527
t.Run("setters", func(t *testing.T) {
2628
tags := make(MediaPlaylistTags)
29+
tags.SetPlaylistType(MediaPlaylistTypeEvent)
2730
tags.SetMediaSequence(12345)
2831
tags.SetDiscontinuitySequence(123)
32+
assert.Equal(t, MediaPlaylistTags{
33+
"EXT-X-PLAYLIST-TYPE": []string{"EVENT"},
34+
"EXT-X-MEDIA-SEQUENCE": []string{"12345"},
35+
"EXT-X-DISCONTINUITY-SEQUENCE": []string{"123"},
36+
}, tags)
37+
})
38+
39+
t.Run("removers", func(t *testing.T) {
40+
tags := MediaPlaylistTags{
41+
"EXT-X-PLAYLIST-TYPE": []string{"EVENT"},
42+
"EXT-X-MEDIA-SEQUENCE": []string{"12345"},
43+
"EXT-X-DISCONTINUITY-SEQUENCE": []string{"123"},
44+
}
45+
tags.RemovePlaylistType()
2946
assert.Equal(t, MediaPlaylistTags{
3047
"EXT-X-MEDIA-SEQUENCE": []string{"12345"},
3148
"EXT-X-DISCONTINUITY-SEQUENCE": []string{"123"},

0 commit comments

Comments
 (0)