testing
This commit is contained in:
		| @@ -3,23 +3,22 @@ package mp4 | |||||||
| import ( | import ( | ||||||
| 	"bufio" | 	"bufio" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| 	"io" |  | ||||||
| 	"time" |  | ||||||
|  |  | ||||||
| 	"github.com/deepch/vdk/codec/h265parser" |  | ||||||
|  |  | ||||||
| 	"github.com/deepch/vdk/av" | 	"github.com/deepch/vdk/av" | ||||||
| 	"github.com/deepch/vdk/codec/aacparser" | 	"github.com/deepch/vdk/codec/aacparser" | ||||||
| 	"github.com/deepch/vdk/codec/h264parser" | 	"github.com/deepch/vdk/codec/h264parser" | ||||||
|  | 	"github.com/deepch/vdk/codec/h265parser" | ||||||
| 	"github.com/deepch/vdk/format/mp4/mp4io" | 	"github.com/deepch/vdk/format/mp4/mp4io" | ||||||
| 	"github.com/deepch/vdk/utils/bits/pio" | 	"github.com/deepch/vdk/utils/bits/pio" | ||||||
|  | 	"io" | ||||||
|  | 	"time" | ||||||
| ) | ) | ||||||
|  |  | ||||||
| type Muxer struct { | type Muxer struct { | ||||||
| 	w       io.WriteSeeker | 	w                  io.WriteSeeker | ||||||
| 	bufw    *bufio.Writer | 	bufw               *bufio.Writer | ||||||
| 	wpos    int64 | 	wpos               int64 | ||||||
| 	streams []*Stream | 	streams            []*Stream | ||||||
|  | 	NegativeTsMakeZero bool | ||||||
| } | } | ||||||
|  |  | ||||||
| func NewMuxer(w io.WriteSeeker) *Muxer { | func NewMuxer(w io.WriteSeeker) *Muxer { | ||||||
| @@ -206,8 +205,12 @@ func (self *Muxer) WritePacket(pkt av.Packet) (err error) { | |||||||
|  |  | ||||||
| func (self *Stream) writePacket(pkt av.Packet, rawdur time.Duration) (err error) { | func (self *Stream) writePacket(pkt av.Packet, rawdur time.Duration) (err error) { | ||||||
| 	if rawdur < 0 { | 	if rawdur < 0 { | ||||||
| 		err = fmt.Errorf("mp4: stream#%d time=%v < lasttime=%v", pkt.Idx, pkt.Time, self.lastpkt.Time) | 		if self.muxer.NegativeTsMakeZero { | ||||||
| 		return | 			rawdur = 0 | ||||||
|  | 		} else { | ||||||
|  | 			err = fmt.Errorf("mp4: stream#%d time=%v < lasttime=%v", pkt.Idx, pkt.Time, self.lastpkt.Time) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if _, err = self.muxer.bufw.Write(pkt.Data); err != nil { | 	if _, err = self.muxer.bufw.Write(pkt.Data); err != nil { | ||||||
|   | |||||||
| @@ -14,10 +14,11 @@ import ( | |||||||
| ) | ) | ||||||
|  |  | ||||||
| type Muxer struct { | type Muxer struct { | ||||||
| 	w       io.WriteSeeker | 	w                  io.WriteSeeker | ||||||
| 	bufw    *bufio.Writer | 	bufw               *bufio.Writer | ||||||
| 	wpos    int64 | 	wpos               int64 | ||||||
| 	streams []*Stream | 	streams            []*Stream | ||||||
|  | 	NegativeTsMakeZero bool | ||||||
| } | } | ||||||
|  |  | ||||||
| func NewMuxer(w io.WriteSeeker) *Muxer { | func NewMuxer(w io.WriteSeeker) *Muxer { | ||||||
| @@ -181,8 +182,12 @@ func (self *Muxer) WritePacket(pkt av.Packet) (err error) { | |||||||
|  |  | ||||||
| func (self *Stream) writePacket(pkt av.Packet, rawdur time.Duration) (err error) { | func (self *Stream) writePacket(pkt av.Packet, rawdur time.Duration) (err error) { | ||||||
| 	if rawdur < 0 { | 	if rawdur < 0 { | ||||||
| 		err = fmt.Errorf("mp4: stream#%d time=%v < lasttime=%v", pkt.Idx, pkt.Time, self.lastpkt.Time) | 		if self.muxer.NegativeTsMakeZero { | ||||||
| 		return | 			rawdur = 0 | ||||||
|  | 		} else { | ||||||
|  | 			err = fmt.Errorf("mp4: stream#%d time=%v < lasttime=%v", pkt.Idx, pkt.Time, self.lastpkt.Time) | ||||||
|  | 			return | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if _, err = self.muxer.bufw.Write(pkt.Data); err != nil { | 	if _, err = self.muxer.bufw.Write(pkt.Data); err != nil { | ||||||
|   | |||||||
| @@ -210,6 +210,7 @@ func (m *Muxer) OpenMP4() (err error) { | |||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
| 	m.muxer = mp4.NewMuxer(m.d) | 	m.muxer = mp4.NewMuxer(m.d) | ||||||
|  | 	m.muxer.NegativeTsMakeZero = true | ||||||
| 	if err = m.muxer.WriteHeader(m.gof.Streams); err != nil { | 	if err = m.muxer.WriteHeader(m.gof.Streams); err != nil { | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 deepch
					deepch