From 938fe90bad0c03f610e616ab10af038409180ecf Mon Sep 17 00:00:00 2001 From: nareix Date: Thu, 30 Jun 2016 22:51:35 +0800 Subject: [PATCH] ReadHeader() -> Streams() --- avutil/avutil.go | 11 +--- pktque/normalizer.go | 75 ---------------------------- pktque/queue.go | 111 ----------------------------------------- transcode/transcode.go | 2 +- 4 files changed, 2 insertions(+), 197 deletions(-) delete mode 100644 pktque/normalizer.go delete mode 100644 pktque/queue.go diff --git a/avutil/avutil.go b/avutil/avutil.go index fb67562..1cc348c 100644 --- a/avutil/avutil.go +++ b/avutil/avutil.go @@ -19,10 +19,6 @@ func (self handlerDemuxer) Close() error { return self.r.Close() } -func (self handlerDemuxer) ReadHeader() error { - return self.Demuxer.(headerReader).ReadHeader() -} - type handlerMuxer struct { av.Muxer w io.WriteCloser @@ -73,16 +69,11 @@ func (self *Handlers) createUrl(u *url.URL, uri string) (w io.WriteCloser, err e return } -type headerReader interface { - ReadHeader() error -} - func (self *Handlers) Open(uri string) (demuxer av.DemuxCloser, err error) { if demuxer, err = self.OpenDemuxer(uri); err != nil { return } - hr := demuxer.(headerReader) - if err = hr.ReadHeader(); err != nil { + if _, err = demuxer.Streams(); err != nil { return } return diff --git a/pktque/normalizer.go b/pktque/normalizer.go deleted file mode 100644 index 5a621fd..0000000 --- a/pktque/normalizer.go +++ /dev/null @@ -1,75 +0,0 @@ -package pktque - -import ( - "github.com/nareix/av" - "time" - "fmt" -) - -const debugNormalizer = false - -type Normalizer struct { - ques Queues - streams []av.CodecData -} - -func (self *Normalizer) Push(pkt av.Packet) { -} - -func (self *Normalizer) Pop() (pkt av.Packet, dur time.Duration, ok bool) { - return -} - -func (self *Normalizer) Do(pkt av.Packet) (out []av.Packet) { - const MaxDiff = time.Millisecond*800 - const MaxCacheTime = time.Second*5 - - i := int(pkt.Idx) - que := &self.ques[i] - que.Push(pkt) - - if que.Tail().Time - que.Head().Time > MaxCacheTime { - que.Pop() - } - - for { - ok := true - diff := time.Duration(0) - for i := range self.ques { - if que.Count() == 0 { - ok = false - break - } - tm := self.ques[i].Tail().Time - for j := 0; j < i; j++ { - v := tm - self.ques[j].Tail().Time - if v < 0 { - v = -v - } - if v > diff { - diff = v - } - } - } - if !ok { - return - } - if diff > MaxDiff { - ok = false - } - } - - if debugNormalizer { - fmt.Println("normalizer: push", pkt.Idx, pkt.Time) - } - - return -} - -func NewNormalizer(streams []av.CodecData) *Normalizer { - self := &Normalizer{} - self.ques = make(Queues, len(streams)) - self.streams = streams - return self -} - diff --git a/pktque/queue.go b/pktque/queue.go deleted file mode 100644 index 00f54f8..0000000 --- a/pktque/queue.go +++ /dev/null @@ -1,111 +0,0 @@ -package pktque - -import ( - "github.com/nareix/av" - "time" -) - -// time -// --------------------> -// -// V-A-V-V-A-V-V-A-V-V -// | | -// head tail -// pop push - -type Queue struct { - buf []av.Packet - head int - tail int - n int - size int -} - -func (self *Queue) Push(pkt av.Packet) { - if self.size == self.n { - newsize := 0 - if self.size == 0 { - newsize = 8 - } else { - newsize = self.size*2 - } - newbuf := make([]av.Packet, newsize) - for i := 0; i < self.n; i++ { - j := (self.head+i)%self.size - newbuf[i] = self.buf[j] - } - newbuf[self.n] = pkt - self.n++ - self.buf = newbuf - self.size = newsize - self.head = 0 - self.tail = self.n - } else { - self.buf[self.tail] = pkt - self.tail = (self.tail+1)%self.size - self.n++ - } -} - -func (self *Queue) Pop() (pkt av.Packet) { - if self.n == 0 { - return - } - pkt = self.buf[self.head] - self.head = (self.head+1)%self.size - self.n-- - return -} - -func (self *Queue) Head() (pkt av.Packet) { - return self.buf[self.head] -} - -func (self *Queue) Tail() (pkt av.Packet) { - return self.buf[(self.tail-1+self.size)%self.size] -} - -func (self *Queue) HeadIdx(diff int) (pkt av.Packet) { - i := (self.head+diff)%self.size - return self.buf[i] -} - -func (self *Queue) TailIdx(diff int) (pkt av.Packet) { - i := (self.tail-1-diff+self.size)%self.size - return self.buf[i] -} - -func (self *Queue) Count() int { - return self.n -} - -type Queues []Queue - -func (self Queues) MinTimeIdx() (minidx int) { - mintm := time.Duration(0) - minidx = -1 - for i, que := range self { - if que.Count() > 0 { - headtm := que.Head().Time - if minidx == -1 || headtm < mintm { - minidx = i - mintm = headtm - } - } - } - return -} - -func (self Queues) RemoveBeforeTime(tm time.Duration) { - for i := range self { - que := &self[i] - for que.Count() > 0 { - if que.Head().Time < tm { - que.Pop() - } else { - break - } - } - } -} - diff --git a/transcode/transcode.go b/transcode/transcode.go index 07ef1ae..68be674 100644 --- a/transcode/transcode.go +++ b/transcode/transcode.go @@ -85,7 +85,7 @@ func (self *tStream) audioDecodeAndEncode(inpkt av.Packet) (outpkts []av.Packet, outpkt.Time = self.timeline.Pop(dur) if debug { - fmt.Println("transcode: pop", outpkt.Time) + fmt.Println("transcode: pop", outpkt.Time, dur) } outpkts = append(outpkts, outpkt)