Skip to content

Commit

Permalink
Add Media Playlist methods
Browse files Browse the repository at this point in the history
  • Loading branch information
sunfish-shogi committed Dec 18, 2024
1 parent ce35f12 commit e76eabf
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 4 deletions.
8 changes: 4 additions & 4 deletions master_playlist_tags.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ import (
type MediaType string

const (
MediaTypeAudio = "AUDIO"
MediaTypeVideo = "VIDEO"
MediaTypeSubtitles = "SUBTITLES"
MediaTypeClosedCaptions = "CLOSED-CAPTIONS"
MediaTypeAudio MediaType = "AUDIO"
MediaTypeVideo MediaType = "VIDEO"
MediaTypeSubtitles MediaType = "SUBTITLES"
MediaTypeClosedCaptions MediaType = "CLOSED-CAPTIONS"
)

// StreamInfAttrs represents the attributes of the EXT-X-STREAM-INF tag.
Expand Down
31 changes: 31 additions & 0 deletions media_playlist_tags.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,13 @@ import (
"time"
)

type MediaPlaylistType string

const (
MediaPlaylistTypeEvent MediaPlaylistType = "EVENT"
MediaPlaylistTypeVOD MediaPlaylistType = "VOD"
)

// MediaPlaylistTags represents the tags of a media playlist.
type MediaPlaylistTags Tags

Expand Down Expand Up @@ -57,6 +64,30 @@ func (tags MediaPlaylistTags) TargetDuration() int {
return duration
}

// SetTargetDuration sets the value of the EXT-X-TARGETDURATION tag.
func (tags MediaPlaylistTags) SetTargetDuration(duration int) {
tags[TagExtXTargetDuration] = []string{strconv.Itoa(duration)}
}

// PlaylistType returns the value of the EXT-X-PLAYLIST-TYPE tag.
func (tags MediaPlaylistTags) PlaylistType() MediaPlaylistType {
values, ok := tags[TagExtXPlaylistType]
if !ok || len(values) == 0 {
return ""
}
return MediaPlaylistType(values[0])
}

// SetPlaylistType sets the value of the EXT-X-PLAYLIST-TYPE tag.
func (tags MediaPlaylistTags) SetPlaylistType(playlistType MediaPlaylistType) {
tags[TagExtXPlaylistType] = []string{string(playlistType)}
}

// RemovePlaylistType removes the EXT-X-PLAYLIST-TYPE tag.
func (tags MediaPlaylistTags) RemovePlaylistType() {
delete(tags, TagExtXPlaylistType)
}

// MediaSequence returns the value of the EXT-X-MEDIA-SEQUENCE tag.
func (tags MediaPlaylistTags) MediaSequence() int64 {
values, ok := tags[TagExtXMediaSequence]
Expand Down
17 changes: 17 additions & 0 deletions media_playlist_tags_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,36 @@ func TestMediaPlaylistTags(t *testing.T) {
tags := MediaPlaylistTags{
"EXT-X-VERSION": []string{"4"},
"EXT-X-TARGETDURATION": []string{"12"},
"EXT-X-PLAYLIST-TYPE": []string{"VOD"},
"EXT-X-MEDIA-SEQUENCE": []string{"12345"},
"EXT-X-DISCONTINUITY-SEQUENCE": []string{"123"},
}
assert.Equal(t, int(4), tags.Version())
assert.Equal(t, 12, tags.TargetDuration())
assert.Equal(t, MediaPlaylistTypeVOD, tags.PlaylistType())
assert.Equal(t, int64(12345), tags.MediaSequence())
assert.Equal(t, int64(123), tags.DiscontinuitySequence())
})

t.Run("setters", func(t *testing.T) {
tags := make(MediaPlaylistTags)
tags.SetPlaylistType(MediaPlaylistTypeEvent)
tags.SetMediaSequence(12345)
tags.SetDiscontinuitySequence(123)
assert.Equal(t, MediaPlaylistTags{
"EXT-X-PLAYLIST-TYPE": []string{"EVENT"},
"EXT-X-MEDIA-SEQUENCE": []string{"12345"},
"EXT-X-DISCONTINUITY-SEQUENCE": []string{"123"},
}, tags)
})

t.Run("removers", func(t *testing.T) {
tags := MediaPlaylistTags{
"EXT-X-PLAYLIST-TYPE": []string{"EVENT"},
"EXT-X-MEDIA-SEQUENCE": []string{"12345"},
"EXT-X-DISCONTINUITY-SEQUENCE": []string{"123"},
}
tags.RemovePlaylistType()
assert.Equal(t, MediaPlaylistTags{
"EXT-X-MEDIA-SEQUENCE": []string{"12345"},
"EXT-X-DISCONTINUITY-SEQUENCE": []string{"123"},
Expand Down

0 comments on commit e76eabf

Please sign in to comment.