@@ -29,7 +29,6 @@ func TestJitterBuffer(t *testing.T) {
2929 assert .Equal (jb .packets .Length (), uint16 (4 ))
3030 assert .Equal (jb .lastSequence , uint16 (5012 ))
3131 })
32-
3332 t .Run ("Appends packets and begins playout" , func (* testing.T ) {
3433 jb := New ()
3534 for i := 0 ; i < 100 ; i ++ {
@@ -42,6 +41,18 @@ func TestJitterBuffer(t *testing.T) {
4241 assert .Equal (head .SequenceNumber , uint16 (5012 ))
4342 assert .Equal (err , nil )
4443 })
44+ t .Run ("Appends packets and begins playout" , func (* testing.T ) {
45+ jb := New (WithMinimumPacketCount (1 ))
46+ for i := 0 ; i < 2 ; i ++ {
47+ jb .Push (& rtp.Packet {Header : rtp.Header {SequenceNumber : uint16 (5012 + i ), Timestamp : uint32 (512 + i )}, Payload : []byte {0x02 }})
48+ }
49+ assert .Equal (jb .packets .Length (), uint16 (2 ))
50+ assert .Equal (jb .state , Emitting )
51+ assert .Equal (jb .playoutHead , uint16 (5012 ))
52+ head , err := jb .Pop ()
53+ assert .Equal (head .SequenceNumber , uint16 (5012 ))
54+ assert .Equal (err , nil )
55+ })
4556 t .Run ("Wraps playout correctly" , func (* testing.T ) {
4657 jb := New ()
4758 for i := 0 ; i < 100 ; i ++ {
@@ -99,6 +110,20 @@ func TestJitterBuffer(t *testing.T) {
99110 assert .Equal (pkt .SequenceNumber , uint16 (5000 ))
100111 assert .Equal (err , nil )
101112 })
113+ t .Run ("Pops at sequence with an invalid sequence number" , func (* testing.T ) {
114+ jb := New ()
115+ for i := 0 ; i < 50 ; i ++ {
116+ sqnum := uint16 ((math .MaxUint16 - 32 + i ) % math .MaxUint16 )
117+ jb .Push (& rtp.Packet {Header : rtp.Header {SequenceNumber : sqnum , Timestamp : uint32 (512 + i )}, Payload : []byte {0x02 }})
118+ }
119+ jb .Push (& rtp.Packet {Header : rtp.Header {SequenceNumber : 1019 , Timestamp : uint32 (9000 )}, Payload : []byte {0x02 }})
120+ jb .Push (& rtp.Packet {Header : rtp.Header {SequenceNumber : 1020 , Timestamp : uint32 (9000 )}, Payload : []byte {0x02 }})
121+ assert .Equal (jb .packets .Length (), uint16 (52 ))
122+ assert .Equal (jb .state , Emitting )
123+ head , err := jb .PopAtSequence (uint16 (9000 ))
124+ assert .Equal (head , (* rtp .Packet )(nil ))
125+ assert .NotEqual (err , nil )
126+ })
102127 t .Run ("Pops at timestamp with multiple packets" , func (* testing.T ) {
103128 jb := New ()
104129 for i := 0 ; i < 50 ; i ++ {
@@ -120,4 +145,25 @@ func TestJitterBuffer(t *testing.T) {
120145 assert .Equal (head .SequenceNumber , uint16 (math .MaxUint16 - 32 ))
121146 assert .Equal (err , nil )
122147 })
148+ t .Run ("Peeks at timestamp with multiple packets" , func (* testing.T ) {
149+ jb := New ()
150+ for i := 0 ; i < 50 ; i ++ {
151+ sqnum := uint16 ((math .MaxUint16 - 32 + i ) % math .MaxUint16 )
152+ jb .Push (& rtp.Packet {Header : rtp.Header {SequenceNumber : sqnum , Timestamp : uint32 (512 + i )}, Payload : []byte {0x02 }})
153+ }
154+ jb .Push (& rtp.Packet {Header : rtp.Header {SequenceNumber : 1019 , Timestamp : uint32 (9000 )}, Payload : []byte {0x02 }})
155+ jb .Push (& rtp.Packet {Header : rtp.Header {SequenceNumber : 1020 , Timestamp : uint32 (9000 )}, Payload : []byte {0x02 }})
156+ assert .Equal (jb .packets .Length (), uint16 (52 ))
157+ assert .Equal (jb .state , Emitting )
158+ head , err := jb .PeekAtSequence (uint16 (1019 ))
159+ assert .Equal (head .SequenceNumber , uint16 (1019 ))
160+ assert .Equal (err , nil )
161+ head , err = jb .PeekAtSequence (uint16 (1020 ))
162+ assert .Equal (head .SequenceNumber , uint16 (1020 ))
163+ assert .Equal (err , nil )
164+
165+ head , err = jb .PopAtSequence (uint16 (math .MaxUint16 - 32 ))
166+ assert .Equal (head .SequenceNumber , uint16 (math .MaxUint16 - 32 ))
167+ assert .Equal (err , nil )
168+ })
123169}
0 commit comments