Skip to content

Commit f9ad615

Browse files
mjneilthomshutt
authored andcommitted
open file with os.O_TRUNC when writing to file (#64)
1 parent d519baf commit f9ad615

File tree

4 files changed

+145
-1
lines changed

4 files changed

+145
-1
lines changed

mpd/fixtures/truncate.mpd

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
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="PT2S" availabilityStartTime="2019-12-03T20:57:14Z" minimumUpdatePeriod="PT5S" publishTime="2019-12-03T21:05:05Z" timeShiftBufferDepth="PT120S">
3+
<Period id="0">
4+
<AdaptationSet frameRate="90000/3000" id="0" segmentAlignment="true" maxWidth="720" contentType="video">
5+
<Representation sar="1:1" mimeType="video/mp4" bandwidth="306235" codecs="avc1.42c01e" height="480" id="0" width="720">
6+
<SegmentTemplate initialization="video_0/init.mp4" media="video_0/media_$Number$.m4s" startNumber="1" timescale="90000">
7+
<SegmentTimeline>
8+
<S t="127920" d="540000" r="4"></S>
9+
</SegmentTimeline>
10+
</SegmentTemplate>
11+
</Representation>
12+
<Representation sar="1:1" mimeType="video/mp4" bandwidth="201655" codecs="avc1.42c01e" height="360" id="2" width="640">
13+
<SegmentTemplate initialization="video_1/init.mp4" media="video_1/media_$Number$.m4s" startNumber="1" timescale="90000">
14+
<SegmentTimeline>
15+
<S t="127920" d="540000" r="4"></S>
16+
</SegmentTimeline>
17+
</SegmentTemplate>
18+
</Representation>
19+
</AdaptationSet>
20+
<AdaptationSet id="1" segmentAlignment="true" contentType="audio">
21+
<Representation mimeType="audio/mp4" audioSamplingRate="48000" bandwidth="97994" codecs="mp4a.40.2" id="1">
22+
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"></AudioChannelConfiguration>
23+
<SegmentTemplate initialization="audio_0/init.mp4" media="audio_0/media_$Number$.m4s" startNumber="1" timescale="90000">
24+
<SegmentTimeline>
25+
<S t="126000" d="414720"></S>
26+
<S t="540720" d="539520" r="3"></S>
27+
<S t="2698800" d="128640"></S>
28+
</SegmentTimeline>
29+
</SegmentTemplate>
30+
</Representation>
31+
<Representation mimeType="audio/mp4" audioSamplingRate="48000" bandwidth="97994" codecs="mp4a.40.2" id="3">
32+
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"></AudioChannelConfiguration>
33+
<SegmentTemplate initialization="audio_1/init.mp4" media="audio_1/media_$Number$.m4s" startNumber="1" timescale="90000">
34+
<SegmentTimeline>
35+
<S t="126000" d="414720"></S>
36+
<S t="540720" d="539520" r="3"></S>
37+
<S t="2698800" d="128640"></S>
38+
</SegmentTimeline>
39+
</SegmentTemplate>
40+
</Representation>
41+
</AdaptationSet>
42+
</Period>
43+
<Period id="1" start="PT31.421333333S">
44+
<AdaptationSet frameRate="90000/3000" id="0" segmentAlignment="true" maxWidth="720" contentType="video">
45+
<Representation sar="1:1" mimeType="video/mp4" bandwidth="311792" codecs="avc1.42c01e" height="480" id="0" width="720">
46+
<SegmentTemplate initialization="video_0/init.mp4" media="video_0/media_$Number$.m4s" startNumber="6" timescale="90000">
47+
<SegmentTimeline>
48+
<S t="2827920" d="540000" r="9"></S>
49+
</SegmentTimeline>
50+
</SegmentTemplate>
51+
</Representation>
52+
<Representation sar="1:1" mimeType="video/mp4" bandwidth="209067" codecs="avc1.42c01e" height="360" id="2" width="640">
53+
<SegmentTemplate initialization="video_1/init.mp4" media="video_1/media_$Number$.m4s" startNumber="6" timescale="90000">
54+
<SegmentTimeline>
55+
<S t="2827920" d="540000" r="9"></S>
56+
</SegmentTimeline>
57+
</SegmentTemplate>
58+
</Representation>
59+
</AdaptationSet>
60+
<AdaptationSet id="1" segmentAlignment="true" contentType="audio">
61+
<Representation mimeType="audio/mp4" audioSamplingRate="48000" bandwidth="97888" codecs="mp4a.40.2" id="1">
62+
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"></AudioChannelConfiguration>
63+
<SegmentTemplate initialization="audio_0/init.mp4" media="audio_0/media_$Number$.m4s" startNumber="7" timescale="90000">
64+
<SegmentTimeline>
65+
<S t="2827440" d="540000" r="9"></S>
66+
</SegmentTimeline>
67+
</SegmentTemplate>
68+
</Representation>
69+
<Representation mimeType="audio/mp4" audioSamplingRate="48000" bandwidth="97888" codecs="mp4a.40.2" id="3">
70+
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"></AudioChannelConfiguration>
71+
<SegmentTemplate initialization="audio_1/init.mp4" media="audio_1/media_$Number$.m4s" startNumber="7" timescale="90000">
72+
<SegmentTimeline>
73+
<S t="2827440" d="540000" r="9"></S>
74+
</SegmentTimeline>
75+
</SegmentTemplate>
76+
</Representation>
77+
</AdaptationSet>
78+
</Period>
79+
<UTCTiming value="https://time.akamai.com/?iso"></UTCTiming>
80+
</MPD>

mpd/fixtures/truncate_short.mpd

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
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="PT2S" availabilityStartTime="2019-12-03T20:57:14Z" minimumUpdatePeriod="PT5S" publishTime="2019-12-03T21:05:05Z" timeShiftBufferDepth="PT120S">
3+
<Period id="1" start="PT31.421333333S">
4+
<AdaptationSet frameRate="90000/3000" id="0" segmentAlignment="true" maxWidth="720" contentType="video">
5+
<Representation sar="1:1" mimeType="video/mp4" bandwidth="311792" codecs="avc1.42c01e" height="480" id="0" width="720">
6+
<SegmentTemplate initialization="video_0/init.mp4" media="video_0/media_$Number$.m4s" startNumber="6" timescale="90000">
7+
<SegmentTimeline>
8+
<S t="2827920" d="540000" r="9"></S>
9+
</SegmentTimeline>
10+
</SegmentTemplate>
11+
</Representation>
12+
<Representation sar="1:1" mimeType="video/mp4" bandwidth="209067" codecs="avc1.42c01e" height="360" id="2" width="640">
13+
<SegmentTemplate initialization="video_1/init.mp4" media="video_1/media_$Number$.m4s" startNumber="6" timescale="90000">
14+
<SegmentTimeline>
15+
<S t="2827920" d="540000" r="9"></S>
16+
</SegmentTimeline>
17+
</SegmentTemplate>
18+
</Representation>
19+
</AdaptationSet>
20+
<AdaptationSet id="1" segmentAlignment="true" contentType="audio">
21+
<Representation mimeType="audio/mp4" audioSamplingRate="48000" bandwidth="97888" codecs="mp4a.40.2" id="1">
22+
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"></AudioChannelConfiguration>
23+
<SegmentTemplate initialization="audio_0/init.mp4" media="audio_0/media_$Number$.m4s" startNumber="7" timescale="90000">
24+
<SegmentTimeline>
25+
<S t="2827440" d="540000" r="9"></S>
26+
</SegmentTimeline>
27+
</SegmentTemplate>
28+
</Representation>
29+
<Representation mimeType="audio/mp4" audioSamplingRate="48000" bandwidth="97888" codecs="mp4a.40.2" id="3">
30+
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"></AudioChannelConfiguration>
31+
<SegmentTemplate initialization="audio_1/init.mp4" media="audio_1/media_$Number$.m4s" startNumber="7" timescale="90000">
32+
<SegmentTimeline>
33+
<S t="2827440" d="540000" r="9"></S>
34+
</SegmentTimeline>
35+
</SegmentTemplate>
36+
</Representation>
37+
</AdaptationSet>
38+
</Period>
39+
<UTCTiming value="https://time.akamai.com/?iso"></UTCTiming>
40+
</MPD>

mpd/mpd_read_write.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ func Read(r io.Reader) (*MPD, error) {
4343
// path - Output path to write the manifest to.
4444
func (m *MPD) WriteToFile(path string) error {
4545
// Open the file to write the XML to
46-
f, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE, 0666)
46+
f, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)
4747
if err != nil {
4848
return err
4949
}

mpd/mpd_read_write_test.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,3 +382,27 @@ func TestWriteToFileInvalidFilePath(t *testing.T) {
382382
err := m.WriteToFile("")
383383
require.NotNil(t, err)
384384
}
385+
386+
func TestWriteToFileTruncate(t *testing.T) {
387+
out := "test-truncate.mpd"
388+
389+
m, err := ReadFromFile("fixtures/truncate.mpd")
390+
require.NoError(t, err)
391+
392+
err = m.WriteToFile(out)
393+
require.NoError(t, err)
394+
395+
defer os.Remove(out)
396+
397+
xmlStr := testfixtures.LoadFixture(out)
398+
testfixtures.CompareFixture(t, "fixtures/truncate.mpd", xmlStr)
399+
400+
m, err = ReadFromFile("fixtures/truncate_short.mpd")
401+
require.NoError(t, err)
402+
403+
err = m.WriteToFile(out)
404+
require.NoError(t, err)
405+
406+
xmlStr = testfixtures.LoadFixture(out)
407+
testfixtures.CompareFixture(t, "fixtures/truncate_short.mpd", xmlStr)
408+
}

0 commit comments

Comments
 (0)