rewrite Track to Stream

This commit is contained in:
nareix 2016-04-21 19:21:52 +08:00
parent a4e262dd22
commit e01abfd2a6
3 changed files with 30 additions and 30 deletions

View File

@ -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))}

View File

@ -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

View File

@ -5,7 +5,7 @@ import (
"github.com/nareix/codec/aacparser"
)
type Track struct {
type Stream struct {
SPS []byte
PPS []byte