rewrite Track to Stream
This commit is contained in:
parent
a4e262dd22
commit
e01abfd2a6
20
demuxer.go
20
demuxer.go
@ -12,9 +12,9 @@ type Demuxer struct {
|
||||
|
||||
pat PAT
|
||||
pmt *PMT
|
||||
Tracks []*Track
|
||||
TrackH264 *Track
|
||||
TrackAAC *Track
|
||||
Tracks []*Stream
|
||||
TrackH264 *Stream
|
||||
TrackAAC *Stream
|
||||
}
|
||||
|
||||
// ParsePacket() (pid uint, counter int, isStart bool, pts, dst int64, isKeyFrame bool)
|
||||
@ -25,7 +25,7 @@ func (self *Demuxer) TimeScale() int64 {
|
||||
}
|
||||
|
||||
func (self *Demuxer) ReadHeader() (err error) {
|
||||
self.Tracks = []*Track{}
|
||||
self.Tracks = []*Stream{}
|
||||
self.TrackH264 = nil
|
||||
self.TrackAAC = nil
|
||||
|
||||
@ -50,7 +50,7 @@ func (self *Demuxer) ReadHeader() (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func (self *Demuxer) ReadSample() (stream *Track, err error) {
|
||||
func (self *Demuxer) ReadSample() (stream *Stream, err error) {
|
||||
if len(self.Tracks) == 0 {
|
||||
err = fmt.Errorf("no track")
|
||||
return
|
||||
@ -93,7 +93,7 @@ func (self *Demuxer) readPacket() (err error) {
|
||||
return
|
||||
}
|
||||
for _, info := range self.pmt.ElementaryStreamInfos {
|
||||
stream := &Track{}
|
||||
stream := &Stream{}
|
||||
|
||||
stream.demuxer = self
|
||||
stream.pid = info.ElementaryPID
|
||||
@ -125,11 +125,11 @@ func (self *Demuxer) readPacket() (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func (self *Track) GetMPEG4AudioConfig() aacparser.MPEG4AudioConfig {
|
||||
func (self *Stream) GetMPEG4AudioConfig() aacparser.MPEG4AudioConfig {
|
||||
return self.mpeg4AudioConfig
|
||||
}
|
||||
|
||||
func (self *Track) ReadSample() (pts int64, dts int64, isKeyFrame bool, data []byte, err error) {
|
||||
func (self *Stream) ReadSample() (pts int64, dts int64, isKeyFrame bool, data []byte, err error) {
|
||||
for !self.payloadReady {
|
||||
if err = self.demuxer.readPacket(); err != nil {
|
||||
return
|
||||
@ -148,7 +148,7 @@ func (self *Track) ReadSample() (pts int64, dts int64, isKeyFrame bool, data []b
|
||||
return
|
||||
}
|
||||
|
||||
func (self *Track) appendPayload() (err error) {
|
||||
func (self *Stream) appendPayload() (err error) {
|
||||
self.payload = self.buf.Bytes()
|
||||
|
||||
if self.Type == AAC {
|
||||
@ -168,7 +168,7 @@ func (self *Track) appendPayload() (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func (self *Track) appendPacket(header TSHeader, payload []byte) (err error) {
|
||||
func (self *Stream) appendPacket(header TSHeader, payload []byte) (err error) {
|
||||
r := bytes.NewReader(payload)
|
||||
lr := &io.LimitedReader{R: r, N: int64(len(payload))}
|
||||
|
||||
|
38
muxer.go
38
muxer.go
@ -13,12 +13,12 @@ type Muxer struct {
|
||||
tswPAT *TSWriter
|
||||
tswPMT *TSWriter
|
||||
elemStreams []ElementaryStreamInfo
|
||||
TrackH264 *Track
|
||||
Tracks []*Track
|
||||
TrackH264 *Stream
|
||||
Tracks []*Stream
|
||||
}
|
||||
|
||||
func (self *Muxer) newTrack(pid uint, streamId uint) (stream *Track) {
|
||||
stream = &Track{
|
||||
func (self *Muxer) newTrack(pid uint, streamId uint) (stream *Stream) {
|
||||
stream = &Stream{
|
||||
mux: self,
|
||||
tsw: &TSWriter{
|
||||
PID: pid,
|
||||
@ -30,7 +30,7 @@ func (self *Muxer) newTrack(pid uint, streamId uint) (stream *Track) {
|
||||
return
|
||||
}
|
||||
|
||||
func (self *Muxer) AddAACTrack() (stream *Track) {
|
||||
func (self *Muxer) AddAACTrack() (stream *Stream) {
|
||||
self.elemStreams = append(
|
||||
self.elemStreams,
|
||||
ElementaryStreamInfo{StreamType: ElementaryStreamTypeAdtsAAC, ElementaryPID: 0x101},
|
||||
@ -42,7 +42,7 @@ func (self *Muxer) AddAACTrack() (stream *Track) {
|
||||
return
|
||||
}
|
||||
|
||||
func (self *Muxer) AddH264Track() (stream *Track) {
|
||||
func (self *Muxer) AddH264Track() (stream *Stream) {
|
||||
self.elemStreams = append(
|
||||
self.elemStreams,
|
||||
ElementaryStreamInfo{StreamType: ElementaryStreamTypeH264, ElementaryPID: 0x100},
|
||||
@ -93,35 +93,35 @@ func (self *Muxer) WriteHeader() (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
func (self *Track) SetH264PPSAndSPS(pps []byte, sps []byte) {
|
||||
func (self *Stream) SetH264PPSAndSPS(pps []byte, sps []byte) {
|
||||
self.PPS, self.SPS = pps, sps
|
||||
}
|
||||
|
||||
func (self *Track) SetTimeScale(timeScale int64) {
|
||||
func (self *Stream) SetTimeScale(timeScale int64) {
|
||||
self.timeScale = timeScale
|
||||
}
|
||||
|
||||
func (self *Track) TimeScale() int64 {
|
||||
func (self *Stream) TimeScale() int64 {
|
||||
return self.timeScale
|
||||
}
|
||||
|
||||
func (self *Track) SetMPEG4AudioConfig(config aacparser.MPEG4AudioConfig) {
|
||||
func (self *Stream) SetMPEG4AudioConfig(config aacparser.MPEG4AudioConfig) {
|
||||
self.mpeg4AudioConfig = config
|
||||
}
|
||||
|
||||
func (self *Track) tsToPesTs(ts int64) uint64 {
|
||||
func (self *Stream) tsToPesTs(ts int64) uint64 {
|
||||
return uint64(ts)*PTS_HZ/uint64(self.timeScale) + PTS_HZ
|
||||
}
|
||||
|
||||
func (self *Track) tsToPCR(ts int64) uint64 {
|
||||
func (self *Stream) tsToPCR(ts int64) uint64 {
|
||||
return uint64(ts)*PCR_HZ/uint64(self.timeScale) + PCR_HZ
|
||||
}
|
||||
|
||||
func (self *Track) tsToTime(ts int64) float64 {
|
||||
func (self *Stream) tsToTime(ts int64) float64 {
|
||||
return float64(ts) / float64(self.timeScale)
|
||||
}
|
||||
|
||||
func (self *Track) WriteSample(pts int64, dts int64, isKeyFrame bool, data []byte) (err error) {
|
||||
func (self *Stream) WriteSample(pts int64, dts int64, isKeyFrame bool, data []byte) (err error) {
|
||||
if false {
|
||||
fmt.Println("WriteSample", self.Type, self.tsToTime(dts))
|
||||
}
|
||||
@ -180,11 +180,11 @@ func (self *Track) WriteSample(pts int64, dts int64, isKeyFrame bool, data []byt
|
||||
|
||||
/* about to remove */
|
||||
|
||||
func (self *Track) setPCR() {
|
||||
func (self *Stream) setPCR() {
|
||||
self.tsw.PCR = uint64(self.PTS) * PCR_HZ / uint64(self.timeScale)
|
||||
}
|
||||
|
||||
func (self *Track) getPesHeader(dataLength int) (data []byte) {
|
||||
func (self *Stream) getPesHeader(dataLength int) (data []byte) {
|
||||
if self.PTS == 0 {
|
||||
self.PTS = self.timeScale
|
||||
}
|
||||
@ -197,11 +197,11 @@ func (self *Track) getPesHeader(dataLength int) (data []byte) {
|
||||
return buf.Bytes()
|
||||
}
|
||||
|
||||
func (self *Track) incPTS(delta int) {
|
||||
func (self *Stream) incPTS(delta int) {
|
||||
self.PTS += int64(delta)
|
||||
}
|
||||
|
||||
func (self *Track) WriteH264NALU(sync bool, duration int, nalu []byte) (err error) {
|
||||
func (self *Stream) WriteH264NALU(sync bool, duration int, nalu []byte) (err error) {
|
||||
nalus := [][]byte{}
|
||||
|
||||
if !self.spsHasWritten {
|
||||
@ -234,7 +234,7 @@ func (self *Track) WriteH264NALU(sync bool, duration int, nalu []byte) (err erro
|
||||
return
|
||||
}
|
||||
|
||||
func (self *Track) WriteADTSAACFrame(duration int, frame []byte) (err error) {
|
||||
func (self *Stream) WriteADTSAACFrame(duration int, frame []byte) (err error) {
|
||||
if self.dataBuf != nil && self.dataBuf.Len > self.cacheSize {
|
||||
self.dataBuf.Prepend(self.getPesHeader(self.dataBuf.Len))
|
||||
self.tsw.RandomAccessIndicator = true
|
||||
|
Loading…
x
Reference in New Issue
Block a user