From af566d64f3b66c1ec3ef2ec3797c8f619a59fdb5 Mon Sep 17 00:00:00 2001 From: Bobby Peck Date: Fri, 11 Aug 2017 13:31:27 -0700 Subject: [PATCH] Omit URI for Key method NONE --- writer.go | 64 +++++++++++++++++++++++++++----------------------- writer_test.go | 17 ++++++++++++++ 2 files changed, 51 insertions(+), 30 deletions(-) diff --git a/writer.go b/writer.go index 0b89b9ed..36f0c8ec 100644 --- a/writer.go +++ b/writer.go @@ -342,22 +342,24 @@ func (p *MediaPlaylist) Encode() *bytes.Buffer { p.buf.WriteString("#EXT-X-KEY:") p.buf.WriteString("METHOD=") p.buf.WriteString(p.Key.Method) - p.buf.WriteString(",URI=\"") - p.buf.WriteString(p.Key.URI) - p.buf.WriteRune('"') - if p.Key.IV != "" { - p.buf.WriteString(",IV=") - p.buf.WriteString(p.Key.IV) - } - if p.Key.Keyformat != "" { - p.buf.WriteString(",KEYFORMAT=\"") - p.buf.WriteString(p.Key.Keyformat) - p.buf.WriteRune('"') - } - if p.Key.Keyformatversions != "" { - p.buf.WriteString(",KEYFORMATVERSIONS=\"") - p.buf.WriteString(p.Key.Keyformatversions) + if p.Key.Method != "NONE" { + p.buf.WriteString(",URI=\"") + p.buf.WriteString(p.Key.URI) p.buf.WriteRune('"') + if p.Key.IV != "" { + p.buf.WriteString(",IV=") + p.buf.WriteString(p.Key.IV) + } + if p.Key.Keyformat != "" { + p.buf.WriteString(",KEYFORMAT=\"") + p.buf.WriteString(p.Key.Keyformat) + p.buf.WriteRune('"') + } + if p.Key.Keyformatversions != "" { + p.buf.WriteString(",KEYFORMATVERSIONS=\"") + p.buf.WriteString(p.Key.Keyformatversions) + p.buf.WriteRune('"') + } } p.buf.WriteRune('\n') } @@ -524,22 +526,24 @@ func (p *MediaPlaylist) Encode() *bytes.Buffer { p.buf.WriteString("#EXT-X-KEY:") p.buf.WriteString("METHOD=") p.buf.WriteString(seg.Key.Method) - p.buf.WriteString(",URI=\"") - p.buf.WriteString(seg.Key.URI) - p.buf.WriteRune('"') - if seg.Key.IV != "" { - p.buf.WriteString(",IV=") - p.buf.WriteString(seg.Key.IV) - } - if seg.Key.Keyformat != "" { - p.buf.WriteString(",KEYFORMAT=\"") - p.buf.WriteString(seg.Key.Keyformat) - p.buf.WriteRune('"') - } - if seg.Key.Keyformatversions != "" { - p.buf.WriteString(",KEYFORMATVERSIONS=\"") - p.buf.WriteString(seg.Key.Keyformatversions) + if seg.Key.Method != "NONE" { + p.buf.WriteString(",URI=\"") + p.buf.WriteString(seg.Key.URI) p.buf.WriteRune('"') + if seg.Key.IV != "" { + p.buf.WriteString(",IV=") + p.buf.WriteString(seg.Key.IV) + } + if seg.Key.Keyformat != "" { + p.buf.WriteString(",KEYFORMAT=\"") + p.buf.WriteString(seg.Key.Keyformat) + p.buf.WriteRune('"') + } + if seg.Key.Keyformatversions != "" { + p.buf.WriteString(",KEYFORMATVERSIONS=\"") + p.buf.WriteString(seg.Key.Keyformatversions) + p.buf.WriteRune('"') + } } p.buf.WriteRune('\n') } diff --git a/writer_test.go b/writer_test.go index c7381568..c737e690 100644 --- a/writer_test.go +++ b/writer_test.go @@ -430,6 +430,23 @@ func TestEncryptionKeysInMediaPlaylist(t *testing.T) { } } +func TestEncryptionKeyMethodNoneInMediaPlaylist(t *testing.T) { + p, e := NewMediaPlaylist(5, 5) + if e != nil { + t.Fatalf("Create media playlist failed: %s", e) + } + p.Append("segment-1.ts", 4, "") + p.SetKey("AES-128", "key-uri", "iv", "identity", "1") + p.Append("segment-2.ts", 4, "") + p.SetKey("NONE", "", "", "", "") + expected := `#EXT-X-KEY:METHOD=NONE +#EXTINF:4.000, +segment-2.ts` + if !strings.Contains(p.String(), expected) { + t.Errorf("Manifest %+v did not contain expected %+v", p, expected) + } +} + // Create new media playlist // Add 10 segments to media playlist // Encode structure to HLS with integer target durations