| 118 | } |
| 119 | |
| 120 | func (vt *Video) writeAVCCFrame(ts uint32, r *util.BLLReader, frame *util.BLL) (err error) { |
| 121 | var cts uint32 |
| 122 | cts, err = r.ReadBE(3) |
| 123 | if err != nil { |
| 124 | return err |
| 125 | } |
| 126 | vt.Value.PTS = time.Duration(ts+cts) * 90 |
| 127 | vt.Value.DTS = time.Duration(ts) * 90 |
| 128 | var nalulen uint32 |
| 129 | for nalulen, err = r.ReadBE(vt.nalulenSize); err == nil; nalulen, err = r.ReadBE(vt.nalulenSize) { |
| 130 | if remain := frame.ByteLength - r.GetOffset(); remain < int(nalulen) { |
| 131 | vt.Error("read nalu length error", zap.Int("nalulen", int(nalulen)), zap.Int("remain", remain)) |
| 132 | frame.Recycle() |
| 133 | vt.Value.Reset() |
| 134 | return |
| 135 | } |
| 136 | vt.AppendAuBytes(r.ReadN(int(nalulen))...) |
| 137 | } |
| 138 | return nil |
| 139 | } |
| 140 | |
| 141 | func (vt *Video) WriteAVCC(ts uint32, frame *util.BLL) (err error) { |
| 142 | if l := frame.ByteLength; l < 6 { |