|
|
|
|
@ -516,6 +516,8 @@ func TestRTSPSourceRemovePadding(t *testing.T) {
@@ -516,6 +516,8 @@ func TestRTSPSourceRemovePadding(t *testing.T) {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func TestRTSPSourceOversizedPackets(t *testing.T) { |
|
|
|
|
for _, ca := range []string{"h264", "h265"} { |
|
|
|
|
t.Run(ca, func(t *testing.T) { |
|
|
|
|
l, err := net.Listen("tcp", "127.0.0.1:8555") |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
defer l.Close() |
|
|
|
|
@ -598,7 +600,10 @@ func TestRTSPSourceOversizedPackets(t *testing.T) {
@@ -598,7 +600,10 @@ func TestRTSPSourceOversizedPackets(t *testing.T) {
|
|
|
|
|
|
|
|
|
|
<-connected |
|
|
|
|
|
|
|
|
|
byts, _ = rtp.Packet{ |
|
|
|
|
var tosend []*rtp.Packet |
|
|
|
|
if ca == "h264" { |
|
|
|
|
tosend = []*rtp.Packet{ |
|
|
|
|
{ |
|
|
|
|
Header: rtp.Header{ |
|
|
|
|
Version: 2, |
|
|
|
|
Marker: true, |
|
|
|
|
@ -609,17 +614,11 @@ func TestRTSPSourceOversizedPackets(t *testing.T) {
@@ -609,17 +614,11 @@ func TestRTSPSourceOversizedPackets(t *testing.T) {
|
|
|
|
|
Padding: true, |
|
|
|
|
}, |
|
|
|
|
Payload: []byte{0x01, 0x02, 0x03, 0x04}, |
|
|
|
|
}.Marshal() |
|
|
|
|
err = conn.WriteInterleavedFrame(&base.InterleavedFrame{ |
|
|
|
|
Channel: 0, |
|
|
|
|
Payload: byts, |
|
|
|
|
}, make([]byte, 1024)) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
|
|
byts, _ = rtp.Packet{ |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
Header: rtp.Header{ |
|
|
|
|
Version: 2, |
|
|
|
|
Marker: true, |
|
|
|
|
Marker: false, |
|
|
|
|
PayloadType: 96, |
|
|
|
|
SequenceNumber: 124, |
|
|
|
|
Timestamp: 45343, |
|
|
|
|
@ -627,14 +626,8 @@ func TestRTSPSourceOversizedPackets(t *testing.T) {
@@ -627,14 +626,8 @@ func TestRTSPSourceOversizedPackets(t *testing.T) {
|
|
|
|
|
Padding: true, |
|
|
|
|
}, |
|
|
|
|
Payload: append([]byte{0x1c, 0b10000000}, bytes.Repeat([]byte{0x01, 0x02, 0x03, 0x04}, 2000/4)...), |
|
|
|
|
}.Marshal() |
|
|
|
|
err = conn.WriteInterleavedFrame(&base.InterleavedFrame{ |
|
|
|
|
Channel: 0, |
|
|
|
|
Payload: byts, |
|
|
|
|
}, make([]byte, 2048)) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
|
|
byts, _ = rtp.Packet{ |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
Header: rtp.Header{ |
|
|
|
|
Version: 2, |
|
|
|
|
Marker: true, |
|
|
|
|
@ -645,12 +638,45 @@ func TestRTSPSourceOversizedPackets(t *testing.T) {
@@ -645,12 +638,45 @@ func TestRTSPSourceOversizedPackets(t *testing.T) {
|
|
|
|
|
Padding: true, |
|
|
|
|
}, |
|
|
|
|
Payload: []byte{0x1c, 0b01000000, 0x01, 0x02, 0x03, 0x04}, |
|
|
|
|
}.Marshal() |
|
|
|
|
}, |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
tosend = []*rtp.Packet{ |
|
|
|
|
{ |
|
|
|
|
Header: rtp.Header{ |
|
|
|
|
Version: 2, |
|
|
|
|
Marker: true, |
|
|
|
|
PayloadType: 96, |
|
|
|
|
SequenceNumber: 123, |
|
|
|
|
Timestamp: 45343, |
|
|
|
|
SSRC: 563423, |
|
|
|
|
Padding: true, |
|
|
|
|
}, |
|
|
|
|
Payload: []byte{0x01, 0x02, 0x03, 0x04}, |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
Header: rtp.Header{ |
|
|
|
|
Version: 2, |
|
|
|
|
Marker: true, |
|
|
|
|
PayloadType: 96, |
|
|
|
|
SequenceNumber: 124, |
|
|
|
|
Timestamp: 45343, |
|
|
|
|
SSRC: 563423, |
|
|
|
|
Padding: true, |
|
|
|
|
}, |
|
|
|
|
Payload: bytes.Repeat([]byte{0x01, 0x02, 0x03, 0x04}, 2000/4), |
|
|
|
|
}, |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
for _, pkt := range tosend { |
|
|
|
|
byts, _ = pkt.Marshal() |
|
|
|
|
err = conn.WriteInterleavedFrame(&base.InterleavedFrame{ |
|
|
|
|
Channel: 0, |
|
|
|
|
Payload: byts, |
|
|
|
|
}, make([]byte, 1024)) |
|
|
|
|
}, make([]byte, 2048)) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
req, err = conn.ReadRequest() |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
@ -673,9 +699,6 @@ func TestRTSPSourceOversizedPackets(t *testing.T) {
@@ -673,9 +699,6 @@ func TestRTSPSourceOversizedPackets(t *testing.T) {
|
|
|
|
|
|
|
|
|
|
time.Sleep(1 * time.Second) |
|
|
|
|
|
|
|
|
|
packetRecv := make(chan struct{}) |
|
|
|
|
i := 0 |
|
|
|
|
|
|
|
|
|
c := gortsplib.Client{} |
|
|
|
|
|
|
|
|
|
u, err := url.Parse("rtsp://127.0.0.1:8554/proxied") |
|
|
|
|
@ -691,10 +714,14 @@ func TestRTSPSourceOversizedPackets(t *testing.T) {
@@ -691,10 +714,14 @@ func TestRTSPSourceOversizedPackets(t *testing.T) {
|
|
|
|
|
err = c.SetupAll(medias, baseURL) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
|
|
c.OnPacketRTP(medias[0], medias[0].Formats[0], func(pkt *rtp.Packet) { |
|
|
|
|
switch i { |
|
|
|
|
case 0: |
|
|
|
|
require.Equal(t, &rtp.Packet{ |
|
|
|
|
packetRecv := make(chan struct{}) |
|
|
|
|
i := 0 |
|
|
|
|
|
|
|
|
|
var expected []*rtp.Packet |
|
|
|
|
|
|
|
|
|
if ca == "h264" { |
|
|
|
|
expected = []*rtp.Packet{ |
|
|
|
|
{ |
|
|
|
|
Header: rtp.Header{ |
|
|
|
|
Version: 2, |
|
|
|
|
Marker: true, |
|
|
|
|
@ -705,10 +732,8 @@ func TestRTSPSourceOversizedPackets(t *testing.T) {
@@ -705,10 +732,8 @@ func TestRTSPSourceOversizedPackets(t *testing.T) {
|
|
|
|
|
CSRC: []uint32{}, |
|
|
|
|
}, |
|
|
|
|
Payload: []byte{0x01, 0x02, 0x03, 0x04}, |
|
|
|
|
}, pkt) |
|
|
|
|
|
|
|
|
|
case 1: |
|
|
|
|
require.Equal(t, &rtp.Packet{ |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
Header: rtp.Header{ |
|
|
|
|
Version: 2, |
|
|
|
|
Marker: false, |
|
|
|
|
@ -722,10 +747,8 @@ func TestRTSPSourceOversizedPackets(t *testing.T) {
@@ -722,10 +747,8 @@ func TestRTSPSourceOversizedPackets(t *testing.T) {
|
|
|
|
|
append([]byte{0x1c, 0x80}, bytes.Repeat([]byte{0x01, 0x02, 0x03, 0x04}, 364)...), |
|
|
|
|
[]byte{0x01, 0x02}..., |
|
|
|
|
), |
|
|
|
|
}, pkt) |
|
|
|
|
|
|
|
|
|
case 2: |
|
|
|
|
require.Equal(t, &rtp.Packet{ |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
Header: rtp.Header{ |
|
|
|
|
Version: 2, |
|
|
|
|
Marker: true, |
|
|
|
|
@ -739,10 +762,61 @@ func TestRTSPSourceOversizedPackets(t *testing.T) {
@@ -739,10 +762,61 @@ func TestRTSPSourceOversizedPackets(t *testing.T) {
|
|
|
|
|
[]byte{0x1c, 0x40, 0x03, 0x04}, |
|
|
|
|
bytes.Repeat([]byte{0x01, 0x02, 0x03, 0x04}, 136)..., |
|
|
|
|
), |
|
|
|
|
}, pkt) |
|
|
|
|
close(packetRecv) |
|
|
|
|
}, |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
expected = []*rtp.Packet{ |
|
|
|
|
{ |
|
|
|
|
Header: rtp.Header{ |
|
|
|
|
Version: 2, |
|
|
|
|
Marker: true, |
|
|
|
|
PayloadType: 96, |
|
|
|
|
SequenceNumber: 123, |
|
|
|
|
Timestamp: 45343, |
|
|
|
|
SSRC: 563423, |
|
|
|
|
CSRC: []uint32{}, |
|
|
|
|
}, |
|
|
|
|
Payload: []byte{0x01, 0x02, 0x03, 0x04}, |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
Header: rtp.Header{ |
|
|
|
|
Version: 2, |
|
|
|
|
Marker: false, |
|
|
|
|
PayloadType: 96, |
|
|
|
|
SequenceNumber: 124, |
|
|
|
|
Timestamp: 45343, |
|
|
|
|
SSRC: 563423, |
|
|
|
|
CSRC: []uint32{}, |
|
|
|
|
}, |
|
|
|
|
Payload: append( |
|
|
|
|
append([]byte{0x1c, 0x81, 0x02, 0x03, 0x04}, bytes.Repeat([]byte{0x01, 0x02, 0x03, 0x04}, 363)...), |
|
|
|
|
[]byte{0x01, 0x02, 0x03}..., |
|
|
|
|
), |
|
|
|
|
}, |
|
|
|
|
{ |
|
|
|
|
Header: rtp.Header{ |
|
|
|
|
Version: 2, |
|
|
|
|
Marker: true, |
|
|
|
|
PayloadType: 96, |
|
|
|
|
SequenceNumber: 125, |
|
|
|
|
Timestamp: 45343, |
|
|
|
|
SSRC: 563423, |
|
|
|
|
CSRC: []uint32{}, |
|
|
|
|
}, |
|
|
|
|
Payload: append( |
|
|
|
|
[]byte{0x1c, 0x41, 0x04}, |
|
|
|
|
bytes.Repeat([]byte{0x01, 0x02, 0x03, 0x04}, 135)..., |
|
|
|
|
), |
|
|
|
|
}, |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
c.OnPacketRTP(medias[0], medias[0].Formats[0], func(pkt *rtp.Packet) { |
|
|
|
|
require.Equal(t, expected[i], pkt) |
|
|
|
|
i++ |
|
|
|
|
if i >= len(expected) { |
|
|
|
|
close(packetRecv) |
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
_, err = c.Play(nil) |
|
|
|
|
@ -750,4 +824,6 @@ func TestRTSPSourceOversizedPackets(t *testing.T) {
@@ -750,4 +824,6 @@ func TestRTSPSourceOversizedPackets(t *testing.T) {
|
|
|
|
|
|
|
|
|
|
close(connected) |
|
|
|
|
<-packetRecv |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|