Skip to content
This repository was archived by the owner on Sep 11, 2025. It is now read-only.

Commit 8a35b4b

Browse files
committed
Merge pull request #24 from juliancooper/setdefault-key-version-fix
Fix unnecessary playlist version change in SetDefaultKey
2 parents facecdd + 7052917 commit 8a35b4b

File tree

2 files changed

+36
-2
lines changed

2 files changed

+36
-2
lines changed

writer.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -516,9 +516,16 @@ func (p *MediaPlaylist) Close() {
516516
// Set encryption key appeared once in header of the playlist (pointer to MediaPlaylist.Key).
517517
// It useful when keys not changed during playback.
518518
// Set tag for the whole list.
519-
func (p *MediaPlaylist) SetDefaultKey(method, uri, iv, keyformat, keyformatversions string) {
520-
version(&p.ver, 5) // due section 7
519+
func (p *MediaPlaylist) SetDefaultKey(method, uri, iv, keyformat, keyformatversions string) error {
520+
// A Media Playlist MUST indicate a EXT-X-VERSION of 5 or higher if it
521+
// contains:
522+
// - The KEYFORMAT and KEYFORMATVERSIONS attributes of the EXT-X-KEY tag.
523+
if keyformat != "" && keyformatversions != "" {
524+
version(&p.ver, 5)
525+
}
521526
p.Key = &Key{method, uri, iv, keyformat, keyformatversions}
527+
528+
return nil
522529
}
523530

524531
// Set map appeared once in header of the playlist (pointer to MediaPlaylist.Key).

writer_test.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,33 @@ func TestSetKeyForMediaPlaylist(t *testing.T) {
171171
}
172172
}
173173

174+
// Create new media playlist
175+
// Add segment to media playlist
176+
// Set encryption key
177+
func TestSetDefaultKeyForMediaPlaylist(t *testing.T) {
178+
p, e := NewMediaPlaylist(3, 5)
179+
if e != nil {
180+
t.Fatalf("Create media playlist failed: %s", e)
181+
}
182+
e = p.SetDefaultKey("AES-128", "https://example.com", "iv", "", "")
183+
if e != nil {
184+
t.Errorf("Set default key to a media playlist failed: %s", e)
185+
}
186+
if p.ver != 3 {
187+
t.Errorf("SetDefaultKey to a media playlist changed version unnecessarily")
188+
}
189+
190+
// Test that using V5 features updates EXT-X-VERSION
191+
e = p.SetDefaultKey("AES-128", "https://example.com", "iv", "format", "vers")
192+
if e != nil {
193+
t.Errorf("Set key to a media playlist failed: %s", e)
194+
}
195+
if p.ver != 5 {
196+
t.Errorf("SetDefaultKey did not update version")
197+
}
198+
199+
}
200+
174201
// Create new media playlist
175202
// Add segment to media playlist
176203
// Set map

0 commit comments

Comments
 (0)