-
Notifications
You must be signed in to change notification settings - Fork 65
/
Copy pathsegment_list_test.go
99 lines (77 loc) · 5.04 KB
/
segment_list_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package mpd
import (
"testing"
"github.com/zencoder/go-dash/v3/helpers/ptrs"
"github.com/zencoder/go-dash/v3/helpers/require"
"github.com/zencoder/go-dash/v3/helpers/testfixtures"
)
func TestSegmentListSerialization(t *testing.T) {
m := getSegmentListMPD()
xml, err := m.WriteToString()
require.NoError(t, err)
testfixtures.CompareFixture(t, "fixtures/segment_list.mpd", xml)
}
func TestSegmentListDeserialization(t *testing.T) {
xml := testfixtures.LoadFixture("fixtures/segment_list.mpd")
m, err := ReadFromString(xml)
require.NoError(t, err)
if err == nil {
expected := getSegmentListMPD()
require.EqualStringSlice(t, expected.Periods[0].BaseURL, m.Periods[0].BaseURL)
expectedAudioSegList := expected.Periods[0].AdaptationSets[0].Representations[0].SegmentList
audioSegList := m.Periods[0].AdaptationSets[0].Representations[0].SegmentList
require.EqualUInt32(t, *expectedAudioSegList.Timescale, *audioSegList.Timescale)
require.EqualUInt32(t, *expectedAudioSegList.Duration, *audioSegList.Duration)
require.EqualStringPtr(t, expectedAudioSegList.Initialization.SourceURL, audioSegList.Initialization.SourceURL)
require.EqualStringPtr(t, expectedAudioSegList.Initialization.Range, audioSegList.Initialization.Range)
for i := range expectedAudioSegList.SegmentURLs {
require.EqualStringPtr(t, expectedAudioSegList.SegmentURLs[i].Media, audioSegList.SegmentURLs[i].Media)
require.EqualStringPtr(t, expectedAudioSegList.SegmentURLs[i].Index, audioSegList.SegmentURLs[i].Index)
require.EqualStringPtr(t, expectedAudioSegList.SegmentURLs[i].IndexRange, audioSegList.SegmentURLs[i].IndexRange)
require.EqualStringPtr(t, expectedAudioSegList.SegmentURLs[i].MediaRange, audioSegList.SegmentURLs[i].MediaRange)
}
expectedVideoSegList := expected.Periods[0].AdaptationSets[1].Representations[0].SegmentList
videoSegList := m.Periods[0].AdaptationSets[1].Representations[0].SegmentList
require.EqualUInt32(t, *expectedVideoSegList.Timescale, *videoSegList.Timescale)
require.EqualUInt32(t, *expectedVideoSegList.Duration, *videoSegList.Duration)
require.EqualStringPtr(t, expectedVideoSegList.Initialization.Range, videoSegList.Initialization.Range)
require.EqualStringPtr(t, expectedVideoSegList.Initialization.SourceURL, videoSegList.Initialization.SourceURL)
for i := range expectedVideoSegList.SegmentURLs {
require.EqualStringPtr(t, expectedVideoSegList.SegmentURLs[i].Media, videoSegList.SegmentURLs[i].Media)
require.EqualStringPtr(t, expectedVideoSegList.SegmentURLs[i].Index, videoSegList.SegmentURLs[i].Index)
require.EqualStringPtr(t, expectedVideoSegList.SegmentURLs[i].IndexRange, videoSegList.SegmentURLs[i].IndexRange)
require.EqualStringPtr(t, expectedVideoSegList.SegmentURLs[i].MediaRange, videoSegList.SegmentURLs[i].MediaRange)
}
}
}
func getSegmentListMPD() *MPD {
m := NewMPD(DASH_PROFILE_LIVE, "PT30.016S", "PT2.000S")
m.period.BaseURL = []string{"http://localhost:8002/dash/"}
aas, _ := m.AddNewAdaptationSetAudioWithID("1", "audio/mp4", true, 1, "English")
ra, _ := aas.AddNewRepresentationAudio(48000, 255000, "mp4a.40.2", "audio_1")
asl := new(SegmentList)
asl.Timescale = ptrs.Uint32ptr(48000)
asl.Duration = ptrs.Uint32ptr(479232)
asl.Initialization = &URL{SourceURL: ptrs.Strptr("b4324d65-ad06-4735-9535-5cd4af84ebb6/dcb11457-9092-4410-b204-67b3c6d9a9e2/init.m4f")}
asegs := []*SegmentURL{}
asegs = append(asegs, &SegmentURL{Media: ptrs.Strptr("b4324d65-ad06-4735-9535-5cd4af84ebb6/dcb11457-9092-4410-b204-67b3c6d9a9e2/segment0.m4f")})
asegs = append(asegs, &SegmentURL{Media: ptrs.Strptr("b4324d65-ad06-4735-9535-5cd4af84ebb6/dcb11457-9092-4410-b204-67b3c6d9a9e2/segment1.m4f")})
asegs = append(asegs, &SegmentURL{Media: ptrs.Strptr("b4324d65-ad06-4735-9535-5cd4af84ebb6/dcb11457-9092-4410-b204-67b3c6d9a9e2/segment2.m4f")})
asegs = append(asegs, &SegmentURL{Media: ptrs.Strptr("b4324d65-ad06-4735-9535-5cd4af84ebb6/dcb11457-9092-4410-b204-67b3c6d9a9e2/segment3.m4f")})
asl.SegmentURLs = asegs
ra.SegmentList = asl
vas, _ := m.AddNewAdaptationSetVideoWithID("2", "video/mp4", "progressive", true, 1)
va, _ := vas.AddNewRepresentationVideo(int64(4172274), "avc1.640028", "video_1", "30000/1001", int64(1280), int64(720))
vsl := new(SegmentList)
vsl.Timescale = ptrs.Uint32ptr(30000)
vsl.Duration = ptrs.Uint32ptr(225120)
vsl.Initialization = &URL{SourceURL: ptrs.Strptr("b4324d65-ad06-4735-9535-5cd4af84ebb6/f2ad47b2-5362-46e6-ad1d-dff7b10f00b8/init.m4f")}
vsegs := []*SegmentURL{}
vsegs = append(vsegs, &SegmentURL{Media: ptrs.Strptr("b4324d65-ad06-4735-9535-5cd4af84ebb6/f2ad47b2-5362-46e6-ad1d-dff7b10f00b8/segment0.m4f")})
vsegs = append(vsegs, &SegmentURL{Media: ptrs.Strptr("b4324d65-ad06-4735-9535-5cd4af84ebb6/f2ad47b2-5362-46e6-ad1d-dff7b10f00b8/segment1.m4f")})
vsegs = append(vsegs, &SegmentURL{Media: ptrs.Strptr("b4324d65-ad06-4735-9535-5cd4af84ebb6/f2ad47b2-5362-46e6-ad1d-dff7b10f00b8/segment2.m4f")})
vsegs = append(vsegs, &SegmentURL{Media: ptrs.Strptr("b4324d65-ad06-4735-9535-5cd4af84ebb6/f2ad47b2-5362-46e6-ad1d-dff7b10f00b8/segment3.m4f")})
vsl.SegmentURLs = vsegs
va.SegmentList = vsl
return m
}