mirror of
https://github.com/aler9/gortsplib
synced 2025-10-04 23:02:45 +08:00
move url.URL into base.URL (#459)
This commit is contained in:
51
client.go
51
client.go
@@ -29,7 +29,6 @@ import (
|
||||
"github.com/bluenviron/gortsplib/v4/pkg/liberrors"
|
||||
"github.com/bluenviron/gortsplib/v4/pkg/rtptime"
|
||||
"github.com/bluenviron/gortsplib/v4/pkg/sdp"
|
||||
"github.com/bluenviron/gortsplib/v4/pkg/url"
|
||||
)
|
||||
|
||||
// convert an URL into an address, in particular:
|
||||
@@ -37,7 +36,7 @@ import (
|
||||
// * handle IPv6 with or without square brackets.
|
||||
// Adapted from net/http:
|
||||
// https://cs.opensource.google/go/go/+/refs/tags/go1.20.5:src/net/http/transport.go;l=2747
|
||||
func canonicalAddr(u *url.URL) string {
|
||||
func canonicalAddr(u *base.URL) string {
|
||||
addr := u.Hostname()
|
||||
|
||||
port := u.Port()
|
||||
@@ -56,10 +55,10 @@ func isAnyPort(p int) bool {
|
||||
return p == 0 || p == 1
|
||||
}
|
||||
|
||||
func findBaseURL(sd *sdp.SessionDescription, res *base.Response, u *url.URL) (*url.URL, error) {
|
||||
func findBaseURL(sd *sdp.SessionDescription, res *base.Response, u *base.URL) (*base.URL, error) {
|
||||
// use global control attribute
|
||||
if control, ok := sd.Attribute("control"); ok && control != "*" {
|
||||
ret, err := url.Parse(control)
|
||||
ret, err := base.ParseURL(control)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("invalid control attribute: '%v'", control)
|
||||
}
|
||||
@@ -76,7 +75,7 @@ func findBaseURL(sd *sdp.SessionDescription, res *base.Response, u *url.URL) (*u
|
||||
return nil, fmt.Errorf("invalid Content-Base: '%v'", cb)
|
||||
}
|
||||
|
||||
ret, err := url.Parse(cb[0])
|
||||
ret, err := base.ParseURL(cb[0])
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("invalid Content-Base: '%v'", cb)
|
||||
}
|
||||
@@ -138,23 +137,23 @@ func (s clientState) String() string {
|
||||
}
|
||||
|
||||
type optionsReq struct {
|
||||
url *url.URL
|
||||
url *base.URL
|
||||
res chan clientRes
|
||||
}
|
||||
|
||||
type describeReq struct {
|
||||
url *url.URL
|
||||
url *base.URL
|
||||
res chan clientRes
|
||||
}
|
||||
|
||||
type announceReq struct {
|
||||
url *url.URL
|
||||
url *base.URL
|
||||
desc *description.Session
|
||||
res chan clientRes
|
||||
}
|
||||
|
||||
type setupReq struct {
|
||||
baseURL *url.URL
|
||||
baseURL *base.URL
|
||||
media *description.Media
|
||||
rtpPort int
|
||||
rtcpPort int
|
||||
@@ -288,7 +287,7 @@ type Client struct {
|
||||
receiverReportPeriod time.Duration
|
||||
checkTimeoutPeriod time.Duration
|
||||
|
||||
connURL *url.URL
|
||||
connURL *base.URL
|
||||
ctx context.Context
|
||||
ctxCancel func()
|
||||
state clientState
|
||||
@@ -299,8 +298,8 @@ type Client struct {
|
||||
cseq int
|
||||
optionsSent bool
|
||||
useGetParameter bool
|
||||
lastDescribeURL *url.URL
|
||||
baseURL *url.URL
|
||||
lastDescribeURL *base.URL
|
||||
baseURL *base.URL
|
||||
effectiveTransport *Transport
|
||||
medias map[*description.Media]*clientMedia
|
||||
tcpCallbackByChannel map[int]readFunc
|
||||
@@ -422,7 +421,7 @@ func (c *Client) Start(scheme string, host string) error {
|
||||
|
||||
ctx, ctxCancel := context.WithCancel(context.Background())
|
||||
|
||||
c.connURL = &url.URL{
|
||||
c.connURL = &base.URL{
|
||||
Scheme: scheme,
|
||||
Host: host,
|
||||
}
|
||||
@@ -450,7 +449,7 @@ func (c *Client) Start(scheme string, host string) error {
|
||||
|
||||
// StartRecording connects to the address and starts publishing given media.
|
||||
func (c *Client) StartRecording(address string, desc *description.Session) error {
|
||||
u, err := url.Parse(address)
|
||||
u, err := base.ParseURL(address)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -755,7 +754,7 @@ func (c *Client) trySwitchingProtocol() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *Client) trySwitchingProtocol2(medi *description.Media, baseURL *url.URL) (*base.Response, error) {
|
||||
func (c *Client) trySwitchingProtocol2(medi *description.Media, baseURL *base.URL) (*base.Response, error) {
|
||||
c.OnTransportSwitch(liberrors.ErrClientSwitchToTCP2{})
|
||||
|
||||
prevConnURL := c.connURL
|
||||
@@ -1027,7 +1026,7 @@ func (c *Client) doKeepAlive() error {
|
||||
return err
|
||||
}
|
||||
|
||||
func (c *Client) doOptions(u *url.URL) (*base.Response, error) {
|
||||
func (c *Client) doOptions(u *base.URL) (*base.Response, error) {
|
||||
err := c.checkState(map[clientState]struct{}{
|
||||
clientStateInitial: {},
|
||||
clientStatePrePlay: {},
|
||||
@@ -1066,7 +1065,7 @@ func (c *Client) doOptions(u *url.URL) (*base.Response, error) {
|
||||
}
|
||||
|
||||
// Options sends an OPTIONS request.
|
||||
func (c *Client) Options(u *url.URL) (*base.Response, error) {
|
||||
func (c *Client) Options(u *base.URL) (*base.Response, error) {
|
||||
cres := make(chan clientRes)
|
||||
select {
|
||||
case c.chOptions <- optionsReq{url: u, res: cres}:
|
||||
@@ -1078,7 +1077,7 @@ func (c *Client) Options(u *url.URL) (*base.Response, error) {
|
||||
}
|
||||
}
|
||||
|
||||
func (c *Client) doDescribe(u *url.URL) (*description.Session, *base.Response, error) {
|
||||
func (c *Client) doDescribe(u *base.URL) (*description.Session, *base.Response, error) {
|
||||
err := c.checkState(map[clientState]struct{}{
|
||||
clientStateInitial: {},
|
||||
clientStatePrePlay: {},
|
||||
@@ -1111,7 +1110,7 @@ func (c *Client) doDescribe(u *url.URL) (*description.Session, *base.Response, e
|
||||
len(res.Header["Location"]) == 1 {
|
||||
c.reset()
|
||||
|
||||
ru, err := url.Parse(res.Header["Location"][0])
|
||||
ru, err := base.ParseURL(res.Header["Location"][0])
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
@@ -1120,7 +1119,7 @@ func (c *Client) doDescribe(u *url.URL) (*description.Session, *base.Response, e
|
||||
ru.User = u.User
|
||||
}
|
||||
|
||||
c.connURL = &url.URL{
|
||||
c.connURL = &base.URL{
|
||||
Scheme: ru.Scheme,
|
||||
Host: ru.Host,
|
||||
}
|
||||
@@ -1167,7 +1166,7 @@ func (c *Client) doDescribe(u *url.URL) (*description.Session, *base.Response, e
|
||||
}
|
||||
|
||||
// Describe sends a DESCRIBE request.
|
||||
func (c *Client) Describe(u *url.URL) (*description.Session, *base.Response, error) {
|
||||
func (c *Client) Describe(u *base.URL) (*description.Session, *base.Response, error) {
|
||||
cres := make(chan clientRes)
|
||||
select {
|
||||
case c.chDescribe <- describeReq{url: u, res: cres}:
|
||||
@@ -1179,7 +1178,7 @@ func (c *Client) Describe(u *url.URL) (*description.Session, *base.Response, err
|
||||
}
|
||||
}
|
||||
|
||||
func (c *Client) doAnnounce(u *url.URL, desc *description.Session) (*base.Response, error) {
|
||||
func (c *Client) doAnnounce(u *base.URL, desc *description.Session) (*base.Response, error) {
|
||||
err := c.checkState(map[clientState]struct{}{
|
||||
clientStateInitial: {},
|
||||
})
|
||||
@@ -1224,7 +1223,7 @@ func (c *Client) doAnnounce(u *url.URL, desc *description.Session) (*base.Respon
|
||||
}
|
||||
|
||||
// Announce sends an ANNOUNCE request.
|
||||
func (c *Client) Announce(u *url.URL, desc *description.Session) (*base.Response, error) {
|
||||
func (c *Client) Announce(u *base.URL, desc *description.Session) (*base.Response, error) {
|
||||
cres := make(chan clientRes)
|
||||
select {
|
||||
case c.chAnnounce <- announceReq{url: u, desc: desc, res: cres}:
|
||||
@@ -1237,7 +1236,7 @@ func (c *Client) Announce(u *url.URL, desc *description.Session) (*base.Response
|
||||
}
|
||||
|
||||
func (c *Client) doSetup(
|
||||
baseURL *url.URL,
|
||||
baseURL *base.URL,
|
||||
medi *description.Media,
|
||||
rtpPort int,
|
||||
rtcpPort int,
|
||||
@@ -1538,7 +1537,7 @@ func (c *Client) findFreeChannelPair() int {
|
||||
// rtpPort and rtcpPort are used only if transport is UDP.
|
||||
// if rtpPort and rtcpPort are zero, they are chosen automatically.
|
||||
func (c *Client) Setup(
|
||||
baseURL *url.URL,
|
||||
baseURL *base.URL,
|
||||
media *description.Media,
|
||||
rtpPort int,
|
||||
rtcpPort int,
|
||||
@@ -1561,7 +1560,7 @@ func (c *Client) Setup(
|
||||
}
|
||||
|
||||
// SetupAll setups all the given medias.
|
||||
func (c *Client) SetupAll(baseURL *url.URL, medias []*description.Media) error {
|
||||
func (c *Client) SetupAll(baseURL *base.URL, medias []*description.Media) error {
|
||||
for _, m := range medias {
|
||||
_, err := c.Setup(baseURL, m, 0, 0)
|
||||
if err != nil {
|
||||
|
Reference in New Issue
Block a user