mp4: bugfix write lastpkt
This commit is contained in:
parent
51ad6aeb7a
commit
975080658c
@ -169,22 +169,20 @@ func (self *Muxer) WriteHeader(streams []av.CodecData) (err error) {
|
|||||||
|
|
||||||
func (self *Muxer) WritePacket(pkt av.Packet) (err error) {
|
func (self *Muxer) WritePacket(pkt av.Packet) (err error) {
|
||||||
stream := self.streams[pkt.Idx]
|
stream := self.streams[pkt.Idx]
|
||||||
if err = stream.writePacket(pkt); err != nil {
|
if stream.lastpkt != nil {
|
||||||
return
|
if err = stream.writePacket(*stream.lastpkt, pkt.Time-stream.lastpkt.Time); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
stream.lastpkt = &pkt
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (self *Stream) writePacket(pkt av.Packet) (err error) {
|
func (self *Stream) writePacket(pkt av.Packet, rawdur time.Duration) (err error) {
|
||||||
if self.lasttime == 0 {
|
|
||||||
self.lasttime = pkt.Time
|
|
||||||
}
|
|
||||||
rawdur := pkt.Time - self.lasttime
|
|
||||||
if rawdur < 0 {
|
if rawdur < 0 {
|
||||||
err = fmt.Errorf("mp4: stream#%d time=%v < lasttime=%v", pkt.Idx, pkt.Time, self.lasttime)
|
err = fmt.Errorf("mp4: stream#%d time=%v < lasttime=%v", pkt.Idx, pkt.Time, self.lastpkt.Time)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
self.lasttime = pkt.Time
|
|
||||||
|
|
||||||
var filePos int64
|
var filePos int64
|
||||||
var sampleSize int
|
var sampleSize int
|
||||||
@ -235,6 +233,15 @@ func (self *Stream) writePacket(pkt av.Packet) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (self *Muxer) WriteTrailer() (err error) {
|
func (self *Muxer) WriteTrailer() (err error) {
|
||||||
|
for _, stream := range self.streams {
|
||||||
|
if stream.lastpkt != nil {
|
||||||
|
if err = stream.writePacket(*stream.lastpkt, 0); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
stream.lastpkt = nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
moov := &atom.Movie{}
|
moov := &atom.Movie{}
|
||||||
moov.Header = &atom.MovieHeader{
|
moov.Header = &atom.MovieHeader{
|
||||||
PreferredRate: atom.IntToFixed(1),
|
PreferredRate: atom.IntToFixed(1),
|
||||||
|
@ -14,7 +14,7 @@ type Stream struct {
|
|||||||
r io.ReadSeeker
|
r io.ReadSeeker
|
||||||
idx int
|
idx int
|
||||||
|
|
||||||
lasttime time.Duration
|
lastpkt *av.Packet
|
||||||
|
|
||||||
timeScale int64
|
timeScale int64
|
||||||
duration int64
|
duration int64
|
||||||
|
Loading…
x
Reference in New Issue
Block a user