diff --git a/reader.go b/reader.go index b19324eb..ce6d3e47 100644 --- a/reader.go +++ b/reader.go @@ -193,7 +193,7 @@ func decode(buf *bytes.Buffer, strict bool, customDecoders []CustomDecoder) (Pla wv := new(WV) master = NewMasterPlaylist() - media, err = NewMediaPlaylist(8, 1024) // Winsize for VoD will become 0, capacity auto extends + media, err = NewMediaPlaylist(8, 8*1024) // Winsize for VoD will become 0, capacity auto extends if err != nil { return nil, 0, fmt.Errorf("Create media playlist failed: %s", err) } diff --git a/structure.go b/structure.go index eb5d01a2..7a8d9380 100644 --- a/structure.go +++ b/structure.go @@ -193,6 +193,7 @@ type Alternative struct { Language string Name string Default bool + Channels string Autoselect string Forced string Characteristics string diff --git a/writer.go b/writer.go index dec3690c..8f191183 100644 --- a/writer.go +++ b/writer.go @@ -93,17 +93,17 @@ func (p *MasterPlaylist) Encode() *bytes.Buffer { } } - var altsWritten = make(map[string]bool) + var altsWritten = make(map[string]struct{}) for _, pl := range p.Variants { if pl.Alternatives != nil { for _, alt := range pl.Alternatives { // Make sure that we only write out an alternative once - altKey := fmt.Sprintf("%s-%s-%s-%s", alt.Type, alt.GroupId, alt.Name, alt.Language) - if altsWritten[altKey] { + altKey := fmt.Sprintf("%s-%s-%s-%s-%s", alt.Type, alt.GroupId, alt.Name, alt.Language, alt.URI) + if _, alreadyWritten := altsWritten[altKey]; alreadyWritten { continue } - altsWritten[altKey] = true + altsWritten[altKey] = struct{}{} p.buf.WriteString("#EXT-X-MEDIA:") if alt.Type != "" { @@ -126,6 +126,11 @@ func (p *MasterPlaylist) Encode() *bytes.Buffer { } else { p.buf.WriteString("NO") } + if alt.Channels != "" { + p.buf.WriteString(",CHANNELS=\"") + p.buf.WriteString(alt.Channels) + p.buf.WriteRune('"') + } if alt.Autoselect != "" { p.buf.WriteString(",AUTOSELECT=") p.buf.WriteString(alt.Autoselect)