ts: add packet size check

This commit is contained in:
nareix 2016-07-14 23:31:27 +08:00
parent 78e9ae4e38
commit ab8f020f63
2 changed files with 11 additions and 7 deletions

View File

@ -2,6 +2,7 @@ package ts
import ( import (
"bufio" "bufio"
"fmt"
"time" "time"
"github.com/nareix/pio" "github.com/nareix/pio"
"github.com/nareix/joy4/av" "github.com/nareix/joy4/av"
@ -207,6 +208,11 @@ func (self *Stream) payloadEnd() (n int, err error) {
if payload == nil { if payload == nil {
return return
} }
if self.datalen != 0 && len(payload) != self.datalen {
err = fmt.Errorf("ts: packet size mismatch size=%d correct=%d", len(payload), self.datalen)
return
}
self.data = nil
switch self.streamType { switch self.streamType {
case ElementaryStreamTypeAdtsAAC: case ElementaryStreamTypeAdtsAAC:
@ -258,8 +264,6 @@ func (self *Stream) payloadEnd() (n int, err error) {
} }
} }
self.data = nil
return return
} }
@ -269,15 +273,14 @@ func (self *Stream) handleTSPacket(start bool, iskeyframe bool, payload []byte)
return return
} }
var hdrlen int var hdrlen int
var datalen int if hdrlen, _, self.datalen, self.pts, self.dts, err = tsio.ParsePESHeader(payload); err != nil {
if hdrlen, _, datalen, self.pts, self.dts, err = tsio.ParsePESHeader(payload); err != nil {
return return
} }
self.iskeyframe = iskeyframe self.iskeyframe = iskeyframe
if datalen == 0 { if self.datalen == 0 {
self.data = make([]byte, 0, 16000) self.data = make([]byte, 0, 4096)
} else { } else {
self.data = make([]byte, 0, datalen) self.data = make([]byte, 0, self.datalen)
} }
self.data = append(self.data, payload[hdrlen:]...) self.data = append(self.data, payload[hdrlen:]...)
} else { } else {

View File

@ -24,6 +24,7 @@ type Stream struct {
iskeyframe bool iskeyframe bool
pts, dts time.Duration pts, dts time.Duration
data []byte data []byte
datalen int
} }
func timeToPesTs(tm time.Duration) uint64 { func timeToPesTs(tm time.Duration) uint64 {