mirror of
https://github.com/aler9/gortsplib
synced 2025-10-05 15:16:51 +08:00
simplify tests (#245)
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
[](https://app.codecov.io/gh/bluenviron/gortsplib/branch/main)
|
||||
[](https://pkg.go.dev/github.com/bluenviron/gortsplib/v3#pkg-index)
|
||||
|
||||
RTSP 1.0 client and server library for the Go programming language, written for [rtsp-simple-server](https://github.com/aler9/rtsp-simple-server).
|
||||
RTSP 1.0 client and server library for the Go programming language, written for [MediaMTX](https://github.com/aler9/mediamtx).
|
||||
|
||||
Go ≥ 1.18 is required.
|
||||
|
||||
|
@@ -3,7 +3,6 @@ package gortsplib
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/tls"
|
||||
"errors"
|
||||
"net"
|
||||
"strconv"
|
||||
"strings"
|
||||
@@ -63,7 +62,7 @@ func absoluteControlAttribute(md *psdp.MediaDescription) string {
|
||||
return v
|
||||
}
|
||||
|
||||
func doDescribe(conn *conn.Conn) (*sdp.SessionDescription, error) {
|
||||
func doDescribe(t *testing.T, conn *conn.Conn) *sdp.SessionDescription {
|
||||
res, err := writeReqReadRes(conn, base.Request{
|
||||
Method: base.Describe,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
||||
@@ -71,21 +70,65 @@ func doDescribe(conn *conn.Conn) (*sdp.SessionDescription, error) {
|
||||
"CSeq": base.HeaderValue{"1"},
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if res.StatusCode != base.StatusOK {
|
||||
return nil, errors.New("bad status code")
|
||||
}
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
|
||||
var desc sdp.SessionDescription
|
||||
err = desc.Unmarshal(res.Body)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
require.NoError(t, err)
|
||||
return &desc
|
||||
}
|
||||
|
||||
return &desc, err
|
||||
func doSetup(t *testing.T, conn *conn.Conn, u string, inTH *headers.Transport) (*base.Response, *headers.Transport) {
|
||||
res, err := writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL(u),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"1"},
|
||||
"Transport": inTH.Marshal(),
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
|
||||
var th headers.Transport
|
||||
err = th.Unmarshal(res.Header["Transport"])
|
||||
require.NoError(t, err)
|
||||
|
||||
return res, &th
|
||||
}
|
||||
|
||||
func doPlay(t *testing.T, conn *conn.Conn, u string, session string) {
|
||||
res, err := writeReqReadRes(conn, base.Request{
|
||||
Method: base.Play,
|
||||
URL: mustParseURL(u),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"1"},
|
||||
"Session": base.HeaderValue{session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
}
|
||||
|
||||
func doPause(t *testing.T, conn *conn.Conn, u string, session string) {
|
||||
res, err := writeReqReadRes(conn, base.Request{
|
||||
Method: base.Pause,
|
||||
URL: mustParseURL(u),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"1"},
|
||||
"Session": base.HeaderValue{session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
}
|
||||
|
||||
func readSession(t *testing.T, res *base.Response) string {
|
||||
var sx headers.Session
|
||||
err := sx.Unmarshal(res.Header["Session"])
|
||||
require.NoError(t, err)
|
||||
return sx.Session
|
||||
}
|
||||
|
||||
func TestServerPlayPath(t *testing.T) {
|
||||
@@ -188,8 +231,7 @@ func TestServerPlayPath(t *testing.T) {
|
||||
defer nconn.Close()
|
||||
conn := conn.NewConn(nconn)
|
||||
|
||||
desc, err := doDescribe(conn)
|
||||
require.NoError(t, err)
|
||||
desc := doDescribe(t, conn)
|
||||
|
||||
th := &headers.Transport{
|
||||
Protocol: headers.TransportProtocolTCP,
|
||||
@@ -204,32 +246,14 @@ func TestServerPlayPath(t *testing.T) {
|
||||
InterleavedIDs: &[2]int{0, 1},
|
||||
}
|
||||
|
||||
res, err := writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL(strings.ReplaceAll(ca.setupURL, "[control]", "/"+
|
||||
relativeControlAttribute(desc.MediaDescriptions[1]))),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"2"},
|
||||
"Transport": th.Marshal(),
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
res, _ := doSetup(t, conn,
|
||||
strings.ReplaceAll(ca.setupURL, "[control]", "/"+
|
||||
relativeControlAttribute(desc.MediaDescriptions[1])),
|
||||
th)
|
||||
|
||||
var sx headers.Session
|
||||
err = sx.Unmarshal(res.Header["Session"])
|
||||
require.NoError(t, err)
|
||||
session := readSession(t, res)
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Play,
|
||||
URL: mustParseURL(ca.playURL),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"3"},
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
doPlay(t, conn, ca.playURL, session)
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -288,8 +312,7 @@ func TestServerPlaySetupErrors(t *testing.T) {
|
||||
defer nconn.Close()
|
||||
conn := conn.NewConn(nconn)
|
||||
|
||||
desc, err := doDescribe(conn)
|
||||
require.NoError(t, err)
|
||||
desc := doDescribe(t, conn)
|
||||
|
||||
th := &headers.Transport{
|
||||
Protocol: headers.TransportProtocolTCP,
|
||||
@@ -318,9 +341,8 @@ func TestServerPlaySetupErrors(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
|
||||
var sx headers.Session
|
||||
err = sx.Unmarshal(res.Header["Session"])
|
||||
require.NoError(t, err)
|
||||
session := readSession(t, res)
|
||||
|
||||
th.InterleavedIDs = &[2]int{2, 3}
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
@@ -329,7 +351,7 @@ func TestServerPlaySetupErrors(t *testing.T) {
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"3"},
|
||||
"Transport": th.Marshal(),
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
"Session": base.HeaderValue{session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
@@ -339,9 +361,8 @@ func TestServerPlaySetupErrors(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
|
||||
var sx headers.Session
|
||||
err = sx.Unmarshal(res.Header["Session"])
|
||||
require.NoError(t, err)
|
||||
session := readSession(t, res)
|
||||
|
||||
th.InterleavedIDs = &[2]int{2, 3}
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
@@ -350,7 +371,7 @@ func TestServerPlaySetupErrors(t *testing.T) {
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"4"},
|
||||
"Transport": th.Marshal(),
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
"Session": base.HeaderValue{session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
@@ -425,8 +446,7 @@ func TestServerPlaySetupErrorSameUDPPortsAndIP(t *testing.T) {
|
||||
ClientPorts: &[2]int{35466, 35467},
|
||||
}
|
||||
|
||||
desc, err := doDescribe(conn)
|
||||
require.NoError(t, err)
|
||||
desc := doDescribe(t, conn)
|
||||
|
||||
res, err := writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
@@ -566,8 +586,7 @@ func TestServerPlay(t *testing.T) {
|
||||
|
||||
<-nconnOpened
|
||||
|
||||
desc, err := doDescribe(conn)
|
||||
require.NoError(t, err)
|
||||
desc := doDescribe(t, conn)
|
||||
|
||||
inTH := &headers.Transport{
|
||||
Mode: func() *headers.TransportMode {
|
||||
@@ -595,20 +614,7 @@ func TestServerPlay(t *testing.T) {
|
||||
inTH.InterleavedIDs = &[2]int{4, 5}
|
||||
}
|
||||
|
||||
res, err := writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[0])),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"2"},
|
||||
"Transport": inTH.Marshal(),
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
|
||||
var th headers.Transport
|
||||
err = th.Unmarshal(res.Header["Transport"])
|
||||
require.NoError(t, err)
|
||||
res, th := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
|
||||
|
||||
var l1 net.PacketConn
|
||||
var l2 net.PacketConn
|
||||
@@ -665,20 +671,9 @@ func TestServerPlay(t *testing.T) {
|
||||
|
||||
<-sessionOpened
|
||||
|
||||
var sx headers.Session
|
||||
err = sx.Unmarshal(res.Header["Session"])
|
||||
require.NoError(t, err)
|
||||
session := readSession(t, res)
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Play,
|
||||
URL: mustParseURL("rtsp://" + listenIP + ":8554/teststream"),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"3"},
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
doPlay(t, conn, "rtsp://"+listenIP+":8554/teststream", session)
|
||||
|
||||
// server -> client (direct)
|
||||
switch transport {
|
||||
@@ -765,7 +760,7 @@ func TestServerPlay(t *testing.T) {
|
||||
URL: mustParseURL("rtsp://" + listenIP + ":8554/teststream"),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"4"},
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
"Session": base.HeaderValue{session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
@@ -777,7 +772,7 @@ func TestServerPlay(t *testing.T) {
|
||||
URL: mustParseURL("rtsp://" + listenIP + ":8554/teststream"),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"5"},
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
"Session": base.HeaderValue{session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
@@ -789,7 +784,7 @@ func TestServerPlay(t *testing.T) {
|
||||
URL: mustParseURL("rtsp://" + listenIP + ":8554/teststream"),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"6"},
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
"Session": base.HeaderValue{session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
@@ -867,8 +862,7 @@ func TestServerPlayDecodeErrors(t *testing.T) {
|
||||
defer nconn.Close()
|
||||
conn := conn.NewConn(nconn)
|
||||
|
||||
desc, err := doDescribe(conn)
|
||||
require.NoError(t, err)
|
||||
desc := doDescribe(t, conn)
|
||||
|
||||
inTH := &headers.Transport{
|
||||
Mode: func() *headers.TransportMode {
|
||||
@@ -889,20 +883,7 @@ func TestServerPlayDecodeErrors(t *testing.T) {
|
||||
inTH.InterleavedIDs = &[2]int{0, 1}
|
||||
}
|
||||
|
||||
res, err := writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[0])),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"2"},
|
||||
"Transport": inTH.Marshal(),
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
|
||||
var resTH headers.Transport
|
||||
err = resTH.Unmarshal(res.Header["Transport"])
|
||||
require.NoError(t, err)
|
||||
res, resTH := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
|
||||
|
||||
var l1 net.PacketConn
|
||||
var l2 net.PacketConn
|
||||
@@ -917,20 +898,9 @@ func TestServerPlayDecodeErrors(t *testing.T) {
|
||||
defer l2.Close()
|
||||
}
|
||||
|
||||
var sx headers.Session
|
||||
err = sx.Unmarshal(res.Header["Session"])
|
||||
require.NoError(t, err)
|
||||
session := readSession(t, res)
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Play,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"3"},
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
doPlay(t, conn, "rtsp://localhost:8554/teststream", session)
|
||||
|
||||
switch { //nolint:dupl
|
||||
case ca.proto == "udp" && ca.name == "rtcp invalid":
|
||||
@@ -1004,8 +974,7 @@ func TestServerPlayRTCPReport(t *testing.T) {
|
||||
defer nconn.Close()
|
||||
conn := conn.NewConn(nconn)
|
||||
|
||||
desc, err := doDescribe(conn)
|
||||
require.NoError(t, err)
|
||||
desc := doDescribe(t, conn)
|
||||
|
||||
inTH := &headers.Transport{
|
||||
Mode: func() *headers.TransportMode {
|
||||
@@ -1026,16 +995,7 @@ func TestServerPlayRTCPReport(t *testing.T) {
|
||||
inTH.InterleavedIDs = &[2]int{0, 1}
|
||||
}
|
||||
|
||||
res, err := writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[0])),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"2"},
|
||||
"Transport": inTH.Marshal(),
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
|
||||
|
||||
var l1 net.PacketConn
|
||||
var l2 net.PacketConn
|
||||
@@ -1049,20 +1009,9 @@ func TestServerPlayRTCPReport(t *testing.T) {
|
||||
defer l2.Close()
|
||||
}
|
||||
|
||||
var sx headers.Session
|
||||
err = sx.Unmarshal(res.Header["Session"])
|
||||
require.NoError(t, err)
|
||||
session := readSession(t, res)
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Play,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"3"},
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
doPlay(t, conn, "rtsp://localhost:8554/teststream", session)
|
||||
|
||||
for i := 0; i < 2; i++ {
|
||||
stream.WritePacketRTP(stream.Medias()[0], &rtp.Packet{
|
||||
@@ -1110,7 +1059,7 @@ func TestServerPlayRTCPReport(t *testing.T) {
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"4"},
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
"Session": base.HeaderValue{session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
@@ -1226,15 +1175,9 @@ func TestServerPlayTCPResponseBeforeFrames(t *testing.T) {
|
||||
defer nconn.Close()
|
||||
conn := conn.NewConn(nconn)
|
||||
|
||||
desc, err := doDescribe(conn)
|
||||
require.NoError(t, err)
|
||||
desc := doDescribe(t, conn)
|
||||
|
||||
res, err := writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[0])),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"2"},
|
||||
"Transport": headers.Transport{
|
||||
inTH := &headers.Transport{
|
||||
Protocol: headers.TransportProtocolTCP,
|
||||
Delivery: func() *headers.TransportDelivery {
|
||||
v := headers.TransportDeliveryUnicast
|
||||
@@ -1245,26 +1188,13 @@ func TestServerPlayTCPResponseBeforeFrames(t *testing.T) {
|
||||
return &v
|
||||
}(),
|
||||
InterleavedIDs: &[2]int{0, 1},
|
||||
}.Marshal(),
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
}
|
||||
|
||||
var sx headers.Session
|
||||
err = sx.Unmarshal(res.Header["Session"])
|
||||
require.NoError(t, err)
|
||||
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Play,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"3"},
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
session := readSession(t, res)
|
||||
|
||||
doPlay(t, conn, "rtsp://localhost:8554/teststream", session)
|
||||
|
||||
_, err = conn.ReadInterleavedFrame()
|
||||
require.NoError(t, err)
|
||||
@@ -1306,15 +1236,9 @@ func TestServerPlayPlayPlay(t *testing.T) {
|
||||
defer nconn.Close()
|
||||
conn := conn.NewConn(nconn)
|
||||
|
||||
desc, err := doDescribe(conn)
|
||||
require.NoError(t, err)
|
||||
desc := doDescribe(t, conn)
|
||||
|
||||
res, err := writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[0])),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"2"},
|
||||
"Transport": headers.Transport{
|
||||
inTH := &headers.Transport{
|
||||
Protocol: headers.TransportProtocolUDP,
|
||||
Delivery: func() *headers.TransportDelivery {
|
||||
v := headers.TransportDeliveryUnicast
|
||||
@@ -1325,37 +1249,14 @@ func TestServerPlayPlayPlay(t *testing.T) {
|
||||
return &v
|
||||
}(),
|
||||
ClientPorts: &[2]int{30450, 30451},
|
||||
}.Marshal(),
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
}
|
||||
|
||||
var sx headers.Session
|
||||
err = sx.Unmarshal(res.Header["Session"])
|
||||
require.NoError(t, err)
|
||||
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Play,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"3"},
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
session := readSession(t, res)
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Play,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"4"},
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
doPlay(t, conn, "rtsp://localhost:8554/teststream", session)
|
||||
doPlay(t, conn, "rtsp://localhost:8554/teststream", session)
|
||||
}
|
||||
|
||||
func TestServerPlayPlayPausePlay(t *testing.T) {
|
||||
@@ -1424,15 +1325,9 @@ func TestServerPlayPlayPausePlay(t *testing.T) {
|
||||
defer nconn.Close()
|
||||
conn := conn.NewConn(nconn)
|
||||
|
||||
desc, err := doDescribe(conn)
|
||||
require.NoError(t, err)
|
||||
desc := doDescribe(t, conn)
|
||||
|
||||
res, err := writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[0])),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"2"},
|
||||
"Transport": headers.Transport{
|
||||
inTH := &headers.Transport{
|
||||
Protocol: headers.TransportProtocolTCP,
|
||||
Delivery: func() *headers.TransportDelivery {
|
||||
v := headers.TransportDeliveryUnicast
|
||||
@@ -1443,48 +1338,15 @@ func TestServerPlayPlayPausePlay(t *testing.T) {
|
||||
return &v
|
||||
}(),
|
||||
InterleavedIDs: &[2]int{0, 1},
|
||||
}.Marshal(),
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
}
|
||||
|
||||
var sx headers.Session
|
||||
err = sx.Unmarshal(res.Header["Session"])
|
||||
require.NoError(t, err)
|
||||
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Play,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"2"},
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
session := readSession(t, res)
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Pause,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"2"},
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Play,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"2"},
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
doPlay(t, conn, "rtsp://localhost:8554/teststream", session)
|
||||
doPause(t, conn, "rtsp://localhost:8554/teststream", session)
|
||||
doPlay(t, conn, "rtsp://localhost:8554/teststream", session)
|
||||
}
|
||||
|
||||
func TestServerPlayPlayPausePause(t *testing.T) {
|
||||
@@ -1549,15 +1411,9 @@ func TestServerPlayPlayPausePause(t *testing.T) {
|
||||
defer nconn.Close()
|
||||
conn := conn.NewConn(nconn)
|
||||
|
||||
desc, err := doDescribe(conn)
|
||||
require.NoError(t, err)
|
||||
desc := doDescribe(t, conn)
|
||||
|
||||
res, err := writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[0])),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"2"},
|
||||
"Transport": headers.Transport{
|
||||
inTH := &headers.Transport{
|
||||
Protocol: headers.TransportProtocolTCP,
|
||||
Delivery: func() *headers.TransportDelivery {
|
||||
v := headers.TransportDeliveryUnicast
|
||||
@@ -1568,54 +1424,17 @@ func TestServerPlayPlayPausePause(t *testing.T) {
|
||||
return &v
|
||||
}(),
|
||||
InterleavedIDs: &[2]int{0, 1},
|
||||
}.Marshal(),
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
}
|
||||
|
||||
var sx headers.Session
|
||||
err = sx.Unmarshal(res.Header["Session"])
|
||||
require.NoError(t, err)
|
||||
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Play,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"3"},
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
session := readSession(t, res)
|
||||
|
||||
err = conn.WriteRequest(&base.Request{
|
||||
Method: base.Pause,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"4"},
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
doPlay(t, conn, "rtsp://localhost:8554/teststream", session)
|
||||
|
||||
res, err = conn.ReadResponseIgnoreFrames()
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
doPause(t, conn, "rtsp://localhost:8554/teststream", session)
|
||||
|
||||
err = conn.WriteRequest(&base.Request{
|
||||
Method: base.Pause,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"5"},
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
res, err = conn.ReadResponseIgnoreFrames()
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
doPause(t, conn, "rtsp://localhost:8554/teststream", session)
|
||||
}
|
||||
|
||||
func TestServerPlayTimeout(t *testing.T) {
|
||||
@@ -1677,8 +1496,7 @@ func TestServerPlayTimeout(t *testing.T) {
|
||||
defer nconn.Close()
|
||||
conn := conn.NewConn(nconn)
|
||||
|
||||
desc, err := doDescribe(conn)
|
||||
require.NoError(t, err)
|
||||
desc := doDescribe(t, conn)
|
||||
|
||||
inTH := &headers.Transport{
|
||||
Mode: func() *headers.TransportMode {
|
||||
@@ -1700,31 +1518,11 @@ func TestServerPlayTimeout(t *testing.T) {
|
||||
inTH.Protocol = headers.TransportProtocolUDP
|
||||
}
|
||||
|
||||
res, err := writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[0])),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"2"},
|
||||
"Transport": inTH.Marshal(),
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
|
||||
|
||||
var sx headers.Session
|
||||
err = sx.Unmarshal(res.Header["Session"])
|
||||
require.NoError(t, err)
|
||||
session := readSession(t, res)
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Play,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"3"},
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
doPlay(t, conn, "rtsp://localhost:8554/teststream", session)
|
||||
|
||||
<-sessionClosed
|
||||
})
|
||||
@@ -1786,8 +1584,7 @@ func TestServerPlayWithoutTeardown(t *testing.T) {
|
||||
defer nconn.Close()
|
||||
conn := conn.NewConn(nconn)
|
||||
|
||||
desc, err := doDescribe(conn)
|
||||
require.NoError(t, err)
|
||||
desc := doDescribe(t, conn)
|
||||
|
||||
inTH := &headers.Transport{
|
||||
Delivery: func() *headers.TransportDelivery {
|
||||
@@ -1808,31 +1605,11 @@ func TestServerPlayWithoutTeardown(t *testing.T) {
|
||||
inTH.InterleavedIDs = &[2]int{0, 1}
|
||||
}
|
||||
|
||||
res, err := writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[0])),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"2"},
|
||||
"Transport": inTH.Marshal(),
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
|
||||
|
||||
var sx headers.Session
|
||||
err = sx.Unmarshal(res.Header["Session"])
|
||||
require.NoError(t, err)
|
||||
session := readSession(t, res)
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Play,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"3"},
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
doPlay(t, conn, "rtsp://localhost:8554/teststream", session)
|
||||
|
||||
nconn.Close()
|
||||
|
||||
@@ -1886,8 +1663,7 @@ func TestServerPlayUDPChangeConn(t *testing.T) {
|
||||
defer nconn.Close()
|
||||
conn := conn.NewConn(nconn)
|
||||
|
||||
desc, err := doDescribe(conn)
|
||||
require.NoError(t, err)
|
||||
desc := doDescribe(t, conn)
|
||||
|
||||
inTH := &headers.Transport{
|
||||
Delivery: func() *headers.TransportDelivery {
|
||||
@@ -1902,33 +1678,13 @@ func TestServerPlayUDPChangeConn(t *testing.T) {
|
||||
ClientPorts: &[2]int{35466, 35467},
|
||||
}
|
||||
|
||||
res, err := writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[0])),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"2"},
|
||||
"Transport": inTH.Marshal(),
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
|
||||
|
||||
var sx headers.Session
|
||||
err = sx.Unmarshal(res.Header["Session"])
|
||||
require.NoError(t, err)
|
||||
session := readSession(t, res)
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Play,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"3"},
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
doPlay(t, conn, "rtsp://localhost:8554/teststream", session)
|
||||
|
||||
sxID = sx.Session
|
||||
sxID = session
|
||||
}()
|
||||
|
||||
func() {
|
||||
@@ -1990,8 +1746,7 @@ func TestServerPlayPartialMedias(t *testing.T) {
|
||||
defer nconn.Close()
|
||||
conn := conn.NewConn(nconn)
|
||||
|
||||
desc, err := doDescribe(conn)
|
||||
require.NoError(t, err)
|
||||
desc := doDescribe(t, conn)
|
||||
|
||||
inTH := &headers.Transport{
|
||||
Delivery: func() *headers.TransportDelivery {
|
||||
@@ -2006,31 +1761,11 @@ func TestServerPlayPartialMedias(t *testing.T) {
|
||||
InterleavedIDs: &[2]int{4, 5},
|
||||
}
|
||||
|
||||
res, err := writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[1])),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"2"},
|
||||
"Transport": inTH.Marshal(),
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
|
||||
|
||||
var sx headers.Session
|
||||
err = sx.Unmarshal(res.Header["Session"])
|
||||
require.NoError(t, err)
|
||||
session := readSession(t, res)
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Play,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"3"},
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
doPlay(t, conn, "rtsp://localhost:8554/teststream", session)
|
||||
|
||||
f, err := conn.ReadInterleavedFrame()
|
||||
require.NoError(t, err)
|
||||
@@ -2045,8 +1780,7 @@ func TestServerPlayAdditionalInfos(t *testing.T) {
|
||||
defer nconn.Close()
|
||||
conn := conn.NewConn(nconn)
|
||||
|
||||
desc, err := doDescribe(conn)
|
||||
require.NoError(t, err)
|
||||
desc := doDescribe(t, conn)
|
||||
|
||||
inTH := &headers.Transport{
|
||||
Delivery: func() *headers.TransportDelivery {
|
||||
@@ -2061,20 +1795,8 @@ func TestServerPlayAdditionalInfos(t *testing.T) {
|
||||
InterleavedIDs: &[2]int{0, 1},
|
||||
}
|
||||
|
||||
res, err := writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[0])),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"2"},
|
||||
"Transport": inTH.Marshal(),
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
res, th := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
|
||||
|
||||
var th headers.Transport
|
||||
err = th.Unmarshal(res.Header["Transport"])
|
||||
require.NoError(t, err)
|
||||
ssrcs := make([]*uint32, 2)
|
||||
ssrcs[0] = th.SSRC
|
||||
|
||||
@@ -2091,9 +1813,7 @@ func TestServerPlayAdditionalInfos(t *testing.T) {
|
||||
InterleavedIDs: &[2]int{2, 3},
|
||||
}
|
||||
|
||||
var sx headers.Session
|
||||
err = sx.Unmarshal(res.Header["Session"])
|
||||
require.NoError(t, err)
|
||||
session := readSession(t, res)
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
@@ -2101,27 +1821,18 @@ func TestServerPlayAdditionalInfos(t *testing.T) {
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"3"},
|
||||
"Transport": inTH.Marshal(),
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
"Session": base.HeaderValue{session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
|
||||
th = headers.Transport{}
|
||||
th = &headers.Transport{}
|
||||
err = th.Unmarshal(res.Header["Transport"])
|
||||
require.NoError(t, err)
|
||||
ssrcs[1] = th.SSRC
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Play,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"4"},
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
doPlay(t, conn, "rtsp://localhost:8554/teststream", session)
|
||||
|
||||
var ri headers.RTPInfo
|
||||
err = ri.Unmarshal(res.Header["RTP-Info"])
|
||||
|
@@ -276,27 +276,16 @@ func TestServerRecordPath(t *testing.T) {
|
||||
InterleavedIDs: &[2]int{0, 1},
|
||||
}
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL(ca.setupURL),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"2"},
|
||||
"Transport": th.Marshal(),
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
res, _ = doSetup(t, conn, ca.setupURL, th)
|
||||
|
||||
var sx headers.Session
|
||||
err = sx.Unmarshal(res.Header["Session"])
|
||||
require.NoError(t, err)
|
||||
session := readSession(t, res)
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Record,
|
||||
URL: mustParseURL(ca.announceURL),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"3"},
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
"Session": base.HeaderValue{session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
@@ -351,12 +340,7 @@ func TestServerRecordErrorSetupMediaTwice(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream/" + medias[0].Control),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"2"},
|
||||
"Transport": headers.Transport{
|
||||
inTH := &headers.Transport{
|
||||
Protocol: headers.TransportProtocolTCP,
|
||||
Delivery: func() *headers.TransportDelivery {
|
||||
v := headers.TransportDeliveryUnicast
|
||||
@@ -367,15 +351,11 @@ func TestServerRecordErrorSetupMediaTwice(t *testing.T) {
|
||||
return &v
|
||||
}(),
|
||||
InterleavedIDs: &[2]int{0, 1},
|
||||
}.Marshal(),
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
}
|
||||
|
||||
var sx headers.Session
|
||||
err = sx.Unmarshal(res.Header["Session"])
|
||||
require.NoError(t, err)
|
||||
res, _ = doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[0].Control, inTH)
|
||||
|
||||
session := readSession(t, res)
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
@@ -394,7 +374,7 @@ func TestServerRecordErrorSetupMediaTwice(t *testing.T) {
|
||||
}(),
|
||||
InterleavedIDs: &[2]int{2, 3},
|
||||
}.Marshal(),
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
"Session": base.HeaderValue{session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
@@ -471,7 +451,7 @@ func TestServerRecordErrorRecordPartialMedias(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
|
||||
th := &headers.Transport{
|
||||
inTH := &headers.Transport{
|
||||
Protocol: headers.TransportProtocolTCP,
|
||||
Delivery: func() *headers.TransportDelivery {
|
||||
v := headers.TransportDeliveryUnicast
|
||||
@@ -484,27 +464,16 @@ func TestServerRecordErrorRecordPartialMedias(t *testing.T) {
|
||||
InterleavedIDs: &[2]int{0, 1},
|
||||
}
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream/" + medias[0].Control),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"2"},
|
||||
"Transport": th.Marshal(),
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
res, _ = doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[0].Control, inTH)
|
||||
|
||||
var sx headers.Session
|
||||
err = sx.Unmarshal(res.Header["Session"])
|
||||
require.NoError(t, err)
|
||||
session := readSession(t, res)
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Record,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"3"},
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
"Session": base.HeaderValue{session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
@@ -648,7 +617,7 @@ func TestServerRecord(t *testing.T) {
|
||||
|
||||
var l1s [2]net.PacketConn
|
||||
var l2s [2]net.PacketConn
|
||||
var sx headers.Session
|
||||
var session string
|
||||
var serverPorts [2]*[2]int
|
||||
|
||||
for i := 0; i < 2; i++ {
|
||||
@@ -679,19 +648,9 @@ func TestServerRecord(t *testing.T) {
|
||||
inTH.InterleavedIDs = &[2]int{2 + i*2, 3 + i*2}
|
||||
}
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream/" + medias[i].Control),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"2"},
|
||||
"Transport": inTH.Marshal(),
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
res, _ := doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[i].Control, inTH)
|
||||
|
||||
err = sx.Unmarshal(res.Header["Session"])
|
||||
require.NoError(t, err)
|
||||
session = readSession(t, res)
|
||||
|
||||
var th headers.Transport
|
||||
err = th.Unmarshal(res.Header["Transport"])
|
||||
@@ -707,7 +666,7 @@ func TestServerRecord(t *testing.T) {
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"3"},
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
"Session": base.HeaderValue{session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
@@ -780,7 +739,7 @@ func TestServerRecord(t *testing.T) {
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"3"},
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
"Session": base.HeaderValue{session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
@@ -861,20 +820,9 @@ func TestServerRecordErrorInvalidProtocol(t *testing.T) {
|
||||
ClientPorts: &[2]int{35466, 35467},
|
||||
}
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream/" + medias[0].Control),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"2"},
|
||||
"Transport": inTH.Marshal(),
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
res, _ = doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[0].Control, inTH)
|
||||
|
||||
var sx headers.Session
|
||||
err = sx.Unmarshal(res.Header["Session"])
|
||||
require.NoError(t, err)
|
||||
session := readSession(t, res)
|
||||
|
||||
var th headers.Transport
|
||||
err = th.Unmarshal(res.Header["Transport"])
|
||||
@@ -885,7 +833,7 @@ func TestServerRecordErrorInvalidProtocol(t *testing.T) {
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"3"},
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
"Session": base.HeaderValue{session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
@@ -957,12 +905,7 @@ func TestServerRecordRTCPReport(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
defer l2.Close()
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream/" + medias[0].Control),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"2"},
|
||||
"Transport": headers.Transport{
|
||||
inTH := &headers.Transport{
|
||||
Delivery: func() *headers.TransportDelivery {
|
||||
v := headers.TransportDeliveryUnicast
|
||||
return &v
|
||||
@@ -973,15 +916,11 @@ func TestServerRecordRTCPReport(t *testing.T) {
|
||||
}(),
|
||||
Protocol: headers.TransportProtocolUDP,
|
||||
ClientPorts: &[2]int{34556, 34557},
|
||||
}.Marshal(),
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
}
|
||||
|
||||
var sx headers.Session
|
||||
err = sx.Unmarshal(res.Header["Session"])
|
||||
require.NoError(t, err)
|
||||
res, _ = doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[0].Control, inTH)
|
||||
|
||||
session := readSession(t, res)
|
||||
|
||||
var th headers.Transport
|
||||
err = th.Unmarshal(res.Header["Transport"])
|
||||
@@ -992,7 +931,7 @@ func TestServerRecordRTCPReport(t *testing.T) {
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"3"},
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
"Session": base.HeaderValue{session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
@@ -1143,20 +1082,9 @@ func TestServerRecordTimeout(t *testing.T) {
|
||||
inTH.InterleavedIDs = &[2]int{0, 1}
|
||||
}
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream/" + medias[0].Control),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"2"},
|
||||
"Transport": inTH.Marshal(),
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
res, _ = doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[0].Control, inTH)
|
||||
|
||||
var sx headers.Session
|
||||
err = sx.Unmarshal(res.Header["Session"])
|
||||
require.NoError(t, err)
|
||||
session := readSession(t, res)
|
||||
|
||||
var th headers.Transport
|
||||
err = th.Unmarshal(res.Header["Transport"])
|
||||
@@ -1167,7 +1095,7 @@ func TestServerRecordTimeout(t *testing.T) {
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"3"},
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
"Session": base.HeaderValue{session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
@@ -1266,20 +1194,9 @@ func TestServerRecordWithoutTeardown(t *testing.T) {
|
||||
inTH.InterleavedIDs = &[2]int{0, 1}
|
||||
}
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream/" + medias[0].Control),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"2"},
|
||||
"Transport": inTH.Marshal(),
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
res, _ = doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[0].Control, inTH)
|
||||
|
||||
var sx headers.Session
|
||||
err = sx.Unmarshal(res.Header["Session"])
|
||||
require.NoError(t, err)
|
||||
session := readSession(t, res)
|
||||
|
||||
var th headers.Transport
|
||||
err = th.Unmarshal(res.Header["Transport"])
|
||||
@@ -1290,7 +1207,7 @@ func TestServerRecordWithoutTeardown(t *testing.T) {
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"3"},
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
"Session": base.HeaderValue{session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
@@ -1373,33 +1290,22 @@ func TestServerRecordUDPChangeConn(t *testing.T) {
|
||||
ClientPorts: &[2]int{35466, 35467},
|
||||
}
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream/" + medias[0].Control),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"2"},
|
||||
"Transport": inTH.Marshal(),
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
res, _ = doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[0].Control, inTH)
|
||||
|
||||
var sx headers.Session
|
||||
err = sx.Unmarshal(res.Header["Session"])
|
||||
require.NoError(t, err)
|
||||
session := readSession(t, res)
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Record,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"3"},
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
"Session": base.HeaderValue{session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
|
||||
sxID = sx.Session
|
||||
sxID = session
|
||||
}()
|
||||
|
||||
func() {
|
||||
@@ -1550,20 +1456,9 @@ func TestServerRecordDecodeErrors(t *testing.T) {
|
||||
defer l2.Close()
|
||||
}
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream/" + medias[0].Control),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"2"},
|
||||
"Transport": inTH.Marshal(),
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
res, _ = doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[0].Control, inTH)
|
||||
|
||||
var sx headers.Session
|
||||
err = sx.Unmarshal(res.Header["Session"])
|
||||
require.NoError(t, err)
|
||||
session := readSession(t, res)
|
||||
|
||||
var resTH headers.Transport
|
||||
err = resTH.Unmarshal(res.Header["Transport"])
|
||||
@@ -1574,7 +1469,7 @@ func TestServerRecordDecodeErrors(t *testing.T) {
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"3"},
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
"Session": base.HeaderValue{session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
194
server_test.go
194
server_test.go
@@ -358,18 +358,12 @@ func TestServerErrorMethodNotImplemented(t *testing.T) {
|
||||
defer nconn.Close()
|
||||
conn := conn.NewConn(nconn)
|
||||
|
||||
desc, err := doDescribe(conn)
|
||||
require.NoError(t, err)
|
||||
desc := doDescribe(t, conn)
|
||||
|
||||
var sx headers.Session
|
||||
var session string
|
||||
|
||||
if ca == "inside session" {
|
||||
res, err := writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[0])),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"1"},
|
||||
"Transport": headers.Transport{
|
||||
inTH := &headers.Transport{
|
||||
Protocol: headers.TransportProtocolTCP,
|
||||
Delivery: func() *headers.TransportDelivery {
|
||||
v := headers.TransportDeliveryUnicast
|
||||
@@ -380,20 +374,18 @@ func TestServerErrorMethodNotImplemented(t *testing.T) {
|
||||
return &v
|
||||
}(),
|
||||
InterleavedIDs: &[2]int{0, 1},
|
||||
}.Marshal(),
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
}
|
||||
|
||||
err = sx.Unmarshal(res.Header["Session"])
|
||||
require.NoError(t, err)
|
||||
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
|
||||
|
||||
session = readSession(t, res)
|
||||
}
|
||||
|
||||
headers := base.Header{
|
||||
"CSeq": base.HeaderValue{"2"},
|
||||
}
|
||||
if ca == "inside session" {
|
||||
headers["Session"] = base.HeaderValue{sx.Session}
|
||||
headers["Session"] = base.HeaderValue{session}
|
||||
}
|
||||
|
||||
res, err := writeReqReadRes(conn, base.Request{
|
||||
@@ -408,7 +400,7 @@ func TestServerErrorMethodNotImplemented(t *testing.T) {
|
||||
"CSeq": base.HeaderValue{"3"},
|
||||
}
|
||||
if ca == "inside session" {
|
||||
headers["Session"] = base.HeaderValue{sx.Session}
|
||||
headers["Session"] = base.HeaderValue{session}
|
||||
}
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
@@ -461,15 +453,9 @@ func TestServerErrorTCPTwoConnOneSession(t *testing.T) {
|
||||
defer nconn1.Close()
|
||||
conn1 := conn.NewConn(nconn1)
|
||||
|
||||
desc1, err := doDescribe(conn1)
|
||||
require.NoError(t, err)
|
||||
desc1 := doDescribe(t, conn1)
|
||||
|
||||
res, err := writeReqReadRes(conn1, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL(absoluteControlAttribute(desc1.MediaDescriptions[0])),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"1"},
|
||||
"Transport": headers.Transport{
|
||||
inTH := &headers.Transport{
|
||||
Protocol: headers.TransportProtocolTCP,
|
||||
Delivery: func() *headers.TransportDelivery {
|
||||
v := headers.TransportDeliveryUnicast
|
||||
@@ -480,34 +466,20 @@ func TestServerErrorTCPTwoConnOneSession(t *testing.T) {
|
||||
return &v
|
||||
}(),
|
||||
InterleavedIDs: &[2]int{0, 1},
|
||||
}.Marshal(),
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
}
|
||||
|
||||
var sx headers.Session
|
||||
err = sx.Unmarshal(res.Header["Session"])
|
||||
require.NoError(t, err)
|
||||
res, _ := doSetup(t, conn1, absoluteControlAttribute(desc1.MediaDescriptions[0]), inTH)
|
||||
|
||||
res, err = writeReqReadRes(conn1, base.Request{
|
||||
Method: base.Play,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"2"},
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
session := readSession(t, res)
|
||||
|
||||
doPlay(t, conn1, "rtsp://localhost:8554/teststream", session)
|
||||
|
||||
nconn2, err := net.Dial("tcp", "localhost:8554")
|
||||
require.NoError(t, err)
|
||||
defer nconn2.Close()
|
||||
conn2 := conn.NewConn(nconn2)
|
||||
|
||||
desc2, err := doDescribe(conn2)
|
||||
require.NoError(t, err)
|
||||
desc2 := doDescribe(t, conn2)
|
||||
|
||||
res, err = writeReqReadRes(conn2, base.Request{
|
||||
Method: base.Setup,
|
||||
@@ -526,7 +498,7 @@ func TestServerErrorTCPTwoConnOneSession(t *testing.T) {
|
||||
}(),
|
||||
InterleavedIDs: &[2]int{0, 1},
|
||||
}.Marshal(),
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
"Session": base.HeaderValue{session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
@@ -572,15 +544,9 @@ func TestServerErrorTCPOneConnTwoSessions(t *testing.T) {
|
||||
defer nconn.Close()
|
||||
conn := conn.NewConn(nconn)
|
||||
|
||||
desc, err := doDescribe(conn)
|
||||
require.NoError(t, err)
|
||||
desc := doDescribe(t, conn)
|
||||
|
||||
res, err := writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[0])),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"1"},
|
||||
"Transport": headers.Transport{
|
||||
inTH := &headers.Transport{
|
||||
Protocol: headers.TransportProtocolTCP,
|
||||
Delivery: func() *headers.TransportDelivery {
|
||||
v := headers.TransportDeliveryUnicast
|
||||
@@ -591,26 +557,13 @@ func TestServerErrorTCPOneConnTwoSessions(t *testing.T) {
|
||||
return &v
|
||||
}(),
|
||||
InterleavedIDs: &[2]int{0, 1},
|
||||
}.Marshal(),
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
}
|
||||
|
||||
var sx headers.Session
|
||||
err = sx.Unmarshal(res.Header["Session"])
|
||||
require.NoError(t, err)
|
||||
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Play,
|
||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"2"},
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
session := readSession(t, res)
|
||||
|
||||
doPlay(t, conn, "rtsp://localhost:8554/teststream", session)
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
@@ -664,8 +617,7 @@ func TestServerSetupMultipleTransports(t *testing.T) {
|
||||
defer nconn.Close()
|
||||
conn := conn.NewConn(nconn)
|
||||
|
||||
desc, err := doDescribe(conn)
|
||||
require.NoError(t, err)
|
||||
desc := doDescribe(t, conn)
|
||||
|
||||
inTHS := headers.Transports{
|
||||
{
|
||||
@@ -775,18 +727,12 @@ func TestServerGetSetParameter(t *testing.T) {
|
||||
defer nconn.Close()
|
||||
conn := conn.NewConn(nconn)
|
||||
|
||||
desc, err := doDescribe(conn)
|
||||
require.NoError(t, err)
|
||||
desc := doDescribe(t, conn)
|
||||
|
||||
var sx headers.Session
|
||||
var session string
|
||||
|
||||
if ca == "inside session" {
|
||||
res, err := writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[0])),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"2"},
|
||||
"Transport": headers.Transport{
|
||||
inTH := &headers.Transport{
|
||||
Protocol: headers.TransportProtocolTCP,
|
||||
Delivery: func() *headers.TransportDelivery {
|
||||
v := headers.TransportDeliveryUnicast
|
||||
@@ -797,21 +743,18 @@ func TestServerGetSetParameter(t *testing.T) {
|
||||
return &v
|
||||
}(),
|
||||
InterleavedIDs: &[2]int{0, 1},
|
||||
}.Marshal(),
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
}
|
||||
|
||||
err = sx.Unmarshal(res.Header["Session"])
|
||||
require.NoError(t, err)
|
||||
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
|
||||
|
||||
session = readSession(t, res)
|
||||
}
|
||||
|
||||
headers := base.Header{
|
||||
"CSeq": base.HeaderValue{"3"},
|
||||
}
|
||||
if ca == "inside session" {
|
||||
headers["Session"] = base.HeaderValue{sx.Session}
|
||||
headers["Session"] = base.HeaderValue{session}
|
||||
}
|
||||
|
||||
res, err := writeReqReadRes(conn, base.Request{
|
||||
@@ -827,7 +770,7 @@ func TestServerGetSetParameter(t *testing.T) {
|
||||
"CSeq": base.HeaderValue{"4"},
|
||||
}
|
||||
if ca == "inside session" {
|
||||
headers["Session"] = base.HeaderValue{sx.Session}
|
||||
headers["Session"] = base.HeaderValue{session}
|
||||
}
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
@@ -929,15 +872,9 @@ func TestServerSessionClose(t *testing.T) {
|
||||
defer nconn.Close()
|
||||
conn := conn.NewConn(nconn)
|
||||
|
||||
desc, err := doDescribe(conn)
|
||||
require.NoError(t, err)
|
||||
desc := doDescribe(t, conn)
|
||||
|
||||
res, err := writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[0])),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"1"},
|
||||
"Transport": headers.Transport{
|
||||
inTH := &headers.Transport{
|
||||
Protocol: headers.TransportProtocolTCP,
|
||||
Delivery: func() *headers.TransportDelivery {
|
||||
v := headers.TransportDeliveryUnicast
|
||||
@@ -948,11 +885,9 @@ func TestServerSessionClose(t *testing.T) {
|
||||
return &v
|
||||
}(),
|
||||
InterleavedIDs: &[2]int{0, 1},
|
||||
}.Marshal(),
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
}
|
||||
|
||||
doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
|
||||
|
||||
session.Close()
|
||||
session.Close()
|
||||
@@ -1010,15 +945,9 @@ func TestServerSessionAutoClose(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
conn := conn.NewConn(nconn)
|
||||
|
||||
desc, err := doDescribe(conn)
|
||||
require.NoError(t, err)
|
||||
desc := doDescribe(t, conn)
|
||||
|
||||
_, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[0])),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"1"},
|
||||
"Transport": headers.Transport{
|
||||
inTH := &headers.Transport{
|
||||
Protocol: headers.TransportProtocolTCP,
|
||||
Delivery: func() *headers.TransportDelivery {
|
||||
v := headers.TransportDeliveryUnicast
|
||||
@@ -1029,11 +958,24 @@ func TestServerSessionAutoClose(t *testing.T) {
|
||||
return &v
|
||||
}(),
|
||||
InterleavedIDs: &[2]int{0, 1},
|
||||
}.Marshal(),
|
||||
}
|
||||
|
||||
res, err := writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[0])),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"1"},
|
||||
"Transport": inTH.Marshal(),
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
if ca == "200" {
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
} else {
|
||||
require.Equal(t, base.StatusBadRequest, res.StatusCode)
|
||||
}
|
||||
|
||||
nconn.Close()
|
||||
|
||||
<-sessionClosed
|
||||
@@ -1070,15 +1012,9 @@ func TestServerSessionTeardown(t *testing.T) {
|
||||
defer nconn.Close()
|
||||
conn := conn.NewConn(nconn)
|
||||
|
||||
desc, err := doDescribe(conn)
|
||||
require.NoError(t, err)
|
||||
desc := doDescribe(t, conn)
|
||||
|
||||
res, err := writeReqReadRes(conn, base.Request{
|
||||
Method: base.Setup,
|
||||
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[0])),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"1"},
|
||||
"Transport": headers.Transport{
|
||||
inTH := &headers.Transport{
|
||||
Protocol: headers.TransportProtocolTCP,
|
||||
Delivery: func() *headers.TransportDelivery {
|
||||
v := headers.TransportDeliveryUnicast
|
||||
@@ -1089,22 +1025,18 @@ func TestServerSessionTeardown(t *testing.T) {
|
||||
return &v
|
||||
}(),
|
||||
InterleavedIDs: &[2]int{0, 1},
|
||||
}.Marshal(),
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||
}
|
||||
|
||||
var sx headers.Session
|
||||
err = sx.Unmarshal(res.Header["Session"])
|
||||
require.NoError(t, err)
|
||||
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
|
||||
|
||||
session := readSession(t, res)
|
||||
|
||||
res, err = writeReqReadRes(conn, base.Request{
|
||||
Method: base.Teardown,
|
||||
URL: mustParseURL("rtsp://localhost:8554/"),
|
||||
Header: base.Header{
|
||||
"CSeq": base.HeaderValue{"2"},
|
||||
"Session": base.HeaderValue{sx.Session},
|
||||
"Session": base.HeaderValue{session},
|
||||
},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
Reference in New Issue
Block a user