Skip to content

Commit f16be35

Browse files
authored
Merge pull request #72 from zencoder/event-streams
add support for EventStreams
2 parents 79d8be2 + 911e562 commit f16be35

File tree

4 files changed

+95
-0
lines changed

4 files changed

+95
-0
lines changed

mpd/events.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package mpd
2+
3+
import "encoding/xml"
4+
5+
type EventStream struct {
6+
XMLName xml.Name `xml:"EventStream"`
7+
SchemeIDURI *string `xml:"schemeIdUri,attr"`
8+
Value *string `xml:"value,attr,omitempty"`
9+
Timescale *int64 `xml:"timescale,attr"`
10+
Events []Event `xml:"Event,omitempty"`
11+
}
12+
13+
type Event struct {
14+
XMLName xml.Name `xml:"Event"`
15+
ID *string `xml:"id,attr,omitempty"`
16+
PresentationTime *int64 `xml:"presentationTime,attr,omitempty"`
17+
Duration *int64 `xml:"duration,attr,omitempty"`
18+
}

mpd/events_test.go

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package mpd
2+
3+
import (
4+
"testing"
5+
6+
"github.com/zencoder/go-dash/helpers/ptrs"
7+
"github.com/zencoder/go-dash/helpers/require"
8+
"github.com/zencoder/go-dash/helpers/testfixtures"
9+
)
10+
11+
const (
12+
VALID_EVENT_STREAM_SCHEME_ID_URI = "urn:example:eventstream"
13+
VALID_EVENT_STREAM_VALUE = "eventstream"
14+
VALID_EVENT_STREAM_TIMESCALE int64 = 10
15+
)
16+
17+
func newEventStreamMPD() *MPD {
18+
m := NewDynamicMPD(
19+
DASH_PROFILE_LIVE,
20+
VALID_AVAILABILITY_START_TIME,
21+
VALID_MIN_BUFFER_TIME,
22+
)
23+
p := m.GetCurrentPeriod()
24+
25+
es := EventStream{
26+
SchemeIDURI: ptrs.Strptr(VALID_EVENT_STREAM_SCHEME_ID_URI),
27+
Value: ptrs.Strptr(VALID_EVENT_STREAM_VALUE),
28+
Timescale: ptrs.Int64ptr(VALID_EVENT_STREAM_TIMESCALE),
29+
}
30+
31+
e0 := Event{
32+
ID: ptrs.Strptr("event-0"),
33+
PresentationTime: ptrs.Int64ptr(100),
34+
Duration: ptrs.Int64ptr(50),
35+
}
36+
37+
e1 := Event{
38+
ID: ptrs.Strptr("event-1"),
39+
PresentationTime: ptrs.Int64ptr(200),
40+
Duration: ptrs.Int64ptr(50),
41+
}
42+
43+
es.Events = append(es.Events, e0, e1)
44+
p.EventStreams = append(p.EventStreams, es)
45+
46+
return m
47+
}
48+
49+
func TestEventStreamsWriteToString(t *testing.T) {
50+
m := newEventStreamMPD()
51+
52+
got, err := m.WriteToString()
53+
require.NoError(t, err)
54+
55+
testfixtures.CompareFixture(t, "fixtures/events.mpd", got)
56+
}
57+
58+
func TestReadEventStreams(t *testing.T) {
59+
m, err := ReadFromFile("fixtures/events.mpd")
60+
require.NoError(t, err)
61+
62+
got, err := m.WriteToString()
63+
require.NoError(t, err)
64+
65+
testfixtures.CompareFixture(t, "fixtures/events.mpd", got)
66+
}

mpd/fixtures/events.mpd

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" profiles="urn:mpeg:dash:profile:isoff-live:2011" type="dynamic" minBufferTime="PT1.97S" availabilityStartTime="1970-01-01T00:00:00Z">
3+
<Period>
4+
<EventStream schemeIdUri="urn:example:eventstream" value="eventstream" timescale="10">
5+
<Event id="event-0" presentationTime="100" duration="50"></Event>
6+
<Event id="event-1" presentationTime="200" duration="50"></Event>
7+
</EventStream>
8+
</Period>
9+
<UTCTiming></UTCTiming>
10+
</MPD>

mpd/mpd.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ type Period struct {
9393
SegmentList *SegmentList `xml:"SegmentList,omitempty"`
9494
SegmentTemplate *SegmentTemplate `xml:"SegmentTemplate,omitempty"`
9595
AdaptationSets []*AdaptationSet `xml:"AdaptationSet,omitempty"`
96+
EventStreams []EventStream `xml:"EventStream,omitempty"`
9697
}
9798

9899
type DescriptorType struct {

0 commit comments

Comments
 (0)