From 35974848dd589698fc2c139341f7a9c7fc19754c Mon Sep 17 00:00:00 2001 From: Matthew Neil Date: Wed, 5 Feb 2020 14:32:43 -0500 Subject: [PATCH 1/2] add support for EventStreams --- mpd/events.go | 18 +++++++++++ mpd/events_test.go | 66 +++++++++++++++++++++++++++++++++++++++++ mpd/fixtures/events.mpd | 10 +++++++ mpd/mpd.go | 1 + 4 files changed, 95 insertions(+) create mode 100644 mpd/events.go create mode 100644 mpd/events_test.go create mode 100644 mpd/fixtures/events.mpd diff --git a/mpd/events.go b/mpd/events.go new file mode 100644 index 0000000..0b2cfac --- /dev/null +++ b/mpd/events.go @@ -0,0 +1,18 @@ +package mpd + +import "encoding/xml" + +type EventStream struct { + XMLName xml.Name `xml:"EventStream"` + SchemeIDURI *string `xml:"schemeIdUri,attr"` + Value *string `xml:"value,attr,omitempty"` + Timescale *int64 `xml:"timescale,attr"` + Events []*Event `xml:"Event,omitempty"` +} + +type Event struct { + XMLName xml.Name `xml:"Event"` + ID *string `xml:"id,attr,omitempty"` + PresentationTime *int64 `xml:"presentationTime,attr,omitempty"` + Duration *int64 `xml:"duration,attr,omitempty"` +} diff --git a/mpd/events_test.go b/mpd/events_test.go new file mode 100644 index 0000000..42f795c --- /dev/null +++ b/mpd/events_test.go @@ -0,0 +1,66 @@ +package mpd + +import ( + "testing" + + "github.com/zencoder/go-dash/helpers/ptrs" + "github.com/zencoder/go-dash/helpers/require" + "github.com/zencoder/go-dash/helpers/testfixtures" +) + +const ( + VALID_EVENT_STREAM_SCHEME_ID_URI = "urn:example:eventstream" + VALID_EVENT_STREAM_VALUE = "eventstream" + VALID_EVENT_STREAM_TIMESCALE int64 = 10 +) + +func newEventStreamMPD() *MPD { + m := NewDynamicMPD( + DASH_PROFILE_LIVE, + VALID_AVAILABILITY_START_TIME, + VALID_MIN_BUFFER_TIME, + ) + p := m.GetCurrentPeriod() + + es := &EventStream{ + SchemeIDURI: ptrs.Strptr(VALID_EVENT_STREAM_SCHEME_ID_URI), + Value: ptrs.Strptr(VALID_EVENT_STREAM_VALUE), + Timescale: ptrs.Int64ptr(VALID_EVENT_STREAM_TIMESCALE), + } + + e0 := &Event{ + ID: ptrs.Strptr("event-0"), + PresentationTime: ptrs.Int64ptr(100), + Duration: ptrs.Int64ptr(50), + } + + e1 := &Event{ + ID: ptrs.Strptr("event-1"), + PresentationTime: ptrs.Int64ptr(200), + Duration: ptrs.Int64ptr(50), + } + + es.Events = append(es.Events, e0, e1) + p.EventStreams = append(p.EventStreams, es) + + return m +} + +func TestEventStreamsWriteToString(t *testing.T) { + m := newEventStreamMPD() + + got, err := m.WriteToString() + require.NoError(t, err) + + testfixtures.CompareFixture(t, "fixtures/events.mpd", got) +} + +func TestReadEventStreams(t *testing.T) { + m, err := ReadFromFile("fixtures/events.mpd") + require.NoError(t, err) + + got, err := m.WriteToString() + require.NoError(t, err) + + testfixtures.CompareFixture(t, "fixtures/events.mpd", got) +} diff --git a/mpd/fixtures/events.mpd b/mpd/fixtures/events.mpd new file mode 100644 index 0000000..b54d314 --- /dev/null +++ b/mpd/fixtures/events.mpd @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/mpd/mpd.go b/mpd/mpd.go index 3847f5f..d8af17a 100644 --- a/mpd/mpd.go +++ b/mpd/mpd.go @@ -92,6 +92,7 @@ type Period struct { SegmentList *SegmentList `xml:"SegmentList,omitempty"` SegmentTemplate *SegmentTemplate `xml:"SegmentTemplate,omitempty"` AdaptationSets []*AdaptationSet `xml:"AdaptationSet,omitempty"` + EventStreams []*EventStream `xml:"EventStream,omitempty"` } type DescriptorType struct { From 911e5628864b24f4595beadef7e859e6fd299574 Mon Sep 17 00:00:00 2001 From: Matthew Neil Date: Wed, 5 Feb 2020 14:58:43 -0500 Subject: [PATCH 2/2] no slice of pointers --- mpd/events.go | 2 +- mpd/events_test.go | 6 +++--- mpd/mpd.go | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/mpd/events.go b/mpd/events.go index 0b2cfac..ef7b981 100644 --- a/mpd/events.go +++ b/mpd/events.go @@ -7,7 +7,7 @@ type EventStream struct { SchemeIDURI *string `xml:"schemeIdUri,attr"` Value *string `xml:"value,attr,omitempty"` Timescale *int64 `xml:"timescale,attr"` - Events []*Event `xml:"Event,omitempty"` + Events []Event `xml:"Event,omitempty"` } type Event struct { diff --git a/mpd/events_test.go b/mpd/events_test.go index 42f795c..1c75d30 100644 --- a/mpd/events_test.go +++ b/mpd/events_test.go @@ -22,19 +22,19 @@ func newEventStreamMPD() *MPD { ) p := m.GetCurrentPeriod() - es := &EventStream{ + es := EventStream{ SchemeIDURI: ptrs.Strptr(VALID_EVENT_STREAM_SCHEME_ID_URI), Value: ptrs.Strptr(VALID_EVENT_STREAM_VALUE), Timescale: ptrs.Int64ptr(VALID_EVENT_STREAM_TIMESCALE), } - e0 := &Event{ + e0 := Event{ ID: ptrs.Strptr("event-0"), PresentationTime: ptrs.Int64ptr(100), Duration: ptrs.Int64ptr(50), } - e1 := &Event{ + e1 := Event{ ID: ptrs.Strptr("event-1"), PresentationTime: ptrs.Int64ptr(200), Duration: ptrs.Int64ptr(50), diff --git a/mpd/mpd.go b/mpd/mpd.go index d8af17a..d114aea 100644 --- a/mpd/mpd.go +++ b/mpd/mpd.go @@ -92,7 +92,7 @@ type Period struct { SegmentList *SegmentList `xml:"SegmentList,omitempty"` SegmentTemplate *SegmentTemplate `xml:"SegmentTemplate,omitempty"` AdaptationSets []*AdaptationSet `xml:"AdaptationSet,omitempty"` - EventStreams []*EventStream `xml:"EventStream,omitempty"` + EventStreams []EventStream `xml:"EventStream,omitempty"` } type DescriptorType struct {