From 45c0416fa79812b8285f4d80b9e4d0362d9ded51 Mon Sep 17 00:00:00 2001 From: aler9 <46489434+aler9@users.noreply.github.com> Date: Sun, 19 Jul 2020 11:51:28 +0200 Subject: [PATCH] use a custom sdp library to handle non-canonical sdp (#41) --- README.md | 2 ++ go.mod | 6 +++--- go.sum | 16 ++++++++++------ main.go | 2 +- server-client.go | 4 ++-- source.go | 2 +- utils.go | 11 +++++++---- 7 files changed, 26 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 014c273b..c1258cbc 100644 --- a/README.md +++ b/README.md @@ -172,6 +172,8 @@ make run Related projects * https://github.com/aler9/gortsplib * https://github.com/flaviostutz/rtsp-relay +* https://github.com/pion/sdp (SDP library used internally) +* https://github.com/pion/rtcp (RTCP library used internally) IETF Standards * RTSP 1.0 https://tools.ietf.org/html/rfc2326 diff --git a/go.mod b/go.mod index be8c2979..cedecbaf 100644 --- a/go.mod +++ b/go.mod @@ -5,9 +5,9 @@ go 1.13 require ( github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 // indirect github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d // indirect - github.com/aler9/gortsplib v0.0.0-20200718114958-1d365c8c9369 - github.com/pion/sdp v1.3.0 - github.com/stretchr/testify v1.5.1 + github.com/aler9/gortsplib v0.0.0-20200719094715-6806ec79c031 + github.com/aler9/sdp/v3 v3.0.0-20200719093237-2c3d108a7436 + github.com/stretchr/testify v1.6.1 gopkg.in/alecthomas/kingpin.v2 v2.2.6 gopkg.in/yaml.v2 v2.2.2 ) diff --git a/go.sum b/go.sum index 521c4961..e960564f 100644 --- a/go.sum +++ b/go.sum @@ -2,16 +2,16 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafo github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d h1:UQZhZ2O0vMHr2cI+DC1Mbh0TJxzA3RcLoMsFw+aXw7E= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/aler9/gortsplib v0.0.0-20200718114958-1d365c8c9369 h1:7t451d8q3yYtUwQM6GqJPCek13BC0yeh0tQqWrxyuck= -github.com/aler9/gortsplib v0.0.0-20200718114958-1d365c8c9369/go.mod h1:17dcA4Qak5TLqgun8OR0wnSbFQIg4cvYVSf1nbCt+qU= +github.com/aler9/gortsplib v0.0.0-20200719094715-6806ec79c031 h1:Kb+H1mkbmzbAIcX0++A8kHwdhpQiNe6reFcWNUATcVk= +github.com/aler9/gortsplib v0.0.0-20200719094715-6806ec79c031/go.mod h1:kBMvjIdOHRjLdV+oT28JD72JUPpJuwxOc9u72GG8GpY= +github.com/aler9/sdp/v3 v3.0.0-20200719093237-2c3d108a7436 h1:W0iNErWKvSAyJBNVx+qQoyFrWOFVgS6f/WEME/D3EZc= +github.com/aler9/sdp/v3 v3.0.0-20200719093237-2c3d108a7436/go.mod h1:OnlEK3QI7YtM+ShZWtGajmOHLZ3bjU80AcIS5e34i1U= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA= +github.com/pion/randutil v0.1.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8= github.com/pion/rtcp v1.2.3 h1:2wrhKnqgSz91Q5nzYTO07mQXztYPtxL8a0XOss4rJqA= github.com/pion/rtcp v1.2.3/go.mod h1:zGhIv0RPRF0Z1Wiij22pUt5W/c9fevqSzT4jje/oK7I= -github.com/pion/sdp v1.3.0 h1:21lpgEILHyolpsIrbCBagZaAPj4o057cFjzaFebkVOs= -github.com/pion/sdp v1.3.0/go.mod h1:ceA2lTyftydQTuCIbUNoH77aAt6CiQJaRpssA4Gee8I= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -19,9 +19,13 @@ github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJy github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/main.go b/main.go index d0a9ebc2..c9842a41 100644 --- a/main.go +++ b/main.go @@ -10,7 +10,7 @@ import ( "os" "github.com/aler9/gortsplib" - "github.com/pion/sdp" + "github.com/aler9/sdp/v3" "gopkg.in/alecthomas/kingpin.v2" ) diff --git a/server-client.go b/server-client.go index d3aba69e..0424d8bb 100644 --- a/server-client.go +++ b/server-client.go @@ -11,7 +11,7 @@ import ( "time" "github.com/aler9/gortsplib" - "github.com/pion/sdp" + "github.com/aler9/sdp/v3" ) const ( @@ -405,7 +405,7 @@ func (c *serverClient) handleRequest(req *gortsplib.Request) bool { } sdpParsed := &sdp.SessionDescription{} - err = sdpParsed.Unmarshal(string(req.Content)) + err = sdpParsed.Unmarshal(req.Content) if err != nil { c.writeResError(req, gortsplib.StatusBadRequest, fmt.Errorf("invalid SDP: %s", err)) return false diff --git a/source.go b/source.go index f78514a1..9e6b5d3f 100644 --- a/source.go +++ b/source.go @@ -8,7 +8,7 @@ import ( "time" "github.com/aler9/gortsplib" - "github.com/pion/sdp" + "github.com/aler9/sdp/v3" ) const ( diff --git a/utils.go b/utils.go index 69be41aa..f9895f40 100644 --- a/utils.go +++ b/utils.go @@ -6,7 +6,7 @@ import ( "strconv" "github.com/aler9/gortsplib" - "github.com/pion/sdp" + "github.com/aler9/sdp/v3" ) func parseIpCidrList(in []string) ([]interface{}, error) { @@ -76,8 +76,11 @@ func (db *doubleBuffer) swap() []byte { func sdpForServer(tracks []*gortsplib.Track) (*sdp.SessionDescription, []byte) { sout := &sdp.SessionDescription{ - SessionName: "Stream", - Origin: sdp.Origin{ + SessionName: func() *sdp.SessionName { + ret := sdp.SessionName("Stream") + return &ret + }(), + Origin: &sdp.Origin{ Username: "-", NetworkType: "IN", AddressType: "IP4", @@ -118,6 +121,6 @@ func sdpForServer(tracks []*gortsplib.Track) (*sdp.SessionDescription, []byte) { sout.MediaDescriptions = append(sout.MediaDescriptions, mout) } - bytsout := []byte(sout.Marshal()) + bytsout, _ := sout.Marshal() return sout, bytsout }