mirror of
https://github.com/aler9/gortsplib
synced 2025-10-04 23:02:45 +08:00
simplify tests (#247)
This commit is contained in:
@@ -120,7 +120,7 @@ https://pkg.go.dev/github.com/bluenviron/gortsplib/v3#pkg-index
|
|||||||
|
|
||||||
Related projects
|
Related projects
|
||||||
|
|
||||||
* rtsp-simple-server https://github.com/aler9/rtsp-simple-server
|
* MediaMTX https://github.com/aler9/mediamtx
|
||||||
* pion/sdp (SDP library used internally) https://github.com/pion/sdp
|
* pion/sdp (SDP library used internally) https://github.com/pion/sdp
|
||||||
* pion/rtp (RTP library used internally) https://github.com/pion/rtp
|
* pion/rtp (RTP library used internally) https://github.com/pion/rtp
|
||||||
* pion/rtcp (RTCP library used internally) https://github.com/pion/rtcp
|
* pion/rtcp (RTCP library used internally) https://github.com/pion/rtcp
|
||||||
|
@@ -1494,7 +1494,7 @@ func (c *Client) doPlay(ra *headers.Range, isSwitchingProtocol bool) (*base.Resp
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// open the firewall by sending test packets to the counterpart.
|
// open the firewall by sending empty packets to the counterpart.
|
||||||
// do this before sending the request.
|
// do this before sending the request.
|
||||||
// don't do this with multicast, otherwise the RTP packet is going to be broadcasted
|
// don't do this with multicast, otherwise the RTP packet is going to be broadcasted
|
||||||
// to all listeners, including us, messing up the stream.
|
// to all listeners, including us, messing up the stream.
|
||||||
|
@@ -79,14 +79,22 @@ func doDescribe(t *testing.T, conn *conn.Conn) *sdp.SessionDescription {
|
|||||||
return &desc
|
return &desc
|
||||||
}
|
}
|
||||||
|
|
||||||
func doSetup(t *testing.T, conn *conn.Conn, u string, inTH *headers.Transport) (*base.Response, *headers.Transport) {
|
func doSetup(t *testing.T, conn *conn.Conn, u string,
|
||||||
|
inTH *headers.Transport, session string,
|
||||||
|
) (*base.Response, *headers.Transport) {
|
||||||
|
h := base.Header{
|
||||||
|
"CSeq": base.HeaderValue{"1"},
|
||||||
|
"Transport": inTH.Marshal(),
|
||||||
|
}
|
||||||
|
|
||||||
|
if session != "" {
|
||||||
|
h["Session"] = base.HeaderValue{session}
|
||||||
|
}
|
||||||
|
|
||||||
res, err := writeReqReadRes(conn, base.Request{
|
res, err := writeReqReadRes(conn, base.Request{
|
||||||
Method: base.Setup,
|
Method: base.Setup,
|
||||||
URL: mustParseURL(u),
|
URL: mustParseURL(u),
|
||||||
Header: base.Header{
|
Header: h,
|
||||||
"CSeq": base.HeaderValue{"1"},
|
|
||||||
"Transport": inTH.Marshal(),
|
|
||||||
},
|
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||||
@@ -124,6 +132,19 @@ func doPause(t *testing.T, conn *conn.Conn, u string, session string) {
|
|||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func doTeardown(t *testing.T, conn *conn.Conn, u string, session string) {
|
||||||
|
res, err := writeReqReadRes(conn, base.Request{
|
||||||
|
Method: base.Teardown,
|
||||||
|
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 {
|
func readSession(t *testing.T, res *base.Response) string {
|
||||||
var sx headers.Session
|
var sx headers.Session
|
||||||
err := sx.Unmarshal(res.Header["Session"])
|
err := sx.Unmarshal(res.Header["Session"])
|
||||||
@@ -249,7 +270,7 @@ func TestServerPlayPath(t *testing.T) {
|
|||||||
res, _ := doSetup(t, conn,
|
res, _ := doSetup(t, conn,
|
||||||
strings.ReplaceAll(ca.setupURL, "[control]", "/"+
|
strings.ReplaceAll(ca.setupURL, "[control]", "/"+
|
||||||
relativeControlAttribute(desc.MediaDescriptions[1])),
|
relativeControlAttribute(desc.MediaDescriptions[1])),
|
||||||
th)
|
th, "")
|
||||||
|
|
||||||
session := readSession(t, res)
|
session := readSession(t, res)
|
||||||
|
|
||||||
@@ -614,7 +635,7 @@ func TestServerPlay(t *testing.T) {
|
|||||||
inTH.InterleavedIDs = &[2]int{4, 5}
|
inTH.InterleavedIDs = &[2]int{4, 5}
|
||||||
}
|
}
|
||||||
|
|
||||||
res, th := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
|
res, th := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH, "")
|
||||||
|
|
||||||
var l1 net.PacketConn
|
var l1 net.PacketConn
|
||||||
var l2 net.PacketConn
|
var l2 net.PacketConn
|
||||||
@@ -779,16 +800,7 @@ func TestServerPlay(t *testing.T) {
|
|||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||||
}
|
}
|
||||||
|
|
||||||
res, err = writeReqReadRes(conn, base.Request{
|
doTeardown(t, conn, "rtsp://"+listenIP+":8554/teststream", session)
|
||||||
Method: base.Teardown,
|
|
||||||
URL: mustParseURL("rtsp://" + listenIP + ":8554/teststream"),
|
|
||||||
Header: base.Header{
|
|
||||||
"CSeq": base.HeaderValue{"6"},
|
|
||||||
"Session": base.HeaderValue{session},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
|
||||||
|
|
||||||
<-sessionClosed
|
<-sessionClosed
|
||||||
|
|
||||||
@@ -883,7 +895,7 @@ func TestServerPlayDecodeErrors(t *testing.T) {
|
|||||||
inTH.InterleavedIDs = &[2]int{0, 1}
|
inTH.InterleavedIDs = &[2]int{0, 1}
|
||||||
}
|
}
|
||||||
|
|
||||||
res, resTH := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
|
res, resTH := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH, "")
|
||||||
|
|
||||||
var l1 net.PacketConn
|
var l1 net.PacketConn
|
||||||
var l2 net.PacketConn
|
var l2 net.PacketConn
|
||||||
@@ -995,7 +1007,7 @@ func TestServerPlayRTCPReport(t *testing.T) {
|
|||||||
inTH.InterleavedIDs = &[2]int{0, 1}
|
inTH.InterleavedIDs = &[2]int{0, 1}
|
||||||
}
|
}
|
||||||
|
|
||||||
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
|
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH, "")
|
||||||
|
|
||||||
var l1 net.PacketConn
|
var l1 net.PacketConn
|
||||||
var l2 net.PacketConn
|
var l2 net.PacketConn
|
||||||
@@ -1054,16 +1066,7 @@ func TestServerPlayRTCPReport(t *testing.T) {
|
|||||||
OctetCount: 2,
|
OctetCount: 2,
|
||||||
}, packets[0])
|
}, packets[0])
|
||||||
|
|
||||||
res, err = writeReqReadRes(conn, base.Request{
|
doTeardown(t, conn, "rtsp://localhost:8554/teststream", session)
|
||||||
Method: base.Teardown,
|
|
||||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
|
||||||
Header: base.Header{
|
|
||||||
"CSeq": base.HeaderValue{"4"},
|
|
||||||
"Session": base.HeaderValue{session},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1190,7 +1193,7 @@ func TestServerPlayTCPResponseBeforeFrames(t *testing.T) {
|
|||||||
InterleavedIDs: &[2]int{0, 1},
|
InterleavedIDs: &[2]int{0, 1},
|
||||||
}
|
}
|
||||||
|
|
||||||
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
|
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH, "")
|
||||||
|
|
||||||
session := readSession(t, res)
|
session := readSession(t, res)
|
||||||
|
|
||||||
@@ -1251,7 +1254,7 @@ func TestServerPlayPlayPlay(t *testing.T) {
|
|||||||
ClientPorts: &[2]int{30450, 30451},
|
ClientPorts: &[2]int{30450, 30451},
|
||||||
}
|
}
|
||||||
|
|
||||||
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
|
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH, "")
|
||||||
|
|
||||||
session := readSession(t, res)
|
session := readSession(t, res)
|
||||||
|
|
||||||
@@ -1340,7 +1343,7 @@ func TestServerPlayPlayPausePlay(t *testing.T) {
|
|||||||
InterleavedIDs: &[2]int{0, 1},
|
InterleavedIDs: &[2]int{0, 1},
|
||||||
}
|
}
|
||||||
|
|
||||||
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
|
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH, "")
|
||||||
|
|
||||||
session := readSession(t, res)
|
session := readSession(t, res)
|
||||||
|
|
||||||
@@ -1426,7 +1429,7 @@ func TestServerPlayPlayPausePause(t *testing.T) {
|
|||||||
InterleavedIDs: &[2]int{0, 1},
|
InterleavedIDs: &[2]int{0, 1},
|
||||||
}
|
}
|
||||||
|
|
||||||
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
|
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH, "")
|
||||||
|
|
||||||
session := readSession(t, res)
|
session := readSession(t, res)
|
||||||
|
|
||||||
@@ -1518,7 +1521,7 @@ func TestServerPlayTimeout(t *testing.T) {
|
|||||||
inTH.Protocol = headers.TransportProtocolUDP
|
inTH.Protocol = headers.TransportProtocolUDP
|
||||||
}
|
}
|
||||||
|
|
||||||
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
|
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH, "")
|
||||||
|
|
||||||
session := readSession(t, res)
|
session := readSession(t, res)
|
||||||
|
|
||||||
@@ -1605,7 +1608,7 @@ func TestServerPlayWithoutTeardown(t *testing.T) {
|
|||||||
inTH.InterleavedIDs = &[2]int{0, 1}
|
inTH.InterleavedIDs = &[2]int{0, 1}
|
||||||
}
|
}
|
||||||
|
|
||||||
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
|
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH, "")
|
||||||
|
|
||||||
session := readSession(t, res)
|
session := readSession(t, res)
|
||||||
|
|
||||||
@@ -1678,7 +1681,7 @@ func TestServerPlayUDPChangeConn(t *testing.T) {
|
|||||||
ClientPorts: &[2]int{35466, 35467},
|
ClientPorts: &[2]int{35466, 35467},
|
||||||
}
|
}
|
||||||
|
|
||||||
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
|
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH, "")
|
||||||
|
|
||||||
session := readSession(t, res)
|
session := readSession(t, res)
|
||||||
|
|
||||||
@@ -1761,7 +1764,7 @@ func TestServerPlayPartialMedias(t *testing.T) {
|
|||||||
InterleavedIDs: &[2]int{4, 5},
|
InterleavedIDs: &[2]int{4, 5},
|
||||||
}
|
}
|
||||||
|
|
||||||
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
|
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH, "")
|
||||||
|
|
||||||
session := readSession(t, res)
|
session := readSession(t, res)
|
||||||
|
|
||||||
@@ -1795,7 +1798,7 @@ func TestServerPlayAdditionalInfos(t *testing.T) {
|
|||||||
InterleavedIDs: &[2]int{0, 1},
|
InterleavedIDs: &[2]int{0, 1},
|
||||||
}
|
}
|
||||||
|
|
||||||
res, th := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
|
res, th := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH, "")
|
||||||
|
|
||||||
ssrcs := make([]*uint32, 2)
|
ssrcs := make([]*uint32, 2)
|
||||||
ssrcs[0] = th.SSRC
|
ssrcs[0] = th.SSRC
|
||||||
@@ -1815,21 +1818,8 @@ func TestServerPlayAdditionalInfos(t *testing.T) {
|
|||||||
|
|
||||||
session := readSession(t, res)
|
session := readSession(t, res)
|
||||||
|
|
||||||
res, err = writeReqReadRes(conn, base.Request{
|
_, th = doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[1]), inTH, session)
|
||||||
Method: base.Setup,
|
|
||||||
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[1])),
|
|
||||||
Header: base.Header{
|
|
||||||
"CSeq": base.HeaderValue{"3"},
|
|
||||||
"Transport": inTH.Marshal(),
|
|
||||||
"Session": base.HeaderValue{session},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
|
||||||
|
|
||||||
th = &headers.Transport{}
|
|
||||||
err = th.Unmarshal(res.Header["Transport"])
|
|
||||||
require.NoError(t, err)
|
|
||||||
ssrcs[1] = th.SSRC
|
ssrcs[1] = th.SSRC
|
||||||
|
|
||||||
doPlay(t, conn, "rtsp://localhost:8554/teststream", session)
|
doPlay(t, conn, "rtsp://localhost:8554/teststream", session)
|
||||||
@@ -2035,26 +2025,13 @@ func TestServerPlayNoInterleavedIDs(t *testing.T) {
|
|||||||
Protocol: headers.TransportProtocolTCP,
|
Protocol: headers.TransportProtocolTCP,
|
||||||
}
|
}
|
||||||
|
|
||||||
res, th := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
|
res, th := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH, "")
|
||||||
|
|
||||||
require.Equal(t, &[2]int{0, 1}, th.InterleavedIDs)
|
require.Equal(t, &[2]int{0, 1}, th.InterleavedIDs)
|
||||||
|
|
||||||
session := readSession(t, res)
|
session := readSession(t, res)
|
||||||
|
|
||||||
res, err = writeReqReadRes(conn, base.Request{
|
_, th = doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[1]), inTH, session)
|
||||||
Method: base.Setup,
|
|
||||||
URL: mustParseURL(absoluteControlAttribute(desc.MediaDescriptions[1])),
|
|
||||||
Header: base.Header{
|
|
||||||
"CSeq": base.HeaderValue{"3"},
|
|
||||||
"Transport": inTH.Marshal(),
|
|
||||||
"Session": base.HeaderValue{session},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
|
||||||
|
|
||||||
err = th.Unmarshal(res.Header["Transport"])
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
require.Equal(t, &[2]int{2, 3}, th.InterleavedIDs)
|
require.Equal(t, &[2]int{2, 3}, th.InterleavedIDs)
|
||||||
|
|
||||||
|
@@ -21,15 +21,34 @@ import (
|
|||||||
"github.com/bluenviron/gortsplib/v3/pkg/sdp"
|
"github.com/bluenviron/gortsplib/v3/pkg/sdp"
|
||||||
)
|
)
|
||||||
|
|
||||||
func invalidURLAnnounceReq(t *testing.T, control string) base.Request {
|
func doAnnounce(t *testing.T, conn *conn.Conn, u string, medias media.Medias) {
|
||||||
return base.Request{
|
res, err := writeReqReadRes(conn, base.Request{
|
||||||
Method: base.Announce,
|
Method: base.Announce,
|
||||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
URL: mustParseURL(u),
|
||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"CSeq": base.HeaderValue{"1"},
|
"CSeq": base.HeaderValue{"1"},
|
||||||
"Content-Type": base.HeaderValue{"application/sdp"},
|
"Content-Type": base.HeaderValue{"application/sdp"},
|
||||||
},
|
},
|
||||||
Body: func() []byte {
|
Body: mustMarshalMedias(medias),
|
||||||
|
})
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||||
|
}
|
||||||
|
|
||||||
|
func doRecord(t *testing.T, conn *conn.Conn, u string, session string) {
|
||||||
|
res, err := writeReqReadRes(conn, base.Request{
|
||||||
|
Method: base.Record,
|
||||||
|
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 invalidURLAnnounceReq(t *testing.T, control string) base.Request {
|
||||||
medi := testH264Media
|
medi := testH264Media
|
||||||
medi.Control = control
|
medi.Control = control
|
||||||
|
|
||||||
@@ -48,8 +67,15 @@ func invalidURLAnnounceReq(t *testing.T, control string) base.Request {
|
|||||||
}
|
}
|
||||||
|
|
||||||
byts, _ := sout.Marshal()
|
byts, _ := sout.Marshal()
|
||||||
return byts
|
|
||||||
}(),
|
return base.Request{
|
||||||
|
Method: base.Announce,
|
||||||
|
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
||||||
|
Header: base.Header{
|
||||||
|
"CSeq": base.HeaderValue{"1"},
|
||||||
|
"Content-Type": base.HeaderValue{"application/sdp"},
|
||||||
|
},
|
||||||
|
Body: byts,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -276,20 +302,11 @@ func TestServerRecordPath(t *testing.T) {
|
|||||||
InterleavedIDs: &[2]int{0, 1},
|
InterleavedIDs: &[2]int{0, 1},
|
||||||
}
|
}
|
||||||
|
|
||||||
res, _ = doSetup(t, conn, ca.setupURL, th)
|
res, _ = doSetup(t, conn, ca.setupURL, th, "")
|
||||||
|
|
||||||
session := readSession(t, res)
|
session := readSession(t, res)
|
||||||
|
|
||||||
res, err = writeReqReadRes(conn, base.Request{
|
doRecord(t, conn, ca.announceURL, session)
|
||||||
Method: base.Record,
|
|
||||||
URL: mustParseURL(ca.announceURL),
|
|
||||||
Header: base.Header{
|
|
||||||
"CSeq": base.HeaderValue{"3"},
|
|
||||||
"Session": base.HeaderValue{session},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -328,17 +345,7 @@ func TestServerRecordErrorSetupMediaTwice(t *testing.T) {
|
|||||||
medias := media.Medias{testH264Media}
|
medias := media.Medias{testH264Media}
|
||||||
resetMediaControls(medias)
|
resetMediaControls(medias)
|
||||||
|
|
||||||
res, err := writeReqReadRes(conn, base.Request{
|
doAnnounce(t, conn, "rtsp://localhost:8554/teststream", medias)
|
||||||
Method: base.Announce,
|
|
||||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
|
||||||
Header: base.Header{
|
|
||||||
"CSeq": base.HeaderValue{"1"},
|
|
||||||
"Content-Type": base.HeaderValue{"application/sdp"},
|
|
||||||
},
|
|
||||||
Body: mustMarshalMedias(medias),
|
|
||||||
})
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
|
||||||
|
|
||||||
inTH := &headers.Transport{
|
inTH := &headers.Transport{
|
||||||
Protocol: headers.TransportProtocolTCP,
|
Protocol: headers.TransportProtocolTCP,
|
||||||
@@ -353,16 +360,11 @@ func TestServerRecordErrorSetupMediaTwice(t *testing.T) {
|
|||||||
InterleavedIDs: &[2]int{0, 1},
|
InterleavedIDs: &[2]int{0, 1},
|
||||||
}
|
}
|
||||||
|
|
||||||
res, _ = doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[0].Control, inTH)
|
res, _ := doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[0].Control, inTH, "")
|
||||||
|
|
||||||
session := readSession(t, res)
|
session := readSession(t, res)
|
||||||
|
|
||||||
res, err = writeReqReadRes(conn, base.Request{
|
inTH = &headers.Transport{
|
||||||
Method: base.Setup,
|
|
||||||
URL: mustParseURL("rtsp://localhost:8554/teststream/" + medias[0].Control),
|
|
||||||
Header: base.Header{
|
|
||||||
"CSeq": base.HeaderValue{"3"},
|
|
||||||
"Transport": headers.Transport{
|
|
||||||
Protocol: headers.TransportProtocolTCP,
|
Protocol: headers.TransportProtocolTCP,
|
||||||
Delivery: func() *headers.TransportDelivery {
|
Delivery: func() *headers.TransportDelivery {
|
||||||
v := headers.TransportDeliveryUnicast
|
v := headers.TransportDeliveryUnicast
|
||||||
@@ -373,7 +375,14 @@ func TestServerRecordErrorSetupMediaTwice(t *testing.T) {
|
|||||||
return &v
|
return &v
|
||||||
}(),
|
}(),
|
||||||
InterleavedIDs: &[2]int{2, 3},
|
InterleavedIDs: &[2]int{2, 3},
|
||||||
}.Marshal(),
|
}
|
||||||
|
|
||||||
|
res, err = writeReqReadRes(conn, base.Request{
|
||||||
|
Method: base.Setup,
|
||||||
|
URL: mustParseURL("rtsp://localhost:8554/teststream/" + medias[0].Control),
|
||||||
|
Header: base.Header{
|
||||||
|
"CSeq": base.HeaderValue{"3"},
|
||||||
|
"Transport": inTH.Marshal(),
|
||||||
"Session": base.HeaderValue{session},
|
"Session": base.HeaderValue{session},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
@@ -439,17 +448,7 @@ func TestServerRecordErrorRecordPartialMedias(t *testing.T) {
|
|||||||
}
|
}
|
||||||
resetMediaControls(medias)
|
resetMediaControls(medias)
|
||||||
|
|
||||||
res, err := writeReqReadRes(conn, base.Request{
|
doAnnounce(t, conn, "rtsp://localhost:8554/teststream", medias)
|
||||||
Method: base.Announce,
|
|
||||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
|
||||||
Header: base.Header{
|
|
||||||
"CSeq": base.HeaderValue{"1"},
|
|
||||||
"Content-Type": base.HeaderValue{"application/sdp"},
|
|
||||||
},
|
|
||||||
Body: mustMarshalMedias(medias),
|
|
||||||
})
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
|
||||||
|
|
||||||
inTH := &headers.Transport{
|
inTH := &headers.Transport{
|
||||||
Protocol: headers.TransportProtocolTCP,
|
Protocol: headers.TransportProtocolTCP,
|
||||||
@@ -464,7 +463,7 @@ func TestServerRecordErrorRecordPartialMedias(t *testing.T) {
|
|||||||
InterleavedIDs: &[2]int{0, 1},
|
InterleavedIDs: &[2]int{0, 1},
|
||||||
}
|
}
|
||||||
|
|
||||||
res, _ = doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[0].Control, inTH)
|
res, _ := doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[0].Control, inTH, "")
|
||||||
|
|
||||||
session := readSession(t, res)
|
session := readSession(t, res)
|
||||||
|
|
||||||
@@ -601,17 +600,7 @@ func TestServerRecord(t *testing.T) {
|
|||||||
}
|
}
|
||||||
resetMediaControls(medias)
|
resetMediaControls(medias)
|
||||||
|
|
||||||
res, err := writeReqReadRes(conn, base.Request{
|
doAnnounce(t, conn, "rtsp://localhost:8554/teststream", medias)
|
||||||
Method: base.Announce,
|
|
||||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
|
||||||
Header: base.Header{
|
|
||||||
"CSeq": base.HeaderValue{"1"},
|
|
||||||
"Content-Type": base.HeaderValue{"application/sdp"},
|
|
||||||
},
|
|
||||||
Body: mustMarshalMedias(medias),
|
|
||||||
})
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
|
||||||
|
|
||||||
<-sessionOpened
|
<-sessionOpened
|
||||||
|
|
||||||
@@ -648,29 +637,16 @@ func TestServerRecord(t *testing.T) {
|
|||||||
inTH.InterleavedIDs = &[2]int{2 + i*2, 3 + i*2}
|
inTH.InterleavedIDs = &[2]int{2 + i*2, 3 + i*2}
|
||||||
}
|
}
|
||||||
|
|
||||||
res, _ := doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[i].Control, inTH)
|
res, th := doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[i].Control, inTH, "")
|
||||||
|
|
||||||
session = readSession(t, res)
|
session = readSession(t, res)
|
||||||
|
|
||||||
var th headers.Transport
|
|
||||||
err = th.Unmarshal(res.Header["Transport"])
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
if transport == "udp" {
|
if transport == "udp" {
|
||||||
serverPorts[i] = th.ServerPorts
|
serverPorts[i] = th.ServerPorts
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
res, err = writeReqReadRes(conn, base.Request{
|
doRecord(t, conn, "rtsp://localhost:8554/teststream", session)
|
||||||
Method: base.Record,
|
|
||||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
|
||||||
Header: base.Header{
|
|
||||||
"CSeq": base.HeaderValue{"3"},
|
|
||||||
"Session": base.HeaderValue{session},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
|
||||||
|
|
||||||
for i := 0; i < 2; i++ {
|
for i := 0; i < 2; i++ {
|
||||||
// server -> client (direct)
|
// server -> client (direct)
|
||||||
@@ -734,16 +710,7 @@ func TestServerRecord(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
res, err = writeReqReadRes(conn, base.Request{
|
doTeardown(t, conn, "rtsp://localhost:8554/teststream", session)
|
||||||
Method: base.Teardown,
|
|
||||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
|
||||||
Header: base.Header{
|
|
||||||
"CSeq": base.HeaderValue{"3"},
|
|
||||||
"Session": base.HeaderValue{session},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
|
||||||
|
|
||||||
<-sessionClosed
|
<-sessionClosed
|
||||||
|
|
||||||
@@ -795,17 +762,7 @@ func TestServerRecordErrorInvalidProtocol(t *testing.T) {
|
|||||||
medias := media.Medias{testH264Media}
|
medias := media.Medias{testH264Media}
|
||||||
resetMediaControls(medias)
|
resetMediaControls(medias)
|
||||||
|
|
||||||
res, err := writeReqReadRes(conn, base.Request{
|
doAnnounce(t, conn, "rtsp://localhost:8554/teststream", medias)
|
||||||
Method: base.Announce,
|
|
||||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
|
||||||
Header: base.Header{
|
|
||||||
"CSeq": base.HeaderValue{"1"},
|
|
||||||
"Content-Type": base.HeaderValue{"application/sdp"},
|
|
||||||
},
|
|
||||||
Body: mustMarshalMedias(medias),
|
|
||||||
})
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
|
||||||
|
|
||||||
inTH := &headers.Transport{
|
inTH := &headers.Transport{
|
||||||
Delivery: func() *headers.TransportDelivery {
|
Delivery: func() *headers.TransportDelivery {
|
||||||
@@ -820,24 +777,11 @@ func TestServerRecordErrorInvalidProtocol(t *testing.T) {
|
|||||||
ClientPorts: &[2]int{35466, 35467},
|
ClientPorts: &[2]int{35466, 35467},
|
||||||
}
|
}
|
||||||
|
|
||||||
res, _ = doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[0].Control, inTH)
|
res, _ := doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[0].Control, inTH, "")
|
||||||
|
|
||||||
session := readSession(t, res)
|
session := readSession(t, res)
|
||||||
|
|
||||||
var th headers.Transport
|
doRecord(t, conn, "rtsp://localhost:8554/teststream", session)
|
||||||
err = th.Unmarshal(res.Header["Transport"])
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
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{session},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
|
||||||
|
|
||||||
err = conn.WriteInterleavedFrame(&base.InterleavedFrame{
|
err = conn.WriteInterleavedFrame(&base.InterleavedFrame{
|
||||||
Channel: 0,
|
Channel: 0,
|
||||||
@@ -885,17 +829,7 @@ func TestServerRecordRTCPReport(t *testing.T) {
|
|||||||
medias := media.Medias{testH264Media}
|
medias := media.Medias{testH264Media}
|
||||||
resetMediaControls(medias)
|
resetMediaControls(medias)
|
||||||
|
|
||||||
res, err := writeReqReadRes(conn, base.Request{
|
doAnnounce(t, conn, "rtsp://localhost:8554/teststream", medias)
|
||||||
Method: base.Announce,
|
|
||||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
|
||||||
Header: base.Header{
|
|
||||||
"CSeq": base.HeaderValue{"1"},
|
|
||||||
"Content-Type": base.HeaderValue{"application/sdp"},
|
|
||||||
},
|
|
||||||
Body: mustMarshalMedias(medias),
|
|
||||||
})
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
|
||||||
|
|
||||||
l1, err := net.ListenPacket("udp", "localhost:34556")
|
l1, err := net.ListenPacket("udp", "localhost:34556")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@@ -918,24 +852,11 @@ func TestServerRecordRTCPReport(t *testing.T) {
|
|||||||
ClientPorts: &[2]int{34556, 34557},
|
ClientPorts: &[2]int{34556, 34557},
|
||||||
}
|
}
|
||||||
|
|
||||||
res, _ = doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[0].Control, inTH)
|
res, th := doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[0].Control, inTH, "")
|
||||||
|
|
||||||
session := readSession(t, res)
|
session := readSession(t, res)
|
||||||
|
|
||||||
var th headers.Transport
|
doRecord(t, conn, "rtsp://localhost:8554/teststream", session)
|
||||||
err = th.Unmarshal(res.Header["Transport"])
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
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{session},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
|
||||||
|
|
||||||
byts, _ := (&rtp.Packet{
|
byts, _ := (&rtp.Packet{
|
||||||
Header: rtp.Header{
|
Header: rtp.Header{
|
||||||
@@ -1051,17 +972,7 @@ func TestServerRecordTimeout(t *testing.T) {
|
|||||||
medias := media.Medias{testH264Media}
|
medias := media.Medias{testH264Media}
|
||||||
resetMediaControls(medias)
|
resetMediaControls(medias)
|
||||||
|
|
||||||
res, err := writeReqReadRes(conn, base.Request{
|
doAnnounce(t, conn, "rtsp://localhost:8554/teststream", medias)
|
||||||
Method: base.Announce,
|
|
||||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
|
||||||
Header: base.Header{
|
|
||||||
"CSeq": base.HeaderValue{"1"},
|
|
||||||
"Content-Type": base.HeaderValue{"application/sdp"},
|
|
||||||
},
|
|
||||||
Body: mustMarshalMedias(medias),
|
|
||||||
})
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
|
||||||
|
|
||||||
inTH := &headers.Transport{
|
inTH := &headers.Transport{
|
||||||
Delivery: func() *headers.TransportDelivery {
|
Delivery: func() *headers.TransportDelivery {
|
||||||
@@ -1082,24 +993,11 @@ func TestServerRecordTimeout(t *testing.T) {
|
|||||||
inTH.InterleavedIDs = &[2]int{0, 1}
|
inTH.InterleavedIDs = &[2]int{0, 1}
|
||||||
}
|
}
|
||||||
|
|
||||||
res, _ = doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[0].Control, inTH)
|
res, _ := doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[0].Control, inTH, "")
|
||||||
|
|
||||||
session := readSession(t, res)
|
session := readSession(t, res)
|
||||||
|
|
||||||
var th headers.Transport
|
doRecord(t, conn, "rtsp://localhost:8554/teststream", session)
|
||||||
err = th.Unmarshal(res.Header["Transport"])
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
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{session},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
|
||||||
|
|
||||||
<-sessionClosed
|
<-sessionClosed
|
||||||
|
|
||||||
@@ -1163,17 +1061,7 @@ func TestServerRecordWithoutTeardown(t *testing.T) {
|
|||||||
medias := media.Medias{testH264Media}
|
medias := media.Medias{testH264Media}
|
||||||
resetMediaControls(medias)
|
resetMediaControls(medias)
|
||||||
|
|
||||||
res, err := writeReqReadRes(conn, base.Request{
|
doAnnounce(t, conn, "rtsp://localhost:8554/teststream", medias)
|
||||||
Method: base.Announce,
|
|
||||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
|
||||||
Header: base.Header{
|
|
||||||
"CSeq": base.HeaderValue{"1"},
|
|
||||||
"Content-Type": base.HeaderValue{"application/sdp"},
|
|
||||||
},
|
|
||||||
Body: mustMarshalMedias(medias),
|
|
||||||
})
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
|
||||||
|
|
||||||
inTH := &headers.Transport{
|
inTH := &headers.Transport{
|
||||||
Delivery: func() *headers.TransportDelivery {
|
Delivery: func() *headers.TransportDelivery {
|
||||||
@@ -1194,24 +1082,11 @@ func TestServerRecordWithoutTeardown(t *testing.T) {
|
|||||||
inTH.InterleavedIDs = &[2]int{0, 1}
|
inTH.InterleavedIDs = &[2]int{0, 1}
|
||||||
}
|
}
|
||||||
|
|
||||||
res, _ = doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[0].Control, inTH)
|
res, _ := doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[0].Control, inTH, "")
|
||||||
|
|
||||||
session := readSession(t, res)
|
session := readSession(t, res)
|
||||||
|
|
||||||
var th headers.Transport
|
doRecord(t, conn, "rtsp://localhost:8554/teststream", session)
|
||||||
err = th.Unmarshal(res.Header["Transport"])
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
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{session},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
|
||||||
|
|
||||||
nconn.Close()
|
nconn.Close()
|
||||||
|
|
||||||
@@ -1265,17 +1140,7 @@ func TestServerRecordUDPChangeConn(t *testing.T) {
|
|||||||
medias := media.Medias{testH264Media}
|
medias := media.Medias{testH264Media}
|
||||||
resetMediaControls(medias)
|
resetMediaControls(medias)
|
||||||
|
|
||||||
res, err := writeReqReadRes(conn, base.Request{
|
doAnnounce(t, conn, "rtsp://localhost:8554/teststream", medias)
|
||||||
Method: base.Announce,
|
|
||||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
|
||||||
Header: base.Header{
|
|
||||||
"CSeq": base.HeaderValue{"1"},
|
|
||||||
"Content-Type": base.HeaderValue{"application/sdp"},
|
|
||||||
},
|
|
||||||
Body: mustMarshalMedias(medias),
|
|
||||||
})
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
|
||||||
|
|
||||||
inTH := &headers.Transport{
|
inTH := &headers.Transport{
|
||||||
Delivery: func() *headers.TransportDelivery {
|
Delivery: func() *headers.TransportDelivery {
|
||||||
@@ -1290,20 +1155,11 @@ func TestServerRecordUDPChangeConn(t *testing.T) {
|
|||||||
ClientPorts: &[2]int{35466, 35467},
|
ClientPorts: &[2]int{35466, 35467},
|
||||||
}
|
}
|
||||||
|
|
||||||
res, _ = doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[0].Control, inTH)
|
res, _ := doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[0].Control, inTH, "")
|
||||||
|
|
||||||
session := readSession(t, res)
|
session := readSession(t, res)
|
||||||
|
|
||||||
res, err = writeReqReadRes(conn, base.Request{
|
doRecord(t, conn, "rtsp://localhost:8554/teststream", session)
|
||||||
Method: base.Record,
|
|
||||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
|
||||||
Header: base.Header{
|
|
||||||
"CSeq": base.HeaderValue{"3"},
|
|
||||||
"Session": base.HeaderValue{session},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
|
||||||
|
|
||||||
sxID = session
|
sxID = session
|
||||||
}()
|
}()
|
||||||
@@ -1412,17 +1268,7 @@ func TestServerRecordDecodeErrors(t *testing.T) {
|
|||||||
}}
|
}}
|
||||||
resetMediaControls(medias)
|
resetMediaControls(medias)
|
||||||
|
|
||||||
res, err := writeReqReadRes(conn, base.Request{
|
doAnnounce(t, conn, "rtsp://localhost:8554/teststream", medias)
|
||||||
Method: base.Announce,
|
|
||||||
URL: mustParseURL("rtsp://localhost:8554/teststream"),
|
|
||||||
Header: base.Header{
|
|
||||||
"CSeq": base.HeaderValue{"1"},
|
|
||||||
"Content-Type": base.HeaderValue{"application/sdp"},
|
|
||||||
},
|
|
||||||
Body: mustMarshalMedias(medias),
|
|
||||||
})
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
|
||||||
|
|
||||||
inTH := &headers.Transport{
|
inTH := &headers.Transport{
|
||||||
Delivery: func() *headers.TransportDelivery {
|
Delivery: func() *headers.TransportDelivery {
|
||||||
@@ -1456,24 +1302,11 @@ func TestServerRecordDecodeErrors(t *testing.T) {
|
|||||||
defer l2.Close()
|
defer l2.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
res, _ = doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[0].Control, inTH)
|
res, resTH := doSetup(t, conn, "rtsp://localhost:8554/teststream/"+medias[0].Control, inTH, "")
|
||||||
|
|
||||||
session := readSession(t, res)
|
session := readSession(t, res)
|
||||||
|
|
||||||
var resTH headers.Transport
|
doRecord(t, conn, "rtsp://localhost:8554/teststream", session)
|
||||||
err = resTH.Unmarshal(res.Header["Transport"])
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
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{session},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
|
||||||
|
|
||||||
switch { //nolint:dupl
|
switch { //nolint:dupl
|
||||||
case ca.proto == "udp" && ca.name == "rtp invalid":
|
case ca.proto == "udp" && ca.name == "rtp invalid":
|
||||||
|
@@ -92,7 +92,7 @@ func (sm *serverSessionMedia) start() {
|
|||||||
// readers can send RTCP packets only
|
// readers can send RTCP packets only
|
||||||
sm.ss.s.udpRTCPListener.addClient(sm.ss.author.ip(), sm.udpRTCPReadPort, sm)
|
sm.ss.s.udpRTCPListener.addClient(sm.ss.author.ip(), sm.udpRTCPReadPort, sm)
|
||||||
} else {
|
} else {
|
||||||
// open the firewall by sending test packets to the counterpart.
|
// open the firewall by sending empty packets to the counterpart.
|
||||||
sm.ss.WritePacketRTP(sm.media, &rtp.Packet{Header: rtp.Header{Version: 2}})
|
sm.ss.WritePacketRTP(sm.media, &rtp.Packet{Header: rtp.Header{Version: 2}})
|
||||||
sm.ss.WritePacketRTCP(sm.media, &rtcp.ReceiverReport{})
|
sm.ss.WritePacketRTCP(sm.media, &rtcp.ReceiverReport{})
|
||||||
|
|
||||||
|
@@ -376,7 +376,7 @@ func TestServerErrorMethodNotImplemented(t *testing.T) {
|
|||||||
InterleavedIDs: &[2]int{0, 1},
|
InterleavedIDs: &[2]int{0, 1},
|
||||||
}
|
}
|
||||||
|
|
||||||
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
|
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH, "")
|
||||||
|
|
||||||
session = readSession(t, res)
|
session = readSession(t, res)
|
||||||
}
|
}
|
||||||
@@ -468,7 +468,7 @@ func TestServerErrorTCPTwoConnOneSession(t *testing.T) {
|
|||||||
InterleavedIDs: &[2]int{0, 1},
|
InterleavedIDs: &[2]int{0, 1},
|
||||||
}
|
}
|
||||||
|
|
||||||
res, _ := doSetup(t, conn1, absoluteControlAttribute(desc1.MediaDescriptions[0]), inTH)
|
res, _ := doSetup(t, conn1, absoluteControlAttribute(desc1.MediaDescriptions[0]), inTH, "")
|
||||||
|
|
||||||
session := readSession(t, res)
|
session := readSession(t, res)
|
||||||
|
|
||||||
@@ -559,7 +559,7 @@ func TestServerErrorTCPOneConnTwoSessions(t *testing.T) {
|
|||||||
InterleavedIDs: &[2]int{0, 1},
|
InterleavedIDs: &[2]int{0, 1},
|
||||||
}
|
}
|
||||||
|
|
||||||
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
|
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH, "")
|
||||||
|
|
||||||
session := readSession(t, res)
|
session := readSession(t, res)
|
||||||
|
|
||||||
@@ -745,7 +745,7 @@ func TestServerGetSetParameter(t *testing.T) {
|
|||||||
InterleavedIDs: &[2]int{0, 1},
|
InterleavedIDs: &[2]int{0, 1},
|
||||||
}
|
}
|
||||||
|
|
||||||
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
|
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH, "")
|
||||||
|
|
||||||
session = readSession(t, res)
|
session = readSession(t, res)
|
||||||
}
|
}
|
||||||
@@ -887,7 +887,7 @@ func TestServerSessionClose(t *testing.T) {
|
|||||||
InterleavedIDs: &[2]int{0, 1},
|
InterleavedIDs: &[2]int{0, 1},
|
||||||
}
|
}
|
||||||
|
|
||||||
doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
|
doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH, "")
|
||||||
|
|
||||||
session.Close()
|
session.Close()
|
||||||
session.Close()
|
session.Close()
|
||||||
@@ -1027,20 +1027,11 @@ func TestServerSessionTeardown(t *testing.T) {
|
|||||||
InterleavedIDs: &[2]int{0, 1},
|
InterleavedIDs: &[2]int{0, 1},
|
||||||
}
|
}
|
||||||
|
|
||||||
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH)
|
res, _ := doSetup(t, conn, absoluteControlAttribute(desc.MediaDescriptions[0]), inTH, "")
|
||||||
|
|
||||||
session := readSession(t, res)
|
session := readSession(t, res)
|
||||||
|
|
||||||
res, err = writeReqReadRes(conn, base.Request{
|
doTeardown(t, conn, "rtsp://localhost:8554/", session)
|
||||||
Method: base.Teardown,
|
|
||||||
URL: mustParseURL("rtsp://localhost:8554/"),
|
|
||||||
Header: base.Header{
|
|
||||||
"CSeq": base.HeaderValue{"2"},
|
|
||||||
"Session": base.HeaderValue{session},
|
|
||||||
},
|
|
||||||
})
|
|
||||||
require.NoError(t, err)
|
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
|
||||||
|
|
||||||
res, err = writeReqReadRes(conn, base.Request{
|
res, err = writeReqReadRes(conn, base.Request{
|
||||||
Method: base.Options,
|
Method: base.Options,
|
||||||
|
Reference in New Issue
Block a user