File tree 1 file changed +23
-11
lines changed
1 file changed +23
-11
lines changed Original file line number Diff line number Diff line change @@ -66,27 +66,39 @@ func (d *Decoder) decodeOBUs(pkt *rtp.Packet) ([][]byte, error) {
66
66
67
67
z := (pkt .Payload [0 ] & 0b10000000 ) != 0
68
68
y := (pkt .Payload [0 ] & 0b01000000 ) != 0
69
+ w := (pkt .Payload [0 ] >> 4 ) & 0b11
69
70
payload := pkt .Payload [1 :]
70
71
var obus [][]byte
71
72
72
73
for len (payload ) > 0 {
73
- var size av1.LEB128
74
- n , err := size .Unmarshal (payload )
75
- if err != nil {
76
- d .resetFragments ()
77
- return nil , err
78
- }
79
- payload = payload [n :]
74
+ var obu []byte
75
+
76
+ if w == 0 || byte (len (obus )) < (w - 1 ) {
77
+ var size av1.LEB128
78
+ n , err := size .Unmarshal (payload )
79
+ if err != nil {
80
+ d .resetFragments ()
81
+ return nil , err
82
+ }
83
+ payload = payload [n :]
80
84
81
- if size == 0 || len (payload ) < int (size ) {
82
- return nil , fmt .Errorf ("invalid fragmented OBU (invalid size)" )
85
+ if size == 0 || len (payload ) < int (size ) {
86
+ d .resetFragments ()
87
+ return nil , fmt .Errorf ("invalid OBU size" )
88
+ }
89
+
90
+ obu , payload = payload [:size ], payload [size :]
91
+ } else {
92
+ obu , payload = payload , nil
83
93
}
84
94
85
- var obu []byte
86
- obu , payload = payload [:size ], payload [size :]
87
95
obus = append (obus , obu )
88
96
}
89
97
98
+ if w != 0 && len (obus ) != int (w ) {
99
+ return nil , fmt .Errorf ("invalid W field" )
100
+ }
101
+
90
102
// first OBU is continuation of previous one
91
103
if z {
92
104
if d .fragmentsSize == 0 {
You can’t perform that action at this time.
0 commit comments