Skip to content

Commit e639dd1

Browse files
authored
Merge pull request #122 from edgeware/v0.26.1
Version 0.26.1 bug-fix
2 parents bacfe58 + a22a59e commit e639dd1

File tree

10 files changed

+45
-30
lines changed

10 files changed

+45
-30
lines changed

Versions.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
| Version | Highlight |
44
| ------ | --------- |
5+
| 0.26.1 | fix: don't move trak boxes to be before mvex |
56
| 0.26.0 | New example code for decrypting segment. New tool for cropping mp4 file. SEI parsing for H.264. Interpret timestamps |
67
| 0.25.0 | Support sample intervals. Control first sample flags. Create subtitle init segments. Minor improvements and fixes |
78
| 0.24.0 | api-change: DecodeFile lazy mode. Enhanced segmenter example with lazy read/write |

examples/decrypt-cenc/decrypt_cenc_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import (
1010
)
1111

1212
func TestDecodeCenc(t *testing.T) {
13-
inFile := "testdata/prog_8s_enc_dashinit.mp4"
14-
expectedOutFile := "testdata/prog_8s_dec_dashinit.mp4"
13+
inFile := "../../mp4/testdata/prog_8s_enc_dashinit.mp4"
14+
expectedOutFile := "../../mp4/testdata/prog_8s_dec_dashinit.mp4"
1515
hexString := "63cb5f7184dd4b689a5c5ff11ee6a328"
1616
ifh, err := os.Open(inFile)
1717
if err != nil {

mp4/mediasegment_test.go

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -196,15 +196,25 @@ func TestMoofEncrypted(t *testing.T) {
196196
}
197197
}
198198

199-
func BenchmarkDecodeEncode(b *testing.B) {
200-
inFile := "testdata/1.m4s"
201-
raw, _ := ioutil.ReadFile(inFile)
202-
203-
for i := 0; i < b.N; i++ {
204-
buf := bytes.NewBuffer(raw)
205-
f, _ := DecodeFile(buf)
206-
var bufInSeg bytes.Buffer
207-
f.FragEncMode = EncModeBoxTree
208-
_ = f.Encode(&bufInSeg)
199+
func TestDecodeEncodeCencFragmentedFile(t *testing.T) {
200+
inData, err := ioutil.ReadFile("testdata/prog_8s_enc_dashinit.mp4")
201+
if err != nil {
202+
t.Error(err)
203+
}
204+
inBuf := bytes.NewBuffer(inData)
205+
decFile, err := DecodeFile(inBuf)
206+
if err != nil {
207+
t.Error(err)
208+
}
209+
outSlice := make([]byte, 0, len(inData))
210+
outBuf := bytes.NewBuffer(outSlice)
211+
decFile.FragEncMode = EncFragFileMode(EncModeBoxTree)
212+
err = decFile.Encode(outBuf)
213+
if err != nil {
214+
t.Error(err)
215+
}
216+
outData := outBuf.Bytes()
217+
if !bytes.Equal(inData, outData) {
218+
t.Errorf("generated bytes differ from input")
209219
}
210220
}

mp4/moov.go

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,19 @@ func (m *MoovBox) AddChild(box Box) {
3434
m.Trak = trak
3535
}
3636
m.Traks = append(m.Traks, trak)
37-
if m.Mvex != nil { // Need to insert before mvex box
38-
for i, child := range m.Children {
39-
if child == m.Mvex {
40-
m.Children = append(m.Children[:i+1], m.Children[i:]...)
41-
m.Children[i] = trak
42-
return
43-
}
37+
// Possibley re-order to keep traks together on same
38+
// side of mvex or similar. Put this trak after last previous trak
39+
lastTrakIdx := 0
40+
for i, child := range m.Children {
41+
if child.Type() == "trak" {
42+
lastTrakIdx = i
4443
}
4544
}
45+
if lastTrakIdx != 0 && lastTrakIdx != len(m.Children)-1 { // last one in middle
46+
m.Children = append(m.Children[:lastTrakIdx+2], m.Children[lastTrakIdx+1:]...)
47+
m.Children[lastTrakIdx+1] = trak
48+
return
49+
}
4650
case "mvex":
4751
m.Mvex = box.(*MvexBox)
4852
case "pssh":

mp4/senc.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,12 +99,12 @@ func DecodeSenc(hdr *boxHeader, startPos uint64, r io.Reader) (Box, error) {
9999
// if perSampleIVSize is 0, we try to find the appropriate error given data length
100100
func (s *SencBox) ParseReadBox(perSampleIVSize byte, saiz *SaizBox) error {
101101
if !s.readButNotParsed {
102-
if perSampleIVSize != 0 {
103-
s.perSampleIVSize = byte(perSampleIVSize)
104-
}
105102
return fmt.Errorf("senc box already parsed")
106103
}
107104
sr := NewSliceReader(s.rawData)
105+
if perSampleIVSize != 0 {
106+
s.perSampleIVSize = byte(perSampleIVSize)
107+
}
108108
nrBytesLeft := uint32(sr.NrRemainingBytes())
109109

110110
if s.Flags&UseSubSampleEncryption == 0 {

mp4/testdata/golden_init_video.mp4

0 Bytes
Binary file not shown.

mp4/testdata/golden_init_video_mp4_dump.txt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,13 @@
99
- duration: 0
1010
- creation time: 0
1111
- modification time: 0
12+
[mvex] size=40
13+
[trex] size=32 version=0 flags=000000
14+
- trackID: 1
15+
- defaultSampleDescriptionIndex: 1
16+
- defaultSampleDuration: 0
17+
- defaultSampleSize: 0
18+
- defaultSampleFlags: 00000000 (isLeading=0 dependsOn=0 isDependedOn=0 hasRedundancy=0 padding=0 isNonSync=false degradationPriority=0)
1219
[trak] size=493
1320
[tkhd] size=92 version=0 flags=000007
1421
- trackID: 1
@@ -47,10 +54,3 @@
4754
[stsc] size=16 version=0 flags=000000
4855
[stsz] size=20 version=0 flags=000000
4956
[stco] size=16 version=0 flags=000000
50-
[mvex] size=40
51-
[trex] size=32 version=0 flags=000000
52-
- trackID: 1
53-
- defaultSampleDescriptionIndex: 1
54-
- defaultSampleDuration: 0
55-
- defaultSampleSize: 0
56-
- defaultSampleFlags: 00000000 (isLeading=0 dependsOn=0 isDependedOn=0 hasRedundancy=0 padding=0 isNonSync=false degradationPriority=0)
184 KB
Binary file not shown.
File renamed without changes.

mp4/version.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
)
88

99
var (
10-
commitVersion string = "v0.26.0" // May be updated using build flags
10+
commitVersion string = "v0.26.1" // May be updated using build flags
1111
commitDate string // commitDate in Epoch seconds (may be overridden using build flags)
1212
)
1313

0 commit comments

Comments
 (0)