File tree Expand file tree Collapse file tree 8 files changed +29
-40
lines changed Expand file tree Collapse file tree 8 files changed +29
-40
lines changed Original file line number Diff line number Diff line change @@ -15,6 +15,7 @@ type Packet struct {
1515	StreamID    uint32 
1616	Header      PacketHeader 
1717	Data        []byte 
18+ 	First       bool 
1819}
1920
2021func  (p  * Packet ) Type () uint8  {
Original file line number Diff line number Diff line change @@ -11,12 +11,13 @@ import (
1111)
1212
1313type  Reader  struct  {
14- 	r             * stream.Reader 
15- 	inited        bool 
16- 	demuxer       * Demuxer 
17- 	tagHeaderBuf  []byte 
18- 	bufSize       int 
19- 	FlvTagHeader  FlvTagHeader 
14+ 	r                  * stream.Reader 
15+ 	inited             bool 
16+ 	demuxer            * Demuxer 
17+ 	tagHeaderBuf       []byte 
18+ 	bufSize            int 
19+ 	FlvTagHeader       FlvTagHeader 
20+ 	loadedFirstPacket  bool 
2021}
2122
2223type  ReaderConf  func (* Reader )
@@ -83,12 +84,18 @@ func (fr *Reader) Read() (p *av.Packet, err error) {
8384		return  nil , ErrPreDataLen 
8485	}
8586
87+ 	if  ! fr .loadedFirstPacket  {
88+ 		fr .loadedFirstPacket  =  true 
89+ 		p .First  =  true 
90+ 	}
91+ 
8692	if  p .IsMetadata  {
8793		p .Data , err  =  amf .MetaDataReform (p .Data , amf .ADD )
8894		if  err  !=  nil  {
8995			return 
9096		}
97+ 		return  p , nil 
98+ 	} else  {
99+ 		return  p , fr .demuxer .DemuxH (p )
91100	}
92- 
93- 	return  p , fr .demuxer .DemuxH (p )
94101}
Original file line number Diff line number Diff line change @@ -83,7 +83,7 @@ func (w *Writer) Write(p *av.Packet) error {
8383		return  nil 
8484	}
8585	dataLen  :=  len (p .Data )
86- 	timestamp  :=  w .t .RecTimeStamp (p .TimeStamp )
86+ 	timestamp  :=  w .t .RecTimeStamp (p .TimeStamp ,  p . First )
8787
8888	preDataLen  :=  dataLen  +  headerLen 
8989	timestampExt  :=  timestamp  >>  24 
Original file line number Diff line number Diff line change @@ -87,7 +87,7 @@ func (source *Source) Write(p *av.Packet) (err error) {
8787	}
8888
8989	p  =  p .Clone ()
90- 	p .TimeStamp  =  source .t .RecTimeStamp (p .TimeStamp )
90+ 	p .TimeStamp  =  source .t .RecTimeStamp (p .TimeStamp ,  p . First )
9191
9292	select  {
9393	case  source .packetQueue  <-  p :
Original file line number Diff line number Diff line change @@ -63,7 +63,7 @@ func (w *HttpFlvWriter) Write(p *av.Packet) (err error) {
6363		return  av .ErrClosed 
6464	}
6565	p  =  p .Clone ()
66- 	p .TimeStamp  =  w .t .RecTimeStamp (p .TimeStamp )
66+ 	p .TimeStamp  =  w .t .RecTimeStamp (p .TimeStamp ,  p . First )
6767	select  {
6868	case  w .packetQueue  <-  p :
6969	default :
Original file line number Diff line number Diff line change @@ -14,7 +14,8 @@ type Reader struct {
1414	conn        ChunkReader 
1515	ReadBWInfo  StaticsBW 
1616
17- 	closed  uint32 
17+ 	closed             uint32 
18+ 	loadedFirstPacket  bool 
1819}
1920
2021func  NewReader (conn  ChunkReader ) * Reader  {
@@ -75,6 +76,11 @@ func (v *Reader) Read() (p *av.Packet, err error) {
7576	p .Data  =  cs .Data 
7677	p .TimeStamp  =  cs .Timestamp 
7778
79+ 	if  ! v .loadedFirstPacket  {
80+ 		v .loadedFirstPacket  =  true 
81+ 		p .First  =  true 
82+ 	}
83+ 
7884	v .SaveStatics (p .StreamID , uint64 (len (p .Data )), p .IsVideo )
7985	return  p , v .demuxer .DemuxH (p )
8086}
Original file line number Diff line number Diff line change @@ -64,7 +64,7 @@ func (w *Writer) Write(p *av.Packet) (err error) {
6464	}
6565
6666	p  =  p .Clone ()
67- 	p .TimeStamp  =  w .t .RecTimeStamp (p .TimeStamp )
67+ 	p .TimeStamp  =  w .t .RecTimeStamp (p .TimeStamp ,  p . First )
6868
6969	select  {
7070	case  w .packetQueue  <-  p :
Original file line number Diff line number Diff line change @@ -5,33 +5,8 @@ type Timestamp struct {
55	lastTimestamp  uint32 
66}
77
8- func  (t  * Timestamp ) RecTimeStamp (timestamp  uint32 ) uint32  {
9- 	// if typeID == av.TAG_VIDEO { 
10- 	// 	if timestamp < rw.videoTimestamp { 
11- 	// 		if rw.lastVideoTimestamp > timestamp { 
12- 	// 			rw.videoTimestamp += timestamp 
13- 	// 		} else { 
14- 	// 			rw.videoTimestamp += timestamp - rw.lastVideoTimestamp 
15- 	// 		} 
16- 	// 	} else { 
17- 	// 		rw.videoTimestamp = timestamp 
18- 	// 	} 
19- 	// 	rw.lastVideoTimestamp = timestamp 
20- 	// } else if typeID == av.TAG_AUDIO { 
21- 	// 	if timestamp < rw.audioTimestamp { 
22- 	// 		if rw.lastAudioTimestamp > timestamp { 
23- 	// 			rw.audioTimestamp += timestamp 
24- 	// 		} else { 
25- 	// 			rw.audioTimestamp += timestamp - rw.lastAudioTimestamp 
26- 	// 		} 
27- 	// 	} else { 
28- 	// 		rw.audioTimestamp = timestamp 
29- 	// 	} 
30- 	// 	rw.lastAudioTimestamp = timestamp 
31- 	// } 
32- 	// return rw.timeStamp() 
33- 
34- 	if  t .lastTimestamp  >  timestamp + 100  {
8+ func  (t  * Timestamp ) RecTimeStamp (timestamp  uint32 , reconn  bool ) uint32  {
9+ 	if  reconn  {
3510		t .baseTimestamp  +=  t .lastTimestamp 
3611		t .lastTimestamp  =  timestamp 
3712	}
 
 
   
 
     
   
   
          
    
    
     
    
      
     
     
    You can’t perform that action at this time.
  
 
    
  
    
      
        
     
       
      
     
   
 
    
    
  
 
  
 
     
    
0 commit comments