mirror of
https://github.com/aler9/gortsplib
synced 2025-10-05 15:16:51 +08:00
rename Read / Write into Unmarshal / Marshal when needed
Read() / Write() are used to read / write from streams, while Unmarshal() / Marshal() are used to decode / encode from / to bytes.
This commit is contained in:
19
client.go
19
client.go
@@ -1059,7 +1059,7 @@ func (c *Client) do(req *base.Request, skipResponse bool, allowFrames bool) (*ba
|
|||||||
c.OnRequest(req)
|
c.OnRequest(req)
|
||||||
}
|
}
|
||||||
|
|
||||||
byts, _ := req.Write()
|
byts, _ := req.Marshal()
|
||||||
|
|
||||||
c.conn.SetWriteDeadline(time.Now().Add(c.WriteTimeout))
|
c.conn.SetWriteDeadline(time.Now().Add(c.WriteTimeout))
|
||||||
_, err := c.conn.Write(byts)
|
_, err := c.conn.Write(byts)
|
||||||
@@ -1095,7 +1095,7 @@ func (c *Client) do(req *base.Request, skipResponse bool, allowFrames bool) (*ba
|
|||||||
// get session from response
|
// get session from response
|
||||||
if v, ok := res.Header["Session"]; ok {
|
if v, ok := res.Header["Session"]; ok {
|
||||||
var sx headers.Session
|
var sx headers.Session
|
||||||
err := sx.Read(v)
|
err := sx.Unmarshal(v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, liberrors.ErrClientSessionHeaderInvalid{Err: err}
|
return nil, liberrors.ErrClientSessionHeaderInvalid{Err: err}
|
||||||
}
|
}
|
||||||
@@ -1242,7 +1242,8 @@ func (c *Client) doDescribe(u *url.URL) (Tracks, *url.URL, *base.Response, error
|
|||||||
return nil, nil, nil, liberrors.ErrClientContentTypeUnsupported{CT: ct}
|
return nil, nil, nil, liberrors.ErrClientContentTypeUnsupported{CT: ct}
|
||||||
}
|
}
|
||||||
|
|
||||||
tracks, sd, err := ReadTracks(res.Body, true)
|
var tracks Tracks
|
||||||
|
sd, err := tracks.Unmarshal(res.Body, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, nil, err
|
return nil, nil, nil, err
|
||||||
}
|
}
|
||||||
@@ -1286,7 +1287,7 @@ func (c *Client) doAnnounce(u *url.URL, tracks Tracks) (*base.Response, error) {
|
|||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"Content-Type": base.HeaderValue{"application/sdp"},
|
"Content-Type": base.HeaderValue{"application/sdp"},
|
||||||
},
|
},
|
||||||
Body: tracks.Write(false),
|
Body: tracks.Marshal(false),
|
||||||
}, false, false)
|
}, false, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -1449,7 +1450,7 @@ func (c *Client) doSetup(
|
|||||||
Method: base.Setup,
|
Method: base.Setup,
|
||||||
URL: trackURL,
|
URL: trackURL,
|
||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"Transport": th.Write(),
|
"Transport": th.Marshal(),
|
||||||
},
|
},
|
||||||
}, false, false)
|
}, false, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -1480,7 +1481,7 @@ func (c *Client) doSetup(
|
|||||||
}
|
}
|
||||||
|
|
||||||
var thRes headers.Transport
|
var thRes headers.Transport
|
||||||
err = thRes.Read(res.Header["Transport"])
|
err = thRes.Unmarshal(res.Header["Transport"])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if transport == TransportUDP {
|
if transport == TransportUDP {
|
||||||
ct.udpRTPListener.close()
|
ct.udpRTPListener.close()
|
||||||
@@ -1685,7 +1686,7 @@ func (c *Client) doPlay(ra *headers.Range, isSwitchingProtocol bool) (*base.Resp
|
|||||||
Method: base.Play,
|
Method: base.Play,
|
||||||
URL: c.baseURL,
|
URL: c.baseURL,
|
||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"Range": ra.Write(),
|
"Range": ra.Marshal(),
|
||||||
},
|
},
|
||||||
}, false, *c.effectiveTransport == TransportTCP)
|
}, false, *c.effectiveTransport == TransportTCP)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -1864,14 +1865,14 @@ func (c *Client) runWriter() {
|
|||||||
if isRTP {
|
if isRTP {
|
||||||
f := rtpFrames[trackID]
|
f := rtpFrames[trackID]
|
||||||
f.Payload = payload
|
f.Payload = payload
|
||||||
n, _ := f.WriteTo(buf)
|
n, _ := f.MarshalTo(buf)
|
||||||
|
|
||||||
c.conn.SetWriteDeadline(time.Now().Add(c.WriteTimeout))
|
c.conn.SetWriteDeadline(time.Now().Add(c.WriteTimeout))
|
||||||
c.conn.Write(buf[:n])
|
c.conn.Write(buf[:n])
|
||||||
} else {
|
} else {
|
||||||
f := rtcpFrames[trackID]
|
f := rtcpFrames[trackID]
|
||||||
f.Payload = payload
|
f.Payload = payload
|
||||||
n, _ := f.WriteTo(buf)
|
n, _ := f.MarshalTo(buf)
|
||||||
|
|
||||||
c.conn.SetWriteDeadline(time.Now().Add(c.WriteTimeout))
|
c.conn.SetWriteDeadline(time.Now().Add(c.WriteTimeout))
|
||||||
c.conn.Write(buf[:n])
|
c.conn.Write(buf[:n])
|
||||||
|
@@ -97,7 +97,7 @@ func TestClientPublishSerial(t *testing.T) {
|
|||||||
string(base.Record),
|
string(base.Record),
|
||||||
}, ", ")},
|
}, ", ")},
|
||||||
},
|
},
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -108,7 +108,7 @@ func TestClientPublishSerial(t *testing.T) {
|
|||||||
|
|
||||||
byts, _ = base.Response{
|
byts, _ = base.Response{
|
||||||
StatusCode: base.StatusOK,
|
StatusCode: base.StatusOK,
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -118,7 +118,7 @@ func TestClientPublishSerial(t *testing.T) {
|
|||||||
require.Equal(t, mustParseURL(scheme+"://localhost:8554/teststream/trackID=0"), req.URL)
|
require.Equal(t, mustParseURL(scheme+"://localhost:8554/teststream/trackID=0"), req.URL)
|
||||||
|
|
||||||
var inTH headers.Transport
|
var inTH headers.Transport
|
||||||
err = inTH.Read(req.Header["Transport"])
|
err = inTH.Unmarshal(req.Header["Transport"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
var l1 net.PacketConn
|
var l1 net.PacketConn
|
||||||
@@ -152,9 +152,9 @@ func TestClientPublishSerial(t *testing.T) {
|
|||||||
byts, _ = base.Response{
|
byts, _ = base.Response{
|
||||||
StatusCode: base.StatusOK,
|
StatusCode: base.StatusOK,
|
||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"Transport": th.Write(),
|
"Transport": th.Marshal(),
|
||||||
},
|
},
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -165,7 +165,7 @@ func TestClientPublishSerial(t *testing.T) {
|
|||||||
|
|
||||||
byts, _ = base.Response{
|
byts, _ = base.Response{
|
||||||
StatusCode: base.StatusOK,
|
StatusCode: base.StatusOK,
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -199,7 +199,7 @@ func TestClientPublishSerial(t *testing.T) {
|
|||||||
byts, _ := base.InterleavedFrame{
|
byts, _ := base.InterleavedFrame{
|
||||||
Channel: 1,
|
Channel: 1,
|
||||||
Payload: testRTCPPacketMarshaled,
|
Payload: testRTCPPacketMarshaled,
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}
|
}
|
||||||
@@ -211,7 +211,7 @@ func TestClientPublishSerial(t *testing.T) {
|
|||||||
|
|
||||||
byts, _ = base.Response{
|
byts, _ = base.Response{
|
||||||
StatusCode: base.StatusOK,
|
StatusCode: base.StatusOK,
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}()
|
}()
|
||||||
@@ -312,7 +312,7 @@ func TestClientPublishParallel(t *testing.T) {
|
|||||||
string(base.Record),
|
string(base.Record),
|
||||||
}, ", ")},
|
}, ", ")},
|
||||||
},
|
},
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -322,7 +322,7 @@ func TestClientPublishParallel(t *testing.T) {
|
|||||||
|
|
||||||
byts, _ = base.Response{
|
byts, _ = base.Response{
|
||||||
StatusCode: base.StatusOK,
|
StatusCode: base.StatusOK,
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -331,7 +331,7 @@ func TestClientPublishParallel(t *testing.T) {
|
|||||||
require.Equal(t, base.Setup, req.Method)
|
require.Equal(t, base.Setup, req.Method)
|
||||||
|
|
||||||
var inTH headers.Transport
|
var inTH headers.Transport
|
||||||
err = inTH.Read(req.Header["Transport"])
|
err = inTH.Unmarshal(req.Header["Transport"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
th := headers.Transport{
|
th := headers.Transport{
|
||||||
@@ -353,9 +353,9 @@ func TestClientPublishParallel(t *testing.T) {
|
|||||||
byts, _ = base.Response{
|
byts, _ = base.Response{
|
||||||
StatusCode: base.StatusOK,
|
StatusCode: base.StatusOK,
|
||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"Transport": th.Write(),
|
"Transport": th.Marshal(),
|
||||||
},
|
},
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -365,7 +365,7 @@ func TestClientPublishParallel(t *testing.T) {
|
|||||||
|
|
||||||
byts, _ = base.Response{
|
byts, _ = base.Response{
|
||||||
StatusCode: base.StatusOK,
|
StatusCode: base.StatusOK,
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -375,7 +375,7 @@ func TestClientPublishParallel(t *testing.T) {
|
|||||||
|
|
||||||
byts, _ = base.Response{
|
byts, _ = base.Response{
|
||||||
StatusCode: base.StatusOK,
|
StatusCode: base.StatusOK,
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}()
|
}()
|
||||||
@@ -461,7 +461,7 @@ func TestClientPublishPauseSerial(t *testing.T) {
|
|||||||
string(base.Pause),
|
string(base.Pause),
|
||||||
}, ", ")},
|
}, ", ")},
|
||||||
},
|
},
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -471,7 +471,7 @@ func TestClientPublishPauseSerial(t *testing.T) {
|
|||||||
|
|
||||||
byts, _ = base.Response{
|
byts, _ = base.Response{
|
||||||
StatusCode: base.StatusOK,
|
StatusCode: base.StatusOK,
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -480,7 +480,7 @@ func TestClientPublishPauseSerial(t *testing.T) {
|
|||||||
require.Equal(t, base.Setup, req.Method)
|
require.Equal(t, base.Setup, req.Method)
|
||||||
|
|
||||||
var inTH headers.Transport
|
var inTH headers.Transport
|
||||||
err = inTH.Read(req.Header["Transport"])
|
err = inTH.Unmarshal(req.Header["Transport"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
th := headers.Transport{
|
th := headers.Transport{
|
||||||
@@ -502,9 +502,9 @@ func TestClientPublishPauseSerial(t *testing.T) {
|
|||||||
byts, _ = base.Response{
|
byts, _ = base.Response{
|
||||||
StatusCode: base.StatusOK,
|
StatusCode: base.StatusOK,
|
||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"Transport": th.Write(),
|
"Transport": th.Marshal(),
|
||||||
},
|
},
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -514,7 +514,7 @@ func TestClientPublishPauseSerial(t *testing.T) {
|
|||||||
|
|
||||||
byts, _ = base.Response{
|
byts, _ = base.Response{
|
||||||
StatusCode: base.StatusOK,
|
StatusCode: base.StatusOK,
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -524,7 +524,7 @@ func TestClientPublishPauseSerial(t *testing.T) {
|
|||||||
|
|
||||||
byts, _ = base.Response{
|
byts, _ = base.Response{
|
||||||
StatusCode: base.StatusOK,
|
StatusCode: base.StatusOK,
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -534,7 +534,7 @@ func TestClientPublishPauseSerial(t *testing.T) {
|
|||||||
|
|
||||||
byts, _ = base.Response{
|
byts, _ = base.Response{
|
||||||
StatusCode: base.StatusOK,
|
StatusCode: base.StatusOK,
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -544,7 +544,7 @@ func TestClientPublishPauseSerial(t *testing.T) {
|
|||||||
|
|
||||||
byts, _ = base.Response{
|
byts, _ = base.Response{
|
||||||
StatusCode: base.StatusOK,
|
StatusCode: base.StatusOK,
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}()
|
}()
|
||||||
@@ -620,7 +620,7 @@ func TestClientPublishPauseParallel(t *testing.T) {
|
|||||||
string(base.Pause),
|
string(base.Pause),
|
||||||
}, ", ")},
|
}, ", ")},
|
||||||
},
|
},
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -630,7 +630,7 @@ func TestClientPublishPauseParallel(t *testing.T) {
|
|||||||
|
|
||||||
byts, _ = base.Response{
|
byts, _ = base.Response{
|
||||||
StatusCode: base.StatusOK,
|
StatusCode: base.StatusOK,
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -639,7 +639,7 @@ func TestClientPublishPauseParallel(t *testing.T) {
|
|||||||
require.Equal(t, base.Setup, req.Method)
|
require.Equal(t, base.Setup, req.Method)
|
||||||
|
|
||||||
var inTH headers.Transport
|
var inTH headers.Transport
|
||||||
err = inTH.Read(req.Header["Transport"])
|
err = inTH.Unmarshal(req.Header["Transport"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
th := headers.Transport{
|
th := headers.Transport{
|
||||||
@@ -661,9 +661,9 @@ func TestClientPublishPauseParallel(t *testing.T) {
|
|||||||
byts, _ = base.Response{
|
byts, _ = base.Response{
|
||||||
StatusCode: base.StatusOK,
|
StatusCode: base.StatusOK,
|
||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"Transport": th.Write(),
|
"Transport": th.Marshal(),
|
||||||
},
|
},
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -673,7 +673,7 @@ func TestClientPublishPauseParallel(t *testing.T) {
|
|||||||
|
|
||||||
byts, _ = base.Response{
|
byts, _ = base.Response{
|
||||||
StatusCode: base.StatusOK,
|
StatusCode: base.StatusOK,
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -683,7 +683,7 @@ func TestClientPublishPauseParallel(t *testing.T) {
|
|||||||
|
|
||||||
byts, _ = base.Response{
|
byts, _ = base.Response{
|
||||||
StatusCode: base.StatusOK,
|
StatusCode: base.StatusOK,
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}()
|
}()
|
||||||
@@ -764,7 +764,7 @@ func TestClientPublishAutomaticProtocol(t *testing.T) {
|
|||||||
string(base.Record),
|
string(base.Record),
|
||||||
}, ", ")},
|
}, ", ")},
|
||||||
},
|
},
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -775,7 +775,7 @@ func TestClientPublishAutomaticProtocol(t *testing.T) {
|
|||||||
|
|
||||||
byts, _ = base.Response{
|
byts, _ = base.Response{
|
||||||
StatusCode: base.StatusOK,
|
StatusCode: base.StatusOK,
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -785,7 +785,7 @@ func TestClientPublishAutomaticProtocol(t *testing.T) {
|
|||||||
|
|
||||||
byts, _ = base.Response{
|
byts, _ = base.Response{
|
||||||
StatusCode: base.StatusUnsupportedTransport,
|
StatusCode: base.StatusUnsupportedTransport,
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -794,7 +794,7 @@ func TestClientPublishAutomaticProtocol(t *testing.T) {
|
|||||||
require.Equal(t, base.Setup, req.Method)
|
require.Equal(t, base.Setup, req.Method)
|
||||||
|
|
||||||
var inTH headers.Transport
|
var inTH headers.Transport
|
||||||
err = inTH.Read(req.Header["Transport"])
|
err = inTH.Unmarshal(req.Header["Transport"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, headers.TransportProtocolTCP, inTH.Protocol)
|
require.Equal(t, headers.TransportProtocolTCP, inTH.Protocol)
|
||||||
|
|
||||||
@@ -810,9 +810,9 @@ func TestClientPublishAutomaticProtocol(t *testing.T) {
|
|||||||
byts, _ = base.Response{
|
byts, _ = base.Response{
|
||||||
StatusCode: base.StatusOK,
|
StatusCode: base.StatusOK,
|
||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"Transport": th.Write(),
|
"Transport": th.Marshal(),
|
||||||
},
|
},
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -823,7 +823,7 @@ func TestClientPublishAutomaticProtocol(t *testing.T) {
|
|||||||
|
|
||||||
byts, _ = base.Response{
|
byts, _ = base.Response{
|
||||||
StatusCode: base.StatusOK,
|
StatusCode: base.StatusOK,
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -842,7 +842,7 @@ func TestClientPublishAutomaticProtocol(t *testing.T) {
|
|||||||
|
|
||||||
byts, _ = base.Response{
|
byts, _ = base.Response{
|
||||||
StatusCode: base.StatusOK,
|
StatusCode: base.StatusOK,
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}()
|
}()
|
||||||
@@ -894,7 +894,7 @@ func TestClientPublishRTCPReport(t *testing.T) {
|
|||||||
string(base.Record),
|
string(base.Record),
|
||||||
}, ", ")},
|
}, ", ")},
|
||||||
},
|
},
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -904,7 +904,7 @@ func TestClientPublishRTCPReport(t *testing.T) {
|
|||||||
|
|
||||||
byts, _ = base.Response{
|
byts, _ = base.Response{
|
||||||
StatusCode: base.StatusOK,
|
StatusCode: base.StatusOK,
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -913,7 +913,7 @@ func TestClientPublishRTCPReport(t *testing.T) {
|
|||||||
require.Equal(t, base.Setup, req.Method)
|
require.Equal(t, base.Setup, req.Method)
|
||||||
|
|
||||||
var inTH headers.Transport
|
var inTH headers.Transport
|
||||||
err = inTH.Read(req.Header["Transport"])
|
err = inTH.Unmarshal(req.Header["Transport"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
l1, err := net.ListenPacket("udp", "localhost:34556")
|
l1, err := net.ListenPacket("udp", "localhost:34556")
|
||||||
@@ -935,9 +935,9 @@ func TestClientPublishRTCPReport(t *testing.T) {
|
|||||||
Protocol: headers.TransportProtocolUDP,
|
Protocol: headers.TransportProtocolUDP,
|
||||||
ClientPorts: inTH.ClientPorts,
|
ClientPorts: inTH.ClientPorts,
|
||||||
ServerPorts: &[2]int{34556, 34557},
|
ServerPorts: &[2]int{34556, 34557},
|
||||||
}.Write(),
|
}.Marshal(),
|
||||||
},
|
},
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -947,7 +947,7 @@ func TestClientPublishRTCPReport(t *testing.T) {
|
|||||||
|
|
||||||
byts, _ = base.Response{
|
byts, _ = base.Response{
|
||||||
StatusCode: base.StatusOK,
|
StatusCode: base.StatusOK,
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -981,7 +981,7 @@ func TestClientPublishRTCPReport(t *testing.T) {
|
|||||||
|
|
||||||
byts, _ = base.Response{
|
byts, _ = base.Response{
|
||||||
StatusCode: base.StatusOK,
|
StatusCode: base.StatusOK,
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}()
|
}()
|
||||||
@@ -1045,7 +1045,7 @@ func TestClientPublishIgnoreTCPRTPPackets(t *testing.T) {
|
|||||||
string(base.Record),
|
string(base.Record),
|
||||||
}, ", ")},
|
}, ", ")},
|
||||||
},
|
},
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -1055,7 +1055,7 @@ func TestClientPublishIgnoreTCPRTPPackets(t *testing.T) {
|
|||||||
|
|
||||||
byts, _ = base.Response{
|
byts, _ = base.Response{
|
||||||
StatusCode: base.StatusOK,
|
StatusCode: base.StatusOK,
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -1064,7 +1064,7 @@ func TestClientPublishIgnoreTCPRTPPackets(t *testing.T) {
|
|||||||
require.Equal(t, base.Setup, req.Method)
|
require.Equal(t, base.Setup, req.Method)
|
||||||
|
|
||||||
var inTH headers.Transport
|
var inTH headers.Transport
|
||||||
err = inTH.Read(req.Header["Transport"])
|
err = inTH.Unmarshal(req.Header["Transport"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
th := headers.Transport{
|
th := headers.Transport{
|
||||||
@@ -1079,9 +1079,9 @@ func TestClientPublishIgnoreTCPRTPPackets(t *testing.T) {
|
|||||||
byts, _ = base.Response{
|
byts, _ = base.Response{
|
||||||
StatusCode: base.StatusOK,
|
StatusCode: base.StatusOK,
|
||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"Transport": th.Write(),
|
"Transport": th.Marshal(),
|
||||||
},
|
},
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -1091,21 +1091,21 @@ func TestClientPublishIgnoreTCPRTPPackets(t *testing.T) {
|
|||||||
|
|
||||||
byts, _ = base.Response{
|
byts, _ = base.Response{
|
||||||
StatusCode: base.StatusOK,
|
StatusCode: base.StatusOK,
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
byts, _ = base.InterleavedFrame{
|
byts, _ = base.InterleavedFrame{
|
||||||
Channel: 0,
|
Channel: 0,
|
||||||
Payload: testRTPPacketMarshaled,
|
Payload: testRTPPacketMarshaled,
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
byts, _ = base.InterleavedFrame{
|
byts, _ = base.InterleavedFrame{
|
||||||
Channel: 1,
|
Channel: 1,
|
||||||
Payload: testRTCPPacketMarshaled,
|
Payload: testRTCPPacketMarshaled,
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -1115,7 +1115,7 @@ func TestClientPublishIgnoreTCPRTPPackets(t *testing.T) {
|
|||||||
|
|
||||||
byts, _ = base.Response{
|
byts, _ = base.Response{
|
||||||
StatusCode: base.StatusOK,
|
StatusCode: base.StatusOK,
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}()
|
}()
|
||||||
|
File diff suppressed because it is too large
Load Diff
@@ -108,7 +108,7 @@ func TestClientSession(t *testing.T) {
|
|||||||
}, ", ")},
|
}, ", ")},
|
||||||
"Session": base.HeaderValue{"123456"},
|
"Session": base.HeaderValue{"123456"},
|
||||||
},
|
},
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -133,8 +133,8 @@ func TestClientSession(t *testing.T) {
|
|||||||
"Content-Type": base.HeaderValue{"application/sdp"},
|
"Content-Type": base.HeaderValue{"application/sdp"},
|
||||||
"Session": base.HeaderValue{"123456"},
|
"Session": base.HeaderValue{"123456"},
|
||||||
},
|
},
|
||||||
Body: tracks.Write(false),
|
Body: tracks.Marshal(false),
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}()
|
}()
|
||||||
@@ -178,7 +178,7 @@ func TestClientAuth(t *testing.T) {
|
|||||||
string(base.Describe),
|
string(base.Describe),
|
||||||
}, ", ")},
|
}, ", ")},
|
||||||
},
|
},
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -193,7 +193,7 @@ func TestClientAuth(t *testing.T) {
|
|||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"WWW-Authenticate": v.Header(),
|
"WWW-Authenticate": v.Header(),
|
||||||
},
|
},
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -218,8 +218,8 @@ func TestClientAuth(t *testing.T) {
|
|||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"Content-Type": base.HeaderValue{"application/sdp"},
|
"Content-Type": base.HeaderValue{"application/sdp"},
|
||||||
},
|
},
|
||||||
Body: tracks.Write(false),
|
Body: tracks.Marshal(false),
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}()
|
}()
|
||||||
@@ -263,7 +263,7 @@ func TestClientDescribeCharset(t *testing.T) {
|
|||||||
string(base.Describe),
|
string(base.Describe),
|
||||||
}, ", ")},
|
}, ", ")},
|
||||||
},
|
},
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -284,8 +284,8 @@ func TestClientDescribeCharset(t *testing.T) {
|
|||||||
"Content-Type": base.HeaderValue{"application/sdp; charset=utf-8"},
|
"Content-Type": base.HeaderValue{"application/sdp; charset=utf-8"},
|
||||||
"Content-Base": base.HeaderValue{"rtsp://localhost:8554/teststream/"},
|
"Content-Base": base.HeaderValue{"rtsp://localhost:8554/teststream/"},
|
||||||
},
|
},
|
||||||
Body: Tracks{track1}.Write(false),
|
Body: Tracks{track1}.Marshal(false),
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}()
|
}()
|
||||||
|
@@ -143,7 +143,7 @@ func (e *mpegtsEncoder) encode(nalus [][]byte, pts time.Duration) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// encode into Annex-B
|
// encode into Annex-B
|
||||||
annexb, err := h264.AnnexBEncode(filteredNALUs)
|
annexb, err := h264.AnnexBMarshal(filteredNALUs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@@ -12,27 +12,29 @@ type ADTSPacket struct {
|
|||||||
AU []byte
|
AU []byte
|
||||||
}
|
}
|
||||||
|
|
||||||
// DecodeADTS decodes an ADTS stream into ADTS packets.
|
// ADTSPackets is a group od ADTS packets.
|
||||||
func DecodeADTS(buf []byte) ([]*ADTSPacket, error) {
|
type ADTSPackets []*ADTSPacket
|
||||||
|
|
||||||
|
// Unmarshal decodes an ADTS stream into ADTS packets.
|
||||||
|
func (ps *ADTSPackets) Unmarshal(buf []byte) error {
|
||||||
// refs: https://wiki.multimedia.cx/index.php/ADTS
|
// refs: https://wiki.multimedia.cx/index.php/ADTS
|
||||||
|
|
||||||
var ret []*ADTSPacket
|
|
||||||
bl := len(buf)
|
bl := len(buf)
|
||||||
pos := 0
|
pos := 0
|
||||||
|
|
||||||
for {
|
for {
|
||||||
if (bl - pos) < 8 {
|
if (bl - pos) < 8 {
|
||||||
return nil, fmt.Errorf("invalid length")
|
return fmt.Errorf("invalid length")
|
||||||
}
|
}
|
||||||
|
|
||||||
syncWord := (uint16(buf[pos]) << 4) | (uint16(buf[pos+1]) >> 4)
|
syncWord := (uint16(buf[pos]) << 4) | (uint16(buf[pos+1]) >> 4)
|
||||||
if syncWord != 0xfff {
|
if syncWord != 0xfff {
|
||||||
return nil, fmt.Errorf("invalid syncword")
|
return fmt.Errorf("invalid syncword")
|
||||||
}
|
}
|
||||||
|
|
||||||
protectionAbsent := buf[pos+1] & 0x01
|
protectionAbsent := buf[pos+1] & 0x01
|
||||||
if protectionAbsent != 1 {
|
if protectionAbsent != 1 {
|
||||||
return nil, fmt.Errorf("CRC is not supported")
|
return fmt.Errorf("CRC is not supported")
|
||||||
}
|
}
|
||||||
|
|
||||||
pkt := &ADTSPacket{}
|
pkt := &ADTSPacket{}
|
||||||
@@ -41,7 +43,7 @@ func DecodeADTS(buf []byte) ([]*ADTSPacket, error) {
|
|||||||
switch pkt.Type {
|
switch pkt.Type {
|
||||||
case MPEG4AudioTypeAACLC:
|
case MPEG4AudioTypeAACLC:
|
||||||
default:
|
default:
|
||||||
return nil, fmt.Errorf("unsupported audio type: %d", pkt.Type)
|
return fmt.Errorf("unsupported audio type: %d", pkt.Type)
|
||||||
}
|
}
|
||||||
|
|
||||||
sampleRateIndex := (buf[pos+2] >> 2) & 0x0F
|
sampleRateIndex := (buf[pos+2] >> 2) & 0x0F
|
||||||
@@ -50,7 +52,7 @@ func DecodeADTS(buf []byte) ([]*ADTSPacket, error) {
|
|||||||
pkt.SampleRate = sampleRates[sampleRateIndex]
|
pkt.SampleRate = sampleRates[sampleRateIndex]
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return nil, fmt.Errorf("invalid sample rate index: %d", sampleRateIndex)
|
return fmt.Errorf("invalid sample rate index: %d", sampleRateIndex)
|
||||||
}
|
}
|
||||||
|
|
||||||
channelConfig := ((buf[pos+2] & 0x01) << 2) | ((buf[pos+3] >> 6) & 0x03)
|
channelConfig := ((buf[pos+2] & 0x01) << 2) | ((buf[pos+3] >> 6) & 0x03)
|
||||||
@@ -62,52 +64,52 @@ func DecodeADTS(buf []byte) ([]*ADTSPacket, error) {
|
|||||||
pkt.ChannelCount = 8
|
pkt.ChannelCount = 8
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return nil, fmt.Errorf("invalid channel configuration: %d", channelConfig)
|
return fmt.Errorf("invalid channel configuration: %d", channelConfig)
|
||||||
}
|
}
|
||||||
|
|
||||||
frameLen := int(((uint16(buf[pos+3])&0x03)<<11)|
|
frameLen := int(((uint16(buf[pos+3])&0x03)<<11)|
|
||||||
(uint16(buf[pos+4])<<3)|
|
(uint16(buf[pos+4])<<3)|
|
||||||
((uint16(buf[pos+5])>>5)&0x07)) - 7
|
((uint16(buf[pos+5])>>5)&0x07)) - 7
|
||||||
if frameLen > MaxAccessUnitSize {
|
if frameLen > MaxAccessUnitSize {
|
||||||
return nil, fmt.Errorf("AU size (%d) is too big (maximum is %d)", frameLen, MaxAccessUnitSize)
|
return fmt.Errorf("AU size (%d) is too big (maximum is %d)", frameLen, MaxAccessUnitSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
frameCount := buf[pos+6] & 0x03
|
frameCount := buf[pos+6] & 0x03
|
||||||
if frameCount != 0 {
|
if frameCount != 0 {
|
||||||
return nil, fmt.Errorf("frame count greater than 1 is not supported")
|
return fmt.Errorf("frame count greater than 1 is not supported")
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(buf[pos+7:]) < frameLen {
|
if len(buf[pos+7:]) < frameLen {
|
||||||
return nil, fmt.Errorf("invalid frame length")
|
return fmt.Errorf("invalid frame length")
|
||||||
}
|
}
|
||||||
|
|
||||||
pkt.AU = buf[pos+7 : pos+7+frameLen]
|
pkt.AU = buf[pos+7 : pos+7+frameLen]
|
||||||
pos += 7 + frameLen
|
pos += 7 + frameLen
|
||||||
|
|
||||||
ret = append(ret, pkt)
|
*ps = append(*ps, pkt)
|
||||||
|
|
||||||
if (bl - pos) == 0 {
|
if (bl - pos) == 0 {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret, nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func encodeADTSSize(pkts []*ADTSPacket) int {
|
func (ps ADTSPackets) marshalSize() int {
|
||||||
n := 0
|
n := 0
|
||||||
for _, pkt := range pkts {
|
for _, pkt := range ps {
|
||||||
n += 7 + len(pkt.AU)
|
n += 7 + len(pkt.AU)
|
||||||
}
|
}
|
||||||
return n
|
return n
|
||||||
}
|
}
|
||||||
|
|
||||||
// EncodeADTS encodes ADTS packets into an ADTS stream.
|
// Marshal encodes ADTS packets into an ADTS stream.
|
||||||
func EncodeADTS(pkts []*ADTSPacket) ([]byte, error) {
|
func (ps ADTSPackets) Marshal() ([]byte, error) {
|
||||||
buf := make([]byte, encodeADTSSize(pkts))
|
buf := make([]byte, ps.marshalSize())
|
||||||
pos := 0
|
pos := 0
|
||||||
|
|
||||||
for _, pkt := range pkts {
|
for _, pkt := range ps {
|
||||||
sampleRateIndex, ok := reverseSampleRates[pkt.SampleRate]
|
sampleRateIndex, ok := reverseSampleRates[pkt.SampleRate]
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, fmt.Errorf("invalid sample rate: %d", pkt.SampleRate)
|
return nil, fmt.Errorf("invalid sample rate: %d", pkt.SampleRate)
|
||||||
|
@@ -9,12 +9,12 @@ import (
|
|||||||
var casesADTS = []struct {
|
var casesADTS = []struct {
|
||||||
name string
|
name string
|
||||||
byts []byte
|
byts []byte
|
||||||
pkts []*ADTSPacket
|
pkts ADTSPackets
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
"single",
|
"single",
|
||||||
[]byte{0xff, 0xf1, 0x4c, 0x80, 0x1, 0x3f, 0xfc, 0xaa, 0xbb},
|
[]byte{0xff, 0xf1, 0x4c, 0x80, 0x1, 0x3f, 0xfc, 0xaa, 0xbb},
|
||||||
[]*ADTSPacket{
|
ADTSPackets{
|
||||||
{
|
{
|
||||||
Type: 2,
|
Type: 2,
|
||||||
SampleRate: 48000,
|
SampleRate: 48000,
|
||||||
@@ -30,7 +30,7 @@ var casesADTS = []struct {
|
|||||||
0xbb, 0xff, 0xf1, 0x4c, 0x80, 0x1, 0x3f, 0xfc,
|
0xbb, 0xff, 0xf1, 0x4c, 0x80, 0x1, 0x3f, 0xfc,
|
||||||
0xcc, 0xdd,
|
0xcc, 0xdd,
|
||||||
},
|
},
|
||||||
[]*ADTSPacket{
|
ADTSPackets{
|
||||||
{
|
{
|
||||||
Type: 2,
|
Type: 2,
|
||||||
SampleRate: 44100,
|
SampleRate: 44100,
|
||||||
@@ -47,27 +47,28 @@ var casesADTS = []struct {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDecodeADTS(t *testing.T) {
|
func TestADTSUnmarshal(t *testing.T) {
|
||||||
for _, ca := range casesADTS {
|
for _, ca := range casesADTS {
|
||||||
t.Run(ca.name, func(t *testing.T) {
|
t.Run(ca.name, func(t *testing.T) {
|
||||||
pkts, err := DecodeADTS(ca.byts)
|
var pkts ADTSPackets
|
||||||
|
err := pkts.Unmarshal(ca.byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, ca.pkts, pkts)
|
require.Equal(t, ca.pkts, pkts)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestEncodeADTS(t *testing.T) {
|
func TestADTSMarshal(t *testing.T) {
|
||||||
for _, ca := range casesADTS {
|
for _, ca := range casesADTS {
|
||||||
t.Run(ca.name, func(t *testing.T) {
|
t.Run(ca.name, func(t *testing.T) {
|
||||||
byts, err := EncodeADTS(ca.pkts)
|
byts, err := ca.pkts.Marshal()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, ca.byts, byts)
|
require.Equal(t, ca.byts, byts)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestDecodeADTSErrors(t *testing.T) {
|
func TestADTSUnmarshalErrors(t *testing.T) {
|
||||||
for _, ca := range []struct {
|
for _, ca := range []struct {
|
||||||
name string
|
name string
|
||||||
byts []byte
|
byts []byte
|
||||||
@@ -115,7 +116,8 @@ func TestDecodeADTSErrors(t *testing.T) {
|
|||||||
},
|
},
|
||||||
} {
|
} {
|
||||||
t.Run(ca.name, func(t *testing.T) {
|
t.Run(ca.name, func(t *testing.T) {
|
||||||
_, err := DecodeADTS(ca.byts)
|
var pkts ADTSPackets
|
||||||
|
err := pkts.Unmarshal(ca.byts)
|
||||||
require.EqualError(t, err, ca.err)
|
require.EqualError(t, err, ca.err)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@@ -30,7 +30,7 @@ func NewSender(v base.HeaderValue, user string, pass string) (*Sender, error) {
|
|||||||
return ""
|
return ""
|
||||||
}(); v0 != "" {
|
}(); v0 != "" {
|
||||||
var auth headers.Authenticate
|
var auth headers.Authenticate
|
||||||
err := auth.Read(base.HeaderValue{v0})
|
err := auth.Unmarshal(base.HeaderValue{v0})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -61,7 +61,7 @@ func NewSender(v base.HeaderValue, user string, pass string) (*Sender, error) {
|
|||||||
return ""
|
return ""
|
||||||
}(); v0 != "" {
|
}(); v0 != "" {
|
||||||
var auth headers.Authenticate
|
var auth headers.Authenticate
|
||||||
err := auth.Read(base.HeaderValue{v0})
|
err := auth.Unmarshal(base.HeaderValue{v0})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -112,5 +112,5 @@ func (se *Sender) AddAuthorization(req *base.Request) {
|
|||||||
req.Header = make(base.Header)
|
req.Header = make(base.Header)
|
||||||
}
|
}
|
||||||
|
|
||||||
req.Header["Authorization"] = h.Write()
|
req.Header["Authorization"] = h.Marshal()
|
||||||
}
|
}
|
||||||
|
@@ -99,14 +99,14 @@ func (va *Validator) Header() base.HeaderValue {
|
|||||||
ret = append(ret, (&headers.Authenticate{
|
ret = append(ret, (&headers.Authenticate{
|
||||||
Method: headers.AuthBasic,
|
Method: headers.AuthBasic,
|
||||||
Realm: &va.realm,
|
Realm: &va.realm,
|
||||||
}).Write()...)
|
}).Marshal()...)
|
||||||
|
|
||||||
case headers.AuthDigest:
|
case headers.AuthDigest:
|
||||||
ret = append(ret, headers.Authenticate{
|
ret = append(ret, headers.Authenticate{
|
||||||
Method: headers.AuthDigest,
|
Method: headers.AuthDigest,
|
||||||
Realm: &va.realm,
|
Realm: &va.realm,
|
||||||
Nonce: &va.nonce,
|
Nonce: &va.nonce,
|
||||||
}.Write()...)
|
}.Marshal()...)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ret
|
return ret
|
||||||
@@ -115,7 +115,7 @@ func (va *Validator) Header() base.HeaderValue {
|
|||||||
// ValidateRequest validates a request sent by a client.
|
// ValidateRequest validates a request sent by a client.
|
||||||
func (va *Validator) ValidateRequest(req *base.Request) error {
|
func (va *Validator) ValidateRequest(req *base.Request) error {
|
||||||
var auth headers.Authorization
|
var auth headers.Authorization
|
||||||
err := auth.Read(req.Header["Authorization"])
|
err := auth.Unmarshal(req.Header["Authorization"])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@@ -39,16 +39,16 @@ func (b *body) read(header Header, rb *bufio.Reader) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b body) writeSize() int {
|
func (b body) marshalSize() int {
|
||||||
return len(b)
|
return len(b)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b body) writeTo(buf []byte) int {
|
func (b body) marshalTo(buf []byte) int {
|
||||||
return copy(buf, b)
|
return copy(buf, b)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b body) write() []byte {
|
func (b body) marshal() []byte {
|
||||||
buf := make([]byte, b.writeSize())
|
buf := make([]byte, b.marshalSize())
|
||||||
b.writeTo(buf)
|
b.marshalTo(buf)
|
||||||
return buf
|
return buf
|
||||||
}
|
}
|
||||||
|
@@ -73,10 +73,10 @@ func TestBodyReadErrors(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestBodyWrite(t *testing.T) {
|
func TestBodyMarshal(t *testing.T) {
|
||||||
for _, ca := range casesBody {
|
for _, ca := range casesBody {
|
||||||
t.Run(ca.name, func(t *testing.T) {
|
t.Run(ca.name, func(t *testing.T) {
|
||||||
buf := body(ca.byts).write()
|
buf := body(ca.byts).marshal()
|
||||||
require.Equal(t, ca.byts, buf)
|
require.Equal(t, ca.byts, buf)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@@ -97,7 +97,7 @@ func (h *Header) read(rb *bufio.Reader) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h Header) writeSize() int {
|
func (h Header) marshalSize() int {
|
||||||
// sort headers by key
|
// sort headers by key
|
||||||
// in order to obtain deterministic results
|
// in order to obtain deterministic results
|
||||||
keys := make([]string, len(h))
|
keys := make([]string, len(h))
|
||||||
@@ -119,7 +119,7 @@ func (h Header) writeSize() int {
|
|||||||
return n
|
return n
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h Header) writeTo(buf []byte) int {
|
func (h Header) marshalTo(buf []byte) int {
|
||||||
// sort headers by key
|
// sort headers by key
|
||||||
// in order to obtain deterministic results
|
// in order to obtain deterministic results
|
||||||
keys := make([]string, len(h))
|
keys := make([]string, len(h))
|
||||||
@@ -141,8 +141,8 @@ func (h Header) writeTo(buf []byte) int {
|
|||||||
return pos
|
return pos
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h Header) write() []byte {
|
func (h Header) marshal() []byte {
|
||||||
buf := make([]byte, h.writeSize())
|
buf := make([]byte, h.marshalSize())
|
||||||
h.writeTo(buf)
|
h.marshalTo(buf)
|
||||||
return buf
|
return buf
|
||||||
}
|
}
|
||||||
|
@@ -176,7 +176,7 @@ func TestHeaderReadErrors(t *testing.T) {
|
|||||||
func TestHeaderWrite(t *testing.T) {
|
func TestHeaderWrite(t *testing.T) {
|
||||||
for _, ca := range casesHeader {
|
for _, ca := range casesHeader {
|
||||||
t.Run(ca.name, func(t *testing.T) {
|
t.Run(ca.name, func(t *testing.T) {
|
||||||
buf := ca.header.write()
|
buf := ca.header.marshal()
|
||||||
require.Equal(t, ca.enc, buf)
|
require.Equal(t, ca.enc, buf)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@@ -77,7 +77,7 @@ type InterleavedFrame struct {
|
|||||||
Payload []byte
|
Payload []byte
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read reads an interleaved frame.
|
// Read decodes an interleaved frame.
|
||||||
func (f *InterleavedFrame) Read(maxPayloadSize int, br *bufio.Reader) error {
|
func (f *InterleavedFrame) Read(maxPayloadSize int, br *bufio.Reader) error {
|
||||||
var header [4]byte
|
var header [4]byte
|
||||||
_, err := io.ReadFull(br, header[:])
|
_, err := io.ReadFull(br, header[:])
|
||||||
@@ -105,13 +105,13 @@ func (f *InterleavedFrame) Read(maxPayloadSize int, br *bufio.Reader) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// WriteSize returns the size of an InterleavedFrame.
|
// MarshalSize returns the size of an InterleavedFrame.
|
||||||
func (f InterleavedFrame) WriteSize() int {
|
func (f InterleavedFrame) MarshalSize() int {
|
||||||
return 4 + len(f.Payload)
|
return 4 + len(f.Payload)
|
||||||
}
|
}
|
||||||
|
|
||||||
// WriteTo writes an InterleavedFrame.
|
// MarshalTo writes an InterleavedFrame.
|
||||||
func (f InterleavedFrame) WriteTo(buf []byte) (int, error) {
|
func (f InterleavedFrame) MarshalTo(buf []byte) (int, error) {
|
||||||
pos := 0
|
pos := 0
|
||||||
|
|
||||||
pos += copy(buf[pos:], []byte{0x24, byte(f.Channel)})
|
pos += copy(buf[pos:], []byte{0x24, byte(f.Channel)})
|
||||||
@@ -124,9 +124,9 @@ func (f InterleavedFrame) WriteTo(buf []byte) (int, error) {
|
|||||||
return pos, nil
|
return pos, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write writes an InterleavedFrame.
|
// Marshal writes an InterleavedFrame.
|
||||||
func (f InterleavedFrame) Write() ([]byte, error) {
|
func (f InterleavedFrame) Marshal() ([]byte, error) {
|
||||||
buf := make([]byte, f.WriteSize())
|
buf := make([]byte, f.MarshalSize())
|
||||||
_, err := f.WriteTo(buf)
|
_, err := f.MarshalTo(buf)
|
||||||
return buf, err
|
return buf, err
|
||||||
}
|
}
|
||||||
|
@@ -79,10 +79,10 @@ func TestInterleavedFrameReadErrors(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestInterleavedFrameWrite(t *testing.T) {
|
func TestInterleavedFrameMarshal(t *testing.T) {
|
||||||
for _, ca := range casesInterleavedFrame {
|
for _, ca := range casesInterleavedFrame {
|
||||||
t.Run(ca.name, func(t *testing.T) {
|
t.Run(ca.name, func(t *testing.T) {
|
||||||
buf, err := ca.dec.Write()
|
buf, err := ca.dec.Marshal()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, ca.enc, buf)
|
require.Equal(t, ca.enc, buf)
|
||||||
})
|
})
|
||||||
|
@@ -117,8 +117,8 @@ func (req *Request) ReadIgnoreFrames(maxPayloadSize int, rb *bufio.Reader) error
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// WriteSize returns the size of a Request.
|
// MarshalSize returns the size of a Request.
|
||||||
func (req Request) WriteSize() int {
|
func (req Request) MarshalSize() int {
|
||||||
n := 0
|
n := 0
|
||||||
|
|
||||||
urStr := req.URL.CloneWithoutCredentials().String()
|
urStr := req.URL.CloneWithoutCredentials().String()
|
||||||
@@ -128,15 +128,15 @@ func (req Request) WriteSize() int {
|
|||||||
req.Header["Content-Length"] = HeaderValue{strconv.FormatInt(int64(len(req.Body)), 10)}
|
req.Header["Content-Length"] = HeaderValue{strconv.FormatInt(int64(len(req.Body)), 10)}
|
||||||
}
|
}
|
||||||
|
|
||||||
n += req.Header.writeSize()
|
n += req.Header.marshalSize()
|
||||||
|
|
||||||
n += body(req.Body).writeSize()
|
n += body(req.Body).marshalSize()
|
||||||
|
|
||||||
return n
|
return n
|
||||||
}
|
}
|
||||||
|
|
||||||
// WriteTo writes a Request.
|
// MarshalTo writes a Request.
|
||||||
func (req Request) WriteTo(buf []byte) (int, error) {
|
func (req Request) MarshalTo(buf []byte) (int, error) {
|
||||||
pos := 0
|
pos := 0
|
||||||
|
|
||||||
urStr := req.URL.CloneWithoutCredentials().String()
|
urStr := req.URL.CloneWithoutCredentials().String()
|
||||||
@@ -146,22 +146,22 @@ func (req Request) WriteTo(buf []byte) (int, error) {
|
|||||||
req.Header["Content-Length"] = HeaderValue{strconv.FormatInt(int64(len(req.Body)), 10)}
|
req.Header["Content-Length"] = HeaderValue{strconv.FormatInt(int64(len(req.Body)), 10)}
|
||||||
}
|
}
|
||||||
|
|
||||||
pos += req.Header.writeTo(buf[pos:])
|
pos += req.Header.marshalTo(buf[pos:])
|
||||||
|
|
||||||
pos += body(req.Body).writeTo(buf[pos:])
|
pos += body(req.Body).marshalTo(buf[pos:])
|
||||||
|
|
||||||
return pos, nil
|
return pos, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write writes a Request.
|
// Marshal writes a Request.
|
||||||
func (req Request) Write() ([]byte, error) {
|
func (req Request) Marshal() ([]byte, error) {
|
||||||
buf := make([]byte, req.WriteSize())
|
buf := make([]byte, req.MarshalSize())
|
||||||
_, err := req.WriteTo(buf)
|
_, err := req.MarshalTo(buf)
|
||||||
return buf, err
|
return buf, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// String implements fmt.Stringer.
|
// String implements fmt.Stringer.
|
||||||
func (req Request) String() string {
|
func (req Request) String() string {
|
||||||
buf, _ := req.Write()
|
buf, _ := req.Marshal()
|
||||||
return string(buf)
|
return string(buf)
|
||||||
}
|
}
|
||||||
|
@@ -228,10 +228,10 @@ func TestRequestReadErrors(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRequestWrite(t *testing.T) {
|
func TestRequestMarshal(t *testing.T) {
|
||||||
for _, ca := range casesRequest {
|
for _, ca := range casesRequest {
|
||||||
t.Run(ca.name, func(t *testing.T) {
|
t.Run(ca.name, func(t *testing.T) {
|
||||||
buf, err := ca.req.Write()
|
buf, err := ca.req.Marshal()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, ca.byts, buf)
|
require.Equal(t, ca.byts, buf)
|
||||||
})
|
})
|
||||||
|
@@ -201,8 +201,8 @@ func (res *Response) ReadIgnoreFrames(maxPayloadSize int, rb *bufio.Reader) erro
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// WriteSize returns the size of a Response.
|
// MarshalSize returns the size of a Response.
|
||||||
func (res Response) WriteSize() int {
|
func (res Response) MarshalSize() int {
|
||||||
n := 0
|
n := 0
|
||||||
|
|
||||||
if res.StatusMessage == "" {
|
if res.StatusMessage == "" {
|
||||||
@@ -219,15 +219,15 @@ func (res Response) WriteSize() int {
|
|||||||
res.Header["Content-Length"] = HeaderValue{strconv.FormatInt(int64(len(res.Body)), 10)}
|
res.Header["Content-Length"] = HeaderValue{strconv.FormatInt(int64(len(res.Body)), 10)}
|
||||||
}
|
}
|
||||||
|
|
||||||
n += res.Header.writeSize()
|
n += res.Header.marshalSize()
|
||||||
|
|
||||||
n += body(res.Body).writeSize()
|
n += body(res.Body).marshalSize()
|
||||||
|
|
||||||
return n
|
return n
|
||||||
}
|
}
|
||||||
|
|
||||||
// WriteTo writes a Response.
|
// MarshalTo writes a Response.
|
||||||
func (res Response) WriteTo(buf []byte) (int, error) {
|
func (res Response) MarshalTo(buf []byte) (int, error) {
|
||||||
if res.StatusMessage == "" {
|
if res.StatusMessage == "" {
|
||||||
if status, ok := statusMessages[res.StatusCode]; ok {
|
if status, ok := statusMessages[res.StatusCode]; ok {
|
||||||
res.StatusMessage = status
|
res.StatusMessage = status
|
||||||
@@ -244,22 +244,22 @@ func (res Response) WriteTo(buf []byte) (int, error) {
|
|||||||
res.Header["Content-Length"] = HeaderValue{strconv.FormatInt(int64(len(res.Body)), 10)}
|
res.Header["Content-Length"] = HeaderValue{strconv.FormatInt(int64(len(res.Body)), 10)}
|
||||||
}
|
}
|
||||||
|
|
||||||
pos += res.Header.writeTo(buf[pos:])
|
pos += res.Header.marshalTo(buf[pos:])
|
||||||
|
|
||||||
pos += body(res.Body).writeTo(buf[pos:])
|
pos += body(res.Body).marshalTo(buf[pos:])
|
||||||
|
|
||||||
return pos, nil
|
return pos, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write writes a Response.
|
// Marshal writes a Response.
|
||||||
func (res Response) Write() ([]byte, error) {
|
func (res Response) Marshal() ([]byte, error) {
|
||||||
buf := make([]byte, res.WriteSize())
|
buf := make([]byte, res.MarshalSize())
|
||||||
_, err := res.WriteTo(buf)
|
_, err := res.MarshalTo(buf)
|
||||||
return buf, err
|
return buf, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// String implements fmt.Stringer.
|
// String implements fmt.Stringer.
|
||||||
func (res Response) String() string {
|
func (res Response) String() string {
|
||||||
buf, _ := res.Write()
|
buf, _ := res.Marshal()
|
||||||
return string(buf)
|
return string(buf)
|
||||||
}
|
}
|
||||||
|
@@ -175,17 +175,17 @@ func TestResponseReadErrors(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestResponseWrite(t *testing.T) {
|
func TestResponseMarshal(t *testing.T) {
|
||||||
for _, c := range casesResponse {
|
for _, c := range casesResponse {
|
||||||
t.Run(c.name, func(t *testing.T) {
|
t.Run(c.name, func(t *testing.T) {
|
||||||
buf, err := c.res.Write()
|
buf, err := c.res.Marshal()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, c.byts, buf)
|
require.Equal(t, c.byts, buf)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestResponseWriteAutoFillStatus(t *testing.T) {
|
func TestResponseMarshalAutoFillStatus(t *testing.T) {
|
||||||
res := &Response{
|
res := &Response{
|
||||||
StatusCode: StatusMethodNotAllowed,
|
StatusCode: StatusMethodNotAllowed,
|
||||||
Header: Header{
|
Header: Header{
|
||||||
@@ -207,7 +207,7 @@ func TestResponseWriteAutoFillStatus(t *testing.T) {
|
|||||||
"\r\n",
|
"\r\n",
|
||||||
)
|
)
|
||||||
|
|
||||||
buf, err := res.Write()
|
buf, err := res.Marshal()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, byts, buf)
|
require.Equal(t, byts, buf)
|
||||||
}
|
}
|
||||||
|
@@ -4,8 +4,8 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
)
|
)
|
||||||
|
|
||||||
// AnnexBDecode decodes NALUs from the Annex-B stream format.
|
// AnnexBUnmarshal decodes NALUs from the Annex-B stream format.
|
||||||
func AnnexBDecode(byts []byte) ([][]byte, error) {
|
func AnnexBUnmarshal(byts []byte) ([][]byte, error) {
|
||||||
bl := len(byts)
|
bl := len(byts)
|
||||||
zeroCount := 0
|
zeroCount := 0
|
||||||
|
|
||||||
@@ -73,7 +73,7 @@ outer:
|
|||||||
return ret, nil
|
return ret, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func annexBEncodeSize(nalus [][]byte) int {
|
func annexBMarshalSize(nalus [][]byte) int {
|
||||||
n := 0
|
n := 0
|
||||||
for _, nalu := range nalus {
|
for _, nalu := range nalus {
|
||||||
n += 4 + len(nalu)
|
n += 4 + len(nalu)
|
||||||
@@ -81,9 +81,9 @@ func annexBEncodeSize(nalus [][]byte) int {
|
|||||||
return n
|
return n
|
||||||
}
|
}
|
||||||
|
|
||||||
// AnnexBEncode encodes NALUs into the Annex-B stream format.
|
// AnnexBMarshal encodes NALUs into the Annex-B stream format.
|
||||||
func AnnexBEncode(nalus [][]byte) ([]byte, error) {
|
func AnnexBMarshal(nalus [][]byte) ([]byte, error) {
|
||||||
buf := make([]byte, annexBEncodeSize(nalus))
|
buf := make([]byte, annexBMarshalSize(nalus))
|
||||||
pos := 0
|
pos := 0
|
||||||
|
|
||||||
for _, nalu := range nalus {
|
for _, nalu := range nalus {
|
||||||
|
@@ -65,27 +65,27 @@ var casesAnnexB = []struct {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAnnexBDecode(t *testing.T) {
|
func TestAnnexBUnmarshal(t *testing.T) {
|
||||||
for _, ca := range casesAnnexB {
|
for _, ca := range casesAnnexB {
|
||||||
t.Run(ca.name, func(t *testing.T) {
|
t.Run(ca.name, func(t *testing.T) {
|
||||||
dec, err := AnnexBDecode(ca.encin)
|
dec, err := AnnexBUnmarshal(ca.encin)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, ca.dec, dec)
|
require.Equal(t, ca.dec, dec)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAnnexBEncode(t *testing.T) {
|
func TestAnnexBMarshal(t *testing.T) {
|
||||||
for _, ca := range casesAnnexB {
|
for _, ca := range casesAnnexB {
|
||||||
t.Run(ca.name, func(t *testing.T) {
|
t.Run(ca.name, func(t *testing.T) {
|
||||||
enc, err := AnnexBEncode(ca.dec)
|
enc, err := AnnexBMarshal(ca.dec)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, ca.encout, enc)
|
require.Equal(t, ca.encout, enc)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAnnexBDecodeError(t *testing.T) {
|
func TestAnnexBUnmarshalError(t *testing.T) {
|
||||||
for _, ca := range []struct {
|
for _, ca := range []struct {
|
||||||
name string
|
name string
|
||||||
enc []byte
|
enc []byte
|
||||||
@@ -118,7 +118,7 @@ func TestAnnexBDecodeError(t *testing.T) {
|
|||||||
},
|
},
|
||||||
} {
|
} {
|
||||||
t.Run(ca.name, func(t *testing.T) {
|
t.Run(ca.name, func(t *testing.T) {
|
||||||
_, err := AnnexBDecode(ca.enc)
|
_, err := AnnexBUnmarshal(ca.enc)
|
||||||
require.EqualError(t, err, ca.err)
|
require.EqualError(t, err, ca.err)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@@ -5,8 +5,8 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
)
|
)
|
||||||
|
|
||||||
// AVCCDecode decodes NALUs from the AVCC stream format.
|
// AVCCUnmarshal decodes NALUs from the AVCC stream format.
|
||||||
func AVCCDecode(buf []byte) ([][]byte, error) {
|
func AVCCUnmarshal(buf []byte) ([][]byte, error) {
|
||||||
bl := len(buf)
|
bl := len(buf)
|
||||||
pos := 0
|
pos := 0
|
||||||
var ret [][]byte
|
var ret [][]byte
|
||||||
@@ -38,7 +38,7 @@ func AVCCDecode(buf []byte) ([][]byte, error) {
|
|||||||
return ret, nil
|
return ret, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func avccEncodeSize(nalus [][]byte) int {
|
func avccMarshalSize(nalus [][]byte) int {
|
||||||
n := 0
|
n := 0
|
||||||
for _, nalu := range nalus {
|
for _, nalu := range nalus {
|
||||||
n += 4 + len(nalu)
|
n += 4 + len(nalu)
|
||||||
@@ -46,9 +46,9 @@ func avccEncodeSize(nalus [][]byte) int {
|
|||||||
return n
|
return n
|
||||||
}
|
}
|
||||||
|
|
||||||
// AVCCEncode encodes NALUs into the AVCC stream format.
|
// AVCCMarshal encodes NALUs into the AVCC stream format.
|
||||||
func AVCCEncode(nalus [][]byte) ([]byte, error) {
|
func AVCCMarshal(nalus [][]byte) ([]byte, error) {
|
||||||
buf := make([]byte, avccEncodeSize(nalus))
|
buf := make([]byte, avccMarshalSize(nalus))
|
||||||
pos := 0
|
pos := 0
|
||||||
|
|
||||||
for _, nalu := range nalus {
|
for _, nalu := range nalus {
|
||||||
|
@@ -39,27 +39,27 @@ var casesAVCC = []struct {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAVCCDecode(t *testing.T) {
|
func TestAVCCUnmarshal(t *testing.T) {
|
||||||
for _, ca := range casesAVCC {
|
for _, ca := range casesAVCC {
|
||||||
t.Run(ca.name, func(t *testing.T) {
|
t.Run(ca.name, func(t *testing.T) {
|
||||||
dec, err := AVCCDecode(ca.enc)
|
dec, err := AVCCUnmarshal(ca.enc)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, ca.dec, dec)
|
require.Equal(t, ca.dec, dec)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAVCCEncode(t *testing.T) {
|
func TestAVCCMarshal(t *testing.T) {
|
||||||
for _, ca := range casesAVCC {
|
for _, ca := range casesAVCC {
|
||||||
t.Run(ca.name, func(t *testing.T) {
|
t.Run(ca.name, func(t *testing.T) {
|
||||||
enc, err := AVCCEncode(ca.dec)
|
enc, err := AVCCMarshal(ca.dec)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, ca.enc, enc)
|
require.Equal(t, ca.enc, enc)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAVCCDecodeError(t *testing.T) {
|
func TestAVCCUnmarshalError(t *testing.T) {
|
||||||
for _, ca := range []struct {
|
for _, ca := range []struct {
|
||||||
name string
|
name string
|
||||||
enc []byte
|
enc []byte
|
||||||
@@ -78,7 +78,7 @@ func TestAVCCDecodeError(t *testing.T) {
|
|||||||
},
|
},
|
||||||
} {
|
} {
|
||||||
t.Run(ca.name, func(t *testing.T) {
|
t.Run(ca.name, func(t *testing.T) {
|
||||||
_, err := AVCCDecode(ca.enc)
|
_, err := AVCCUnmarshal(ca.enc)
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@@ -49,8 +49,8 @@ type Authenticate struct {
|
|||||||
Algorithm *string
|
Algorithm *string
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read decodes an Authenticate or a WWW-Authenticate header.
|
// Unmarshal decodes an Authenticate or a WWW-Authenticate header.
|
||||||
func (h *Authenticate) Read(v base.HeaderValue) error {
|
func (h *Authenticate) Unmarshal(v base.HeaderValue) error {
|
||||||
if len(v) == 0 {
|
if len(v) == 0 {
|
||||||
return fmt.Errorf("value not provided")
|
return fmt.Errorf("value not provided")
|
||||||
}
|
}
|
||||||
@@ -116,8 +116,8 @@ func (h *Authenticate) Read(v base.HeaderValue) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write encodes an Authenticate or a WWW-Authenticate header.
|
// Marshal encodes an Authenticate or a WWW-Authenticate header.
|
||||||
func (h Authenticate) Write() base.HeaderValue {
|
func (h Authenticate) Marshal() base.HeaderValue {
|
||||||
ret := ""
|
ret := ""
|
||||||
|
|
||||||
switch h.Method {
|
switch h.Method {
|
||||||
|
@@ -178,18 +178,18 @@ var casesAuthenticate = []struct {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAuthenticateRead(t *testing.T) {
|
func TestAuthenticateUnmarshal(t *testing.T) {
|
||||||
for _, ca := range casesAuthenticate {
|
for _, ca := range casesAuthenticate {
|
||||||
t.Run(ca.name, func(t *testing.T) {
|
t.Run(ca.name, func(t *testing.T) {
|
||||||
var h Authenticate
|
var h Authenticate
|
||||||
err := h.Read(ca.vin)
|
err := h.Unmarshal(ca.vin)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, ca.h, h)
|
require.Equal(t, ca.h, h)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAutenticatehReadErrors(t *testing.T) {
|
func TestAutenticatehUnmarshalErrors(t *testing.T) {
|
||||||
for _, ca := range []struct {
|
for _, ca := range []struct {
|
||||||
name string
|
name string
|
||||||
hv base.HeaderValue
|
hv base.HeaderValue
|
||||||
@@ -223,16 +223,16 @@ func TestAutenticatehReadErrors(t *testing.T) {
|
|||||||
} {
|
} {
|
||||||
t.Run(ca.name, func(t *testing.T) {
|
t.Run(ca.name, func(t *testing.T) {
|
||||||
var h Authenticate
|
var h Authenticate
|
||||||
err := h.Read(ca.hv)
|
err := h.Unmarshal(ca.hv)
|
||||||
require.EqualError(t, err, ca.err)
|
require.EqualError(t, err, ca.err)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAuthenticateWrite(t *testing.T) {
|
func TestAuthenticateMarshal(t *testing.T) {
|
||||||
for _, ca := range casesAuthenticate {
|
for _, ca := range casesAuthenticate {
|
||||||
t.Run(ca.name, func(t *testing.T) {
|
t.Run(ca.name, func(t *testing.T) {
|
||||||
vout := ca.h.Write()
|
vout := ca.h.Marshal()
|
||||||
require.Equal(t, ca.vout, vout)
|
require.Equal(t, ca.vout, vout)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@@ -23,8 +23,8 @@ type Authorization struct {
|
|||||||
DigestValues Authenticate
|
DigestValues Authenticate
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read decodes an Authorization header.
|
// Unmarshal decodes an Authorization header.
|
||||||
func (h *Authorization) Read(v base.HeaderValue) error {
|
func (h *Authorization) Unmarshal(v base.HeaderValue) error {
|
||||||
if len(v) == 0 {
|
if len(v) == 0 {
|
||||||
return fmt.Errorf("value not provided")
|
return fmt.Errorf("value not provided")
|
||||||
}
|
}
|
||||||
@@ -57,7 +57,7 @@ func (h *Authorization) Read(v base.HeaderValue) error {
|
|||||||
h.Method = AuthDigest
|
h.Method = AuthDigest
|
||||||
|
|
||||||
var vals Authenticate
|
var vals Authenticate
|
||||||
err := vals.Read(base.HeaderValue{v0})
|
err := vals.Unmarshal(base.HeaderValue{v0})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -71,8 +71,8 @@ func (h *Authorization) Read(v base.HeaderValue) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write encodes an Authorization header.
|
// Marshal encodes an Authorization header.
|
||||||
func (h Authorization) Write() base.HeaderValue {
|
func (h Authorization) Marshal() base.HeaderValue {
|
||||||
switch h.Method {
|
switch h.Method {
|
||||||
case AuthBasic:
|
case AuthBasic:
|
||||||
response := base64.StdEncoding.EncodeToString([]byte(h.BasicUser + ":" + h.BasicPass))
|
response := base64.StdEncoding.EncodeToString([]byte(h.BasicUser + ":" + h.BasicPass))
|
||||||
@@ -80,6 +80,6 @@ func (h Authorization) Write() base.HeaderValue {
|
|||||||
return base.HeaderValue{"Basic " + response}
|
return base.HeaderValue{"Basic " + response}
|
||||||
|
|
||||||
default: // AuthDigest
|
default: // AuthDigest
|
||||||
return h.DigestValues.Write()
|
return h.DigestValues.Marshal()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -49,18 +49,18 @@ var casesAuthorization = []struct {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAuthorizationRead(t *testing.T) {
|
func TestAuthorizationUnmarshal(t *testing.T) {
|
||||||
for _, ca := range casesAuthorization {
|
for _, ca := range casesAuthorization {
|
||||||
t.Run(ca.name, func(t *testing.T) {
|
t.Run(ca.name, func(t *testing.T) {
|
||||||
var h Authorization
|
var h Authorization
|
||||||
err := h.Read(ca.vin)
|
err := h.Unmarshal(ca.vin)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, ca.h, h)
|
require.Equal(t, ca.h, h)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAuthorizationReadErrors(t *testing.T) {
|
func TestAuthorizationUnmarshalErrors(t *testing.T) {
|
||||||
for _, ca := range []struct {
|
for _, ca := range []struct {
|
||||||
name string
|
name string
|
||||||
hv base.HeaderValue
|
hv base.HeaderValue
|
||||||
@@ -99,16 +99,16 @@ func TestAuthorizationReadErrors(t *testing.T) {
|
|||||||
} {
|
} {
|
||||||
t.Run(ca.name, func(t *testing.T) {
|
t.Run(ca.name, func(t *testing.T) {
|
||||||
var h Authorization
|
var h Authorization
|
||||||
err := h.Read(ca.hv)
|
err := h.Unmarshal(ca.hv)
|
||||||
require.EqualError(t, err, ca.err)
|
require.EqualError(t, err, ca.err)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAuthorizationWrite(t *testing.T) {
|
func TestAuthorizationMarshal(t *testing.T) {
|
||||||
for _, ca := range casesAuthorization {
|
for _, ca := range casesAuthorization {
|
||||||
t.Run(ca.name, func(t *testing.T) {
|
t.Run(ca.name, func(t *testing.T) {
|
||||||
vout := ca.h.Write()
|
vout := ca.h.Marshal()
|
||||||
require.Equal(t, ca.vout, vout)
|
require.Equal(t, ca.vout, vout)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@@ -25,7 +25,7 @@ type RangeSMPTETime struct {
|
|||||||
Subframe uint
|
Subframe uint
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *RangeSMPTETime) read(s string) error {
|
func (t *RangeSMPTETime) unmarshal(s string) error {
|
||||||
parts := strings.Split(s, ":")
|
parts := strings.Split(s, ":")
|
||||||
if len(parts) != 3 && len(parts) != 4 {
|
if len(parts) != 3 && len(parts) != 4 {
|
||||||
return fmt.Errorf("invalid SMPTE time (%v)", s)
|
return fmt.Errorf("invalid SMPTE time (%v)", s)
|
||||||
@@ -77,7 +77,7 @@ func (t *RangeSMPTETime) read(s string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t RangeSMPTETime) write() string {
|
func (t RangeSMPTETime) marshal() string {
|
||||||
d := uint64(t.Time.Seconds())
|
d := uint64(t.Time.Seconds())
|
||||||
hours := d / 3600
|
hours := d / 3600
|
||||||
d %= 3600
|
d %= 3600
|
||||||
@@ -103,15 +103,15 @@ type RangeSMPTE struct {
|
|||||||
End *RangeSMPTETime
|
End *RangeSMPTETime
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *RangeSMPTE) read(start string, end string) error {
|
func (r *RangeSMPTE) unmarshal(start string, end string) error {
|
||||||
err := r.Start.read(start)
|
err := r.Start.unmarshal(start)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if end != "" {
|
if end != "" {
|
||||||
var v RangeSMPTETime
|
var v RangeSMPTETime
|
||||||
err := v.read(end)
|
err := v.unmarshal(end)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -121,10 +121,10 @@ func (r *RangeSMPTE) read(start string, end string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r RangeSMPTE) write() string {
|
func (r RangeSMPTE) marshal() string {
|
||||||
ret := "smpte=" + r.Start.write() + "-"
|
ret := "smpte=" + r.Start.marshal() + "-"
|
||||||
if r.End != nil {
|
if r.End != nil {
|
||||||
ret += r.End.write()
|
ret += r.End.marshal()
|
||||||
}
|
}
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
@@ -132,7 +132,7 @@ func (r RangeSMPTE) write() string {
|
|||||||
// RangeNPTTime is a time expressed in NPT unit.
|
// RangeNPTTime is a time expressed in NPT unit.
|
||||||
type RangeNPTTime time.Duration
|
type RangeNPTTime time.Duration
|
||||||
|
|
||||||
func (t *RangeNPTTime) read(s string) error {
|
func (t *RangeNPTTime) unmarshal(s string) error {
|
||||||
parts := strings.Split(s, ":")
|
parts := strings.Split(s, ":")
|
||||||
if len(parts) > 3 {
|
if len(parts) > 3 {
|
||||||
return fmt.Errorf("invalid NPT time (%v)", s)
|
return fmt.Errorf("invalid NPT time (%v)", s)
|
||||||
@@ -170,7 +170,7 @@ func (t *RangeNPTTime) read(s string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t RangeNPTTime) write() string {
|
func (t RangeNPTTime) marshal() string {
|
||||||
return strconv.FormatFloat(time.Duration(t).Seconds(), 'f', -1, 64)
|
return strconv.FormatFloat(time.Duration(t).Seconds(), 'f', -1, 64)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -180,15 +180,15 @@ type RangeNPT struct {
|
|||||||
End *RangeNPTTime
|
End *RangeNPTTime
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *RangeNPT) read(start string, end string) error {
|
func (r *RangeNPT) unmarshal(start string, end string) error {
|
||||||
err := r.Start.read(start)
|
err := r.Start.unmarshal(start)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if end != "" {
|
if end != "" {
|
||||||
var v RangeNPTTime
|
var v RangeNPTTime
|
||||||
err := v.read(end)
|
err := v.unmarshal(end)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -198,10 +198,10 @@ func (r *RangeNPT) read(start string, end string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r RangeNPT) write() string {
|
func (r RangeNPT) marshal() string {
|
||||||
ret := "npt=" + r.Start.write() + "-"
|
ret := "npt=" + r.Start.marshal() + "-"
|
||||||
if r.End != nil {
|
if r.End != nil {
|
||||||
ret += r.End.write()
|
ret += r.End.marshal()
|
||||||
}
|
}
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
@@ -209,7 +209,7 @@ func (r RangeNPT) write() string {
|
|||||||
// RangeUTCTime is a time expressed in UTC unit.
|
// RangeUTCTime is a time expressed in UTC unit.
|
||||||
type RangeUTCTime time.Time
|
type RangeUTCTime time.Time
|
||||||
|
|
||||||
func (t *RangeUTCTime) read(s string) error {
|
func (t *RangeUTCTime) unmarshal(s string) error {
|
||||||
tmp, err := time.Parse("20060102T150405Z", s)
|
tmp, err := time.Parse("20060102T150405Z", s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -219,7 +219,7 @@ func (t *RangeUTCTime) read(s string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t RangeUTCTime) write() string {
|
func (t RangeUTCTime) marshal() string {
|
||||||
return time.Time(t).Format("20060102T150405Z")
|
return time.Time(t).Format("20060102T150405Z")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -229,15 +229,15 @@ type RangeUTC struct {
|
|||||||
End *RangeUTCTime
|
End *RangeUTCTime
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *RangeUTC) read(start string, end string) error {
|
func (r *RangeUTC) unmarshal(start string, end string) error {
|
||||||
err := r.Start.read(start)
|
err := r.Start.unmarshal(start)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if end != "" {
|
if end != "" {
|
||||||
var v RangeUTCTime
|
var v RangeUTCTime
|
||||||
err := v.read(end)
|
err := v.unmarshal(end)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -247,10 +247,10 @@ func (r *RangeUTC) read(start string, end string) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r RangeUTC) write() string {
|
func (r RangeUTC) marshal() string {
|
||||||
ret := "clock=" + r.Start.write() + "-"
|
ret := "clock=" + r.Start.marshal() + "-"
|
||||||
if r.End != nil {
|
if r.End != nil {
|
||||||
ret += r.End.write()
|
ret += r.End.marshal()
|
||||||
}
|
}
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
@@ -260,17 +260,17 @@ func (r RangeUTC) write() string {
|
|||||||
// - RangeNPT
|
// - RangeNPT
|
||||||
// - RangeUTC
|
// - RangeUTC
|
||||||
type RangeValue interface {
|
type RangeValue interface {
|
||||||
read(string, string) error
|
unmarshal(string, string) error
|
||||||
write() string
|
marshal() string
|
||||||
}
|
}
|
||||||
|
|
||||||
func rangeValueRead(s RangeValue, v string) error {
|
func rangeValueUnmarshal(s RangeValue, v string) error {
|
||||||
parts := strings.Split(v, "-")
|
parts := strings.Split(v, "-")
|
||||||
if len(parts) != 2 {
|
if len(parts) != 2 {
|
||||||
return fmt.Errorf("invalid value (%v)", v)
|
return fmt.Errorf("invalid value (%v)", v)
|
||||||
}
|
}
|
||||||
|
|
||||||
return s.read(parts[0], parts[1])
|
return s.unmarshal(parts[0], parts[1])
|
||||||
}
|
}
|
||||||
|
|
||||||
// Range is a Range header.
|
// Range is a Range header.
|
||||||
@@ -282,8 +282,8 @@ type Range struct {
|
|||||||
Time *RangeUTCTime
|
Time *RangeUTCTime
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read decodes a Range header.
|
// Unmarshal decodes a Range header.
|
||||||
func (h *Range) Read(v base.HeaderValue) error {
|
func (h *Range) Unmarshal(v base.HeaderValue) error {
|
||||||
if len(v) == 0 {
|
if len(v) == 0 {
|
||||||
return fmt.Errorf("value not provided")
|
return fmt.Errorf("value not provided")
|
||||||
}
|
}
|
||||||
@@ -305,7 +305,7 @@ func (h *Range) Read(v base.HeaderValue) error {
|
|||||||
switch k {
|
switch k {
|
||||||
case "smpte":
|
case "smpte":
|
||||||
s := &RangeSMPTE{}
|
s := &RangeSMPTE{}
|
||||||
err := rangeValueRead(s, v)
|
err := rangeValueUnmarshal(s, v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -315,7 +315,7 @@ func (h *Range) Read(v base.HeaderValue) error {
|
|||||||
|
|
||||||
case "npt":
|
case "npt":
|
||||||
s := &RangeNPT{}
|
s := &RangeNPT{}
|
||||||
err := rangeValueRead(s, v)
|
err := rangeValueUnmarshal(s, v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -325,7 +325,7 @@ func (h *Range) Read(v base.HeaderValue) error {
|
|||||||
|
|
||||||
case "clock":
|
case "clock":
|
||||||
s := &RangeUTC{}
|
s := &RangeUTC{}
|
||||||
err := rangeValueRead(s, v)
|
err := rangeValueUnmarshal(s, v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -335,7 +335,7 @@ func (h *Range) Read(v base.HeaderValue) error {
|
|||||||
|
|
||||||
case "time":
|
case "time":
|
||||||
t := &RangeUTCTime{}
|
t := &RangeUTCTime{}
|
||||||
err := t.read(v)
|
err := t.unmarshal(v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -351,11 +351,11 @@ func (h *Range) Read(v base.HeaderValue) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write encodes a Range header.
|
// Marshal encodes a Range header.
|
||||||
func (h Range) Write() base.HeaderValue {
|
func (h Range) Marshal() base.HeaderValue {
|
||||||
v := h.Value.write()
|
v := h.Value.marshal()
|
||||||
if h.Time != nil {
|
if h.Time != nil {
|
||||||
v += ";time=" + h.Time.write()
|
v += ";time=" + h.Time.marshal()
|
||||||
}
|
}
|
||||||
return base.HeaderValue{v}
|
return base.HeaderValue{v}
|
||||||
}
|
}
|
||||||
|
@@ -121,18 +121,18 @@ var casesRange = []struct {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRangeRead(t *testing.T) {
|
func TestRangeUnmarshal(t *testing.T) {
|
||||||
for _, ca := range casesRange {
|
for _, ca := range casesRange {
|
||||||
t.Run(ca.name, func(t *testing.T) {
|
t.Run(ca.name, func(t *testing.T) {
|
||||||
var h Range
|
var h Range
|
||||||
err := h.Read(ca.vin)
|
err := h.Unmarshal(ca.vin)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, ca.h, h)
|
require.Equal(t, ca.h, h)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRangeReadErrors(t *testing.T) {
|
func TestRangeUnmarshalErrors(t *testing.T) {
|
||||||
for _, ca := range []struct {
|
for _, ca := range []struct {
|
||||||
name string
|
name string
|
||||||
hv base.HeaderValue
|
hv base.HeaderValue
|
||||||
@@ -256,16 +256,16 @@ func TestRangeReadErrors(t *testing.T) {
|
|||||||
} {
|
} {
|
||||||
t.Run(ca.name, func(t *testing.T) {
|
t.Run(ca.name, func(t *testing.T) {
|
||||||
var h Range
|
var h Range
|
||||||
err := h.Read(ca.hv)
|
err := h.Unmarshal(ca.hv)
|
||||||
require.EqualError(t, err, ca.err)
|
require.EqualError(t, err, ca.err)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRangeWrite(t *testing.T) {
|
func TestRangeMarshal(t *testing.T) {
|
||||||
for _, ca := range casesRange {
|
for _, ca := range casesRange {
|
||||||
t.Run(ca.name, func(t *testing.T) {
|
t.Run(ca.name, func(t *testing.T) {
|
||||||
req := ca.h.Write()
|
req := ca.h.Marshal()
|
||||||
require.Equal(t, ca.vout, req)
|
require.Equal(t, ca.vout, req)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@@ -18,8 +18,8 @@ type RTPInfoEntry struct {
|
|||||||
// RTPInfo is a RTP-Info header.
|
// RTPInfo is a RTP-Info header.
|
||||||
type RTPInfo []*RTPInfoEntry
|
type RTPInfo []*RTPInfoEntry
|
||||||
|
|
||||||
// Read decodes a RTP-Info header.
|
// Unmarshal decodes a RTP-Info header.
|
||||||
func (h *RTPInfo) Read(v base.HeaderValue) error {
|
func (h *RTPInfo) Unmarshal(v base.HeaderValue) error {
|
||||||
if len(v) == 0 {
|
if len(v) == 0 {
|
||||||
return fmt.Errorf("value not provided")
|
return fmt.Errorf("value not provided")
|
||||||
}
|
}
|
||||||
@@ -75,8 +75,8 @@ func (h *RTPInfo) Read(v base.HeaderValue) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write encodes a RTP-Info header.
|
// Marshal encodes a RTP-Info header.
|
||||||
func (h RTPInfo) Write() base.HeaderValue {
|
func (h RTPInfo) Marshal() base.HeaderValue {
|
||||||
rets := make([]string, len(h))
|
rets := make([]string, len(h))
|
||||||
|
|
||||||
for i, e := range h {
|
for i, e := range h {
|
||||||
|
@@ -173,18 +173,18 @@ var casesRTPInfo = []struct {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRTPInfoRead(t *testing.T) {
|
func TestRTPInfoUnmarshal(t *testing.T) {
|
||||||
for _, ca := range casesRTPInfo {
|
for _, ca := range casesRTPInfo {
|
||||||
t.Run(ca.name, func(t *testing.T) {
|
t.Run(ca.name, func(t *testing.T) {
|
||||||
var h RTPInfo
|
var h RTPInfo
|
||||||
err := h.Read(ca.vin)
|
err := h.Unmarshal(ca.vin)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, ca.h, h)
|
require.Equal(t, ca.h, h)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRTPInfoReadErrors(t *testing.T) {
|
func TestRTPInfoUnmarshalErrors(t *testing.T) {
|
||||||
for _, ca := range []struct {
|
for _, ca := range []struct {
|
||||||
name string
|
name string
|
||||||
hv base.HeaderValue
|
hv base.HeaderValue
|
||||||
@@ -223,16 +223,16 @@ func TestRTPInfoReadErrors(t *testing.T) {
|
|||||||
} {
|
} {
|
||||||
t.Run(ca.name, func(t *testing.T) {
|
t.Run(ca.name, func(t *testing.T) {
|
||||||
var h RTPInfo
|
var h RTPInfo
|
||||||
err := h.Read(ca.hv)
|
err := h.Unmarshal(ca.hv)
|
||||||
require.EqualError(t, err, ca.err)
|
require.EqualError(t, err, ca.err)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRTPInfoWrite(t *testing.T) {
|
func TestRTPInfoMarshal(t *testing.T) {
|
||||||
for _, ca := range casesRTPInfo {
|
for _, ca := range casesRTPInfo {
|
||||||
t.Run(ca.name, func(t *testing.T) {
|
t.Run(ca.name, func(t *testing.T) {
|
||||||
req := ca.h.Write()
|
req := ca.h.Marshal()
|
||||||
require.Equal(t, ca.vout, req)
|
require.Equal(t, ca.vout, req)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@@ -17,8 +17,8 @@ type Session struct {
|
|||||||
Timeout *uint
|
Timeout *uint
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read decodes a Session header.
|
// Unmarshal decodes a Session header.
|
||||||
func (h *Session) Read(v base.HeaderValue) error {
|
func (h *Session) Unmarshal(v base.HeaderValue) error {
|
||||||
if len(v) == 0 {
|
if len(v) == 0 {
|
||||||
return fmt.Errorf("value not provided")
|
return fmt.Errorf("value not provided")
|
||||||
}
|
}
|
||||||
@@ -59,8 +59,8 @@ func (h *Session) Read(v base.HeaderValue) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write encodes a Session header.
|
// Marshal encodes a Session header.
|
||||||
func (h Session) Write() base.HeaderValue {
|
func (h Session) Marshal() base.HeaderValue {
|
||||||
ret := h.Session
|
ret := h.Session
|
||||||
|
|
||||||
if h.Timeout != nil {
|
if h.Timeout != nil {
|
||||||
|
@@ -48,18 +48,18 @@ var casesSession = []struct {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSessionRead(t *testing.T) {
|
func TestSessionUnmarshal(t *testing.T) {
|
||||||
for _, ca := range casesSession {
|
for _, ca := range casesSession {
|
||||||
t.Run(ca.name, func(t *testing.T) {
|
t.Run(ca.name, func(t *testing.T) {
|
||||||
var h Session
|
var h Session
|
||||||
err := h.Read(ca.vin)
|
err := h.Unmarshal(ca.vin)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, ca.h, h)
|
require.Equal(t, ca.h, h)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSessionReadErrors(t *testing.T) {
|
func TestSessionUnmarshalErrors(t *testing.T) {
|
||||||
for _, ca := range []struct {
|
for _, ca := range []struct {
|
||||||
name string
|
name string
|
||||||
hv base.HeaderValue
|
hv base.HeaderValue
|
||||||
@@ -88,16 +88,16 @@ func TestSessionReadErrors(t *testing.T) {
|
|||||||
} {
|
} {
|
||||||
t.Run(ca.name, func(t *testing.T) {
|
t.Run(ca.name, func(t *testing.T) {
|
||||||
var h Session
|
var h Session
|
||||||
err := h.Read(ca.hv)
|
err := h.Unmarshal(ca.hv)
|
||||||
require.EqualError(t, err, ca.err)
|
require.EqualError(t, err, ca.err)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSessionWrite(t *testing.T) {
|
func TestSessionMarshal(t *testing.T) {
|
||||||
for _, ca := range casesSession {
|
for _, ca := range casesSession {
|
||||||
t.Run(ca.name, func(t *testing.T) {
|
t.Run(ca.name, func(t *testing.T) {
|
||||||
req := ca.h.Write()
|
req := ca.h.Marshal()
|
||||||
require.Equal(t, ca.vout, req)
|
require.Equal(t, ca.vout, req)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@@ -104,8 +104,8 @@ func parsePorts(val string) (*[2]int, error) {
|
|||||||
return &[2]int{0, 0}, fmt.Errorf("invalid ports (%v)", val)
|
return &[2]int{0, 0}, fmt.Errorf("invalid ports (%v)", val)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read decodes a Transport header.
|
// Unmarshal decodes a Transport header.
|
||||||
func (h *Transport) Read(v base.HeaderValue) error {
|
func (h *Transport) Unmarshal(v base.HeaderValue) error {
|
||||||
if len(v) == 0 {
|
if len(v) == 0 {
|
||||||
return fmt.Errorf("value not provided")
|
return fmt.Errorf("value not provided")
|
||||||
}
|
}
|
||||||
@@ -258,8 +258,8 @@ func (h *Transport) Read(v base.HeaderValue) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write encodes a Transport header
|
// Marshal encodes a Transport header
|
||||||
func (h Transport) Write() base.HeaderValue {
|
func (h Transport) Marshal() base.HeaderValue {
|
||||||
var rets []string
|
var rets []string
|
||||||
|
|
||||||
if h.Protocol == TransportProtocolUDP {
|
if h.Protocol == TransportProtocolUDP {
|
||||||
|
@@ -218,18 +218,18 @@ var casesTransport = []struct {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestTransportRead(t *testing.T) {
|
func TestTransportUnmarshal(t *testing.T) {
|
||||||
for _, ca := range casesTransport {
|
for _, ca := range casesTransport {
|
||||||
t.Run(ca.name, func(t *testing.T) {
|
t.Run(ca.name, func(t *testing.T) {
|
||||||
var h Transport
|
var h Transport
|
||||||
err := h.Read(ca.vin)
|
err := h.Unmarshal(ca.vin)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, ca.h, h)
|
require.Equal(t, ca.h, h)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestTransportReadErrors(t *testing.T) {
|
func TestTransportUnmarshalErrors(t *testing.T) {
|
||||||
for _, ca := range []struct {
|
for _, ca := range []struct {
|
||||||
name string
|
name string
|
||||||
hv base.HeaderValue
|
hv base.HeaderValue
|
||||||
@@ -318,16 +318,16 @@ func TestTransportReadErrors(t *testing.T) {
|
|||||||
} {
|
} {
|
||||||
t.Run(ca.name, func(t *testing.T) {
|
t.Run(ca.name, func(t *testing.T) {
|
||||||
var h Transport
|
var h Transport
|
||||||
err := h.Read(ca.hv)
|
err := h.Unmarshal(ca.hv)
|
||||||
require.EqualError(t, err, ca.err)
|
require.EqualError(t, err, ca.err)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestTransportWrite(t *testing.T) {
|
func TestTransportMarshal(t *testing.T) {
|
||||||
for _, ca := range casesTransport {
|
for _, ca := range casesTransport {
|
||||||
t.Run(ca.name, func(t *testing.T) {
|
t.Run(ca.name, func(t *testing.T) {
|
||||||
req := ca.h.Write()
|
req := ca.h.Marshal()
|
||||||
require.Equal(t, ca.vout, req)
|
require.Equal(t, ca.vout, req)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@@ -82,7 +82,8 @@ func (d *Decoder) Decode(pkt *rtp.Packet) ([][]byte, time.Duration, error) {
|
|||||||
|
|
||||||
au := payload[:dataLens[0]]
|
au := payload[:dataLens[0]]
|
||||||
|
|
||||||
pkts, err := aac.DecodeADTS(au)
|
var pkts aac.ADTSPackets
|
||||||
|
err := pkts.Unmarshal(au)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, 0, fmt.Errorf("unable to decode ADTS: %s", err)
|
return nil, 0, fmt.Errorf("unable to decode ADTS: %s", err)
|
||||||
}
|
}
|
||||||
@@ -111,7 +112,8 @@ func (d *Decoder) Decode(pkt *rtp.Packet) ([][]byte, time.Duration, error) {
|
|||||||
if !d.firstPacketParsed {
|
if !d.firstPacketParsed {
|
||||||
if len(aus) == 1 && len(aus[0]) >= 2 {
|
if len(aus) == 1 && len(aus[0]) >= 2 {
|
||||||
if aus[0][0] == 0xFF && (aus[0][1]&0xF0) == 0xF0 {
|
if aus[0][0] == 0xFF && (aus[0][1]&0xF0) == 0xF0 {
|
||||||
pkts, err := aac.DecodeADTS(aus[0])
|
var pkts aac.ADTSPackets
|
||||||
|
err := pkts.Unmarshal(aus[0])
|
||||||
if err == nil && len(pkts) == 1 {
|
if err == nil && len(pkts) == 1 {
|
||||||
d.adtsMode = true
|
d.adtsMode = true
|
||||||
aus[0] = pkts[0].AU
|
aus[0] = pkts[0].AU
|
||||||
|
@@ -285,7 +285,7 @@ func TestServerPublishSetupPath(t *testing.T) {
|
|||||||
URL: mustParseURL(ca.url),
|
URL: mustParseURL(ca.url),
|
||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"CSeq": base.HeaderValue{"2"},
|
"CSeq": base.HeaderValue{"2"},
|
||||||
"Transport": th.Write(),
|
"Transport": th.Marshal(),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@@ -341,7 +341,7 @@ func TestServerPublishErrorSetupDifferentPaths(t *testing.T) {
|
|||||||
"CSeq": base.HeaderValue{"1"},
|
"CSeq": base.HeaderValue{"1"},
|
||||||
"Content-Type": base.HeaderValue{"application/sdp"},
|
"Content-Type": base.HeaderValue{"application/sdp"},
|
||||||
},
|
},
|
||||||
Body: tracks.Write(false),
|
Body: tracks.Marshal(false),
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||||
@@ -364,7 +364,7 @@ func TestServerPublishErrorSetupDifferentPaths(t *testing.T) {
|
|||||||
URL: mustParseURL("rtsp://localhost:8554/test2stream/trackID=0"),
|
URL: mustParseURL("rtsp://localhost:8554/test2stream/trackID=0"),
|
||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"CSeq": base.HeaderValue{"2"},
|
"CSeq": base.HeaderValue{"2"},
|
||||||
"Transport": th.Write(),
|
"Transport": th.Marshal(),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@@ -421,7 +421,7 @@ func TestServerPublishErrorSetupTrackTwice(t *testing.T) {
|
|||||||
"CSeq": base.HeaderValue{"1"},
|
"CSeq": base.HeaderValue{"1"},
|
||||||
"Content-Type": base.HeaderValue{"application/sdp"},
|
"Content-Type": base.HeaderValue{"application/sdp"},
|
||||||
},
|
},
|
||||||
Body: tracks.Write(false),
|
Body: tracks.Marshal(false),
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||||
@@ -444,14 +444,14 @@ func TestServerPublishErrorSetupTrackTwice(t *testing.T) {
|
|||||||
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"CSeq": base.HeaderValue{"2"},
|
"CSeq": base.HeaderValue{"2"},
|
||||||
"Transport": th.Write(),
|
"Transport": th.Marshal(),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||||
|
|
||||||
var sx headers.Session
|
var sx headers.Session
|
||||||
err = sx.Read(res.Header["Session"])
|
err = sx.Unmarshal(res.Header["Session"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
res, err = writeReqReadRes(conn, br, base.Request{
|
res, err = writeReqReadRes(conn, br, base.Request{
|
||||||
@@ -459,7 +459,7 @@ func TestServerPublishErrorSetupTrackTwice(t *testing.T) {
|
|||||||
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"CSeq": base.HeaderValue{"3"},
|
"CSeq": base.HeaderValue{"3"},
|
||||||
"Transport": th.Write(),
|
"Transport": th.Marshal(),
|
||||||
"Session": base.HeaderValue{sx.Session},
|
"Session": base.HeaderValue{sx.Session},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
@@ -528,7 +528,7 @@ func TestServerPublishErrorRecordPartialTracks(t *testing.T) {
|
|||||||
"CSeq": base.HeaderValue{"1"},
|
"CSeq": base.HeaderValue{"1"},
|
||||||
"Content-Type": base.HeaderValue{"application/sdp"},
|
"Content-Type": base.HeaderValue{"application/sdp"},
|
||||||
},
|
},
|
||||||
Body: tracks.Write(false),
|
Body: tracks.Marshal(false),
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||||
@@ -551,14 +551,14 @@ func TestServerPublishErrorRecordPartialTracks(t *testing.T) {
|
|||||||
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"CSeq": base.HeaderValue{"2"},
|
"CSeq": base.HeaderValue{"2"},
|
||||||
"Transport": th.Write(),
|
"Transport": th.Marshal(),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||||
|
|
||||||
var sx headers.Session
|
var sx headers.Session
|
||||||
err = sx.Read(res.Header["Session"])
|
err = sx.Unmarshal(res.Header["Session"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
res, err = writeReqReadRes(conn, br, base.Request{
|
res, err = writeReqReadRes(conn, br, base.Request{
|
||||||
@@ -679,7 +679,7 @@ func TestServerPublish(t *testing.T) {
|
|||||||
"CSeq": base.HeaderValue{"1"},
|
"CSeq": base.HeaderValue{"1"},
|
||||||
"Content-Type": base.HeaderValue{"application/sdp"},
|
"Content-Type": base.HeaderValue{"application/sdp"},
|
||||||
},
|
},
|
||||||
Body: tracks.Write(false),
|
Body: tracks.Marshal(false),
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||||
@@ -721,18 +721,18 @@ func TestServerPublish(t *testing.T) {
|
|||||||
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"CSeq": base.HeaderValue{"2"},
|
"CSeq": base.HeaderValue{"2"},
|
||||||
"Transport": inTH.Write(),
|
"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)
|
||||||
|
|
||||||
var sx headers.Session
|
var sx headers.Session
|
||||||
err = sx.Read(res.Header["Session"])
|
err = sx.Unmarshal(res.Header["Session"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
var th headers.Transport
|
var th headers.Transport
|
||||||
err = th.Read(res.Header["Transport"])
|
err = th.Unmarshal(res.Header["Transport"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
res, err = writeReqReadRes(conn, br, base.Request{
|
res, err = writeReqReadRes(conn, br, base.Request{
|
||||||
@@ -786,14 +786,14 @@ func TestServerPublish(t *testing.T) {
|
|||||||
byts, _ := base.InterleavedFrame{
|
byts, _ := base.InterleavedFrame{
|
||||||
Channel: 0,
|
Channel: 0,
|
||||||
Payload: testRTPPacketMarshaled,
|
Payload: testRTPPacketMarshaled,
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
byts, _ = base.InterleavedFrame{
|
byts, _ = base.InterleavedFrame{
|
||||||
Channel: 1,
|
Channel: 1,
|
||||||
Payload: testRTCPPacketMarshaled,
|
Payload: testRTCPPacketMarshaled,
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}
|
}
|
||||||
@@ -883,7 +883,7 @@ func TestServerPublishErrorInvalidProtocol(t *testing.T) {
|
|||||||
"CSeq": base.HeaderValue{"1"},
|
"CSeq": base.HeaderValue{"1"},
|
||||||
"Content-Type": base.HeaderValue{"application/sdp"},
|
"Content-Type": base.HeaderValue{"application/sdp"},
|
||||||
},
|
},
|
||||||
Body: tracks.Write(false),
|
Body: tracks.Marshal(false),
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||||
@@ -906,18 +906,18 @@ func TestServerPublishErrorInvalidProtocol(t *testing.T) {
|
|||||||
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"CSeq": base.HeaderValue{"2"},
|
"CSeq": base.HeaderValue{"2"},
|
||||||
"Transport": inTH.Write(),
|
"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)
|
||||||
|
|
||||||
var sx headers.Session
|
var sx headers.Session
|
||||||
err = sx.Read(res.Header["Session"])
|
err = sx.Unmarshal(res.Header["Session"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
var th headers.Transport
|
var th headers.Transport
|
||||||
err = th.Read(res.Header["Transport"])
|
err = th.Unmarshal(res.Header["Transport"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
res, err = writeReqReadRes(conn, br, base.Request{
|
res, err = writeReqReadRes(conn, br, base.Request{
|
||||||
@@ -934,7 +934,7 @@ func TestServerPublishErrorInvalidProtocol(t *testing.T) {
|
|||||||
byts, _ := base.InterleavedFrame{
|
byts, _ := base.InterleavedFrame{
|
||||||
Channel: 0,
|
Channel: 0,
|
||||||
Payload: []byte{0x01, 0x02, 0x03, 0x04},
|
Payload: []byte{0x01, 0x02, 0x03, 0x04},
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}
|
}
|
||||||
@@ -989,7 +989,7 @@ func TestServerPublishRTCPReport(t *testing.T) {
|
|||||||
"CSeq": base.HeaderValue{"1"},
|
"CSeq": base.HeaderValue{"1"},
|
||||||
"Content-Type": base.HeaderValue{"application/sdp"},
|
"Content-Type": base.HeaderValue{"application/sdp"},
|
||||||
},
|
},
|
||||||
Body: tracks.Write(false),
|
Body: tracks.Marshal(false),
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||||
@@ -1018,18 +1018,18 @@ func TestServerPublishRTCPReport(t *testing.T) {
|
|||||||
}(),
|
}(),
|
||||||
Protocol: headers.TransportProtocolUDP,
|
Protocol: headers.TransportProtocolUDP,
|
||||||
ClientPorts: &[2]int{34556, 34557},
|
ClientPorts: &[2]int{34556, 34557},
|
||||||
}.Write(),
|
}.Marshal(),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||||
|
|
||||||
var sx headers.Session
|
var sx headers.Session
|
||||||
err = sx.Read(res.Header["Session"])
|
err = sx.Unmarshal(res.Header["Session"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
var th headers.Transport
|
var th headers.Transport
|
||||||
err = th.Read(res.Header["Transport"])
|
err = th.Unmarshal(res.Header["Transport"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
res, err = writeReqReadRes(conn, br, base.Request{
|
res, err = writeReqReadRes(conn, br, base.Request{
|
||||||
@@ -1166,7 +1166,7 @@ func TestServerPublishTimeout(t *testing.T) {
|
|||||||
"CSeq": base.HeaderValue{"1"},
|
"CSeq": base.HeaderValue{"1"},
|
||||||
"Content-Type": base.HeaderValue{"application/sdp"},
|
"Content-Type": base.HeaderValue{"application/sdp"},
|
||||||
},
|
},
|
||||||
Body: tracks.Write(false),
|
Body: tracks.Marshal(false),
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||||
@@ -1195,18 +1195,18 @@ func TestServerPublishTimeout(t *testing.T) {
|
|||||||
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"CSeq": base.HeaderValue{"2"},
|
"CSeq": base.HeaderValue{"2"},
|
||||||
"Transport": inTH.Write(),
|
"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)
|
||||||
|
|
||||||
var sx headers.Session
|
var sx headers.Session
|
||||||
err = sx.Read(res.Header["Session"])
|
err = sx.Unmarshal(res.Header["Session"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
var th headers.Transport
|
var th headers.Transport
|
||||||
err = th.Read(res.Header["Transport"])
|
err = th.Unmarshal(res.Header["Transport"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
res, err = writeReqReadRes(conn, br, base.Request{
|
res, err = writeReqReadRes(conn, br, base.Request{
|
||||||
@@ -1295,7 +1295,7 @@ func TestServerPublishWithoutTeardown(t *testing.T) {
|
|||||||
"CSeq": base.HeaderValue{"1"},
|
"CSeq": base.HeaderValue{"1"},
|
||||||
"Content-Type": base.HeaderValue{"application/sdp"},
|
"Content-Type": base.HeaderValue{"application/sdp"},
|
||||||
},
|
},
|
||||||
Body: tracks.Write(false),
|
Body: tracks.Marshal(false),
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||||
@@ -1324,18 +1324,18 @@ func TestServerPublishWithoutTeardown(t *testing.T) {
|
|||||||
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"CSeq": base.HeaderValue{"2"},
|
"CSeq": base.HeaderValue{"2"},
|
||||||
"Transport": inTH.Write(),
|
"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)
|
||||||
|
|
||||||
var sx headers.Session
|
var sx headers.Session
|
||||||
err = sx.Read(res.Header["Session"])
|
err = sx.Unmarshal(res.Header["Session"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
var th headers.Transport
|
var th headers.Transport
|
||||||
err = th.Read(res.Header["Transport"])
|
err = th.Unmarshal(res.Header["Transport"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
res, err = writeReqReadRes(conn, br, base.Request{
|
res, err = writeReqReadRes(conn, br, base.Request{
|
||||||
@@ -1416,7 +1416,7 @@ func TestServerPublishUDPChangeConn(t *testing.T) {
|
|||||||
"CSeq": base.HeaderValue{"1"},
|
"CSeq": base.HeaderValue{"1"},
|
||||||
"Content-Type": base.HeaderValue{"application/sdp"},
|
"Content-Type": base.HeaderValue{"application/sdp"},
|
||||||
},
|
},
|
||||||
Body: tracks.Write(false),
|
Body: tracks.Marshal(false),
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||||
@@ -1439,14 +1439,14 @@ func TestServerPublishUDPChangeConn(t *testing.T) {
|
|||||||
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"CSeq": base.HeaderValue{"2"},
|
"CSeq": base.HeaderValue{"2"},
|
||||||
"Transport": inTH.Write(),
|
"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)
|
||||||
|
|
||||||
var sx headers.Session
|
var sx headers.Session
|
||||||
err = sx.Read(res.Header["Session"])
|
err = sx.Unmarshal(res.Header["Session"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
res, err = writeReqReadRes(conn, br, base.Request{
|
res, err = writeReqReadRes(conn, br, base.Request{
|
||||||
|
@@ -141,7 +141,7 @@ func TestServerReadSetupPath(t *testing.T) {
|
|||||||
URL: mustParseURL(ca.url),
|
URL: mustParseURL(ca.url),
|
||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"CSeq": base.HeaderValue{"1"},
|
"CSeq": base.HeaderValue{"1"},
|
||||||
"Transport": th.Write(),
|
"Transport": th.Marshal(),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@@ -223,7 +223,7 @@ func TestServerReadSetupErrors(t *testing.T) {
|
|||||||
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"CSeq": base.HeaderValue{"1"},
|
"CSeq": base.HeaderValue{"1"},
|
||||||
"Transport": th.Write(),
|
"Transport": th.Marshal(),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -233,7 +233,7 @@ func TestServerReadSetupErrors(t *testing.T) {
|
|||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||||
|
|
||||||
var sx headers.Session
|
var sx headers.Session
|
||||||
err = sx.Read(res.Header["Session"])
|
err = sx.Unmarshal(res.Header["Session"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
th.InterleavedIDs = &[2]int{2, 3}
|
th.InterleavedIDs = &[2]int{2, 3}
|
||||||
|
|
||||||
@@ -242,7 +242,7 @@ func TestServerReadSetupErrors(t *testing.T) {
|
|||||||
URL: mustParseURL("rtsp://localhost:8554/test12stream/trackID=1"),
|
URL: mustParseURL("rtsp://localhost:8554/test12stream/trackID=1"),
|
||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"CSeq": base.HeaderValue{"2"},
|
"CSeq": base.HeaderValue{"2"},
|
||||||
"Transport": th.Write(),
|
"Transport": th.Marshal(),
|
||||||
"Session": base.HeaderValue{sx.Session},
|
"Session": base.HeaderValue{sx.Session},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
@@ -254,7 +254,7 @@ func TestServerReadSetupErrors(t *testing.T) {
|
|||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||||
|
|
||||||
var sx headers.Session
|
var sx headers.Session
|
||||||
err = sx.Read(res.Header["Session"])
|
err = sx.Unmarshal(res.Header["Session"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
th.InterleavedIDs = &[2]int{2, 3}
|
th.InterleavedIDs = &[2]int{2, 3}
|
||||||
|
|
||||||
@@ -263,7 +263,7 @@ func TestServerReadSetupErrors(t *testing.T) {
|
|||||||
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"CSeq": base.HeaderValue{"2"},
|
"CSeq": base.HeaderValue{"2"},
|
||||||
"Transport": th.Write(),
|
"Transport": th.Marshal(),
|
||||||
"Session": base.HeaderValue{sx.Session},
|
"Session": base.HeaderValue{sx.Session},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
@@ -429,14 +429,14 @@ func TestServerRead(t *testing.T) {
|
|||||||
URL: mustParseURL("rtsp://" + listenIP + ":8554/teststream/trackID=0"),
|
URL: mustParseURL("rtsp://" + listenIP + ":8554/teststream/trackID=0"),
|
||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"CSeq": base.HeaderValue{"1"},
|
"CSeq": base.HeaderValue{"1"},
|
||||||
"Transport": inTH.Write(),
|
"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)
|
||||||
|
|
||||||
var th headers.Transport
|
var th headers.Transport
|
||||||
err = th.Read(res.Header["Transport"])
|
err = th.Unmarshal(res.Header["Transport"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
var l1 net.PacketConn
|
var l1 net.PacketConn
|
||||||
@@ -495,7 +495,7 @@ func TestServerRead(t *testing.T) {
|
|||||||
<-sessionOpened
|
<-sessionOpened
|
||||||
|
|
||||||
var sx headers.Session
|
var sx headers.Session
|
||||||
err = sx.Read(res.Header["Session"])
|
err = sx.Unmarshal(res.Header["Session"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
res, err = writeReqReadRes(conn, br, base.Request{
|
res, err = writeReqReadRes(conn, br, base.Request{
|
||||||
@@ -585,7 +585,7 @@ func TestServerRead(t *testing.T) {
|
|||||||
byts, _ := base.InterleavedFrame{
|
byts, _ := base.InterleavedFrame{
|
||||||
Channel: 5,
|
Channel: 5,
|
||||||
Payload: testRTCPPacketMarshaled,
|
Payload: testRTCPPacketMarshaled,
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
<-framesReceived
|
<-framesReceived
|
||||||
@@ -692,7 +692,7 @@ func TestServerReadRTCPReport(t *testing.T) {
|
|||||||
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"CSeq": base.HeaderValue{"1"},
|
"CSeq": base.HeaderValue{"1"},
|
||||||
"Transport": inTH.Write(),
|
"Transport": inTH.Marshal(),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@@ -707,7 +707,7 @@ func TestServerReadRTCPReport(t *testing.T) {
|
|||||||
defer l2.Close()
|
defer l2.Close()
|
||||||
|
|
||||||
var sx headers.Session
|
var sx headers.Session
|
||||||
err = sx.Read(res.Header["Session"])
|
err = sx.Unmarshal(res.Header["Session"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
res, err = writeReqReadRes(conn, br, base.Request{
|
res, err = writeReqReadRes(conn, br, base.Request{
|
||||||
@@ -879,14 +879,14 @@ func TestServerReadTCPResponseBeforeFrames(t *testing.T) {
|
|||||||
return &v
|
return &v
|
||||||
}(),
|
}(),
|
||||||
InterleavedIDs: &[2]int{0, 1},
|
InterleavedIDs: &[2]int{0, 1},
|
||||||
}.Write(),
|
}.Marshal(),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||||
|
|
||||||
var sx headers.Session
|
var sx headers.Session
|
||||||
err = sx.Read(res.Header["Session"])
|
err = sx.Unmarshal(res.Header["Session"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
res, err = writeReqReadRes(conn, br, base.Request{
|
res, err = writeReqReadRes(conn, br, base.Request{
|
||||||
@@ -958,14 +958,14 @@ func TestServerReadPlayPlay(t *testing.T) {
|
|||||||
return &v
|
return &v
|
||||||
}(),
|
}(),
|
||||||
ClientPorts: &[2]int{30450, 30451},
|
ClientPorts: &[2]int{30450, 30451},
|
||||||
}.Write(),
|
}.Marshal(),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||||
|
|
||||||
var sx headers.Session
|
var sx headers.Session
|
||||||
err = sx.Read(res.Header["Session"])
|
err = sx.Unmarshal(res.Header["Session"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
res, err = writeReqReadRes(conn, br, base.Request{
|
res, err = writeReqReadRes(conn, br, base.Request{
|
||||||
@@ -1074,14 +1074,14 @@ func TestServerReadPlayPausePlay(t *testing.T) {
|
|||||||
return &v
|
return &v
|
||||||
}(),
|
}(),
|
||||||
InterleavedIDs: &[2]int{0, 1},
|
InterleavedIDs: &[2]int{0, 1},
|
||||||
}.Write(),
|
}.Marshal(),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||||
|
|
||||||
var sx headers.Session
|
var sx headers.Session
|
||||||
err = sx.Read(res.Header["Session"])
|
err = sx.Unmarshal(res.Header["Session"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
res, err = writeReqReadRes(conn, br, base.Request{
|
res, err = writeReqReadRes(conn, br, base.Request{
|
||||||
@@ -1197,14 +1197,14 @@ func TestServerReadPlayPausePause(t *testing.T) {
|
|||||||
return &v
|
return &v
|
||||||
}(),
|
}(),
|
||||||
InterleavedIDs: &[2]int{0, 1},
|
InterleavedIDs: &[2]int{0, 1},
|
||||||
}.Write(),
|
}.Marshal(),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||||
|
|
||||||
var sx headers.Session
|
var sx headers.Session
|
||||||
err = sx.Read(res.Header["Session"])
|
err = sx.Unmarshal(res.Header["Session"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
res, err = writeReqReadRes(conn, br, base.Request{
|
res, err = writeReqReadRes(conn, br, base.Request{
|
||||||
@@ -1225,7 +1225,7 @@ func TestServerReadPlayPausePause(t *testing.T) {
|
|||||||
"CSeq": base.HeaderValue{"2"},
|
"CSeq": base.HeaderValue{"2"},
|
||||||
"Session": base.HeaderValue{sx.Session},
|
"Session": base.HeaderValue{sx.Session},
|
||||||
},
|
},
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -1240,7 +1240,7 @@ func TestServerReadPlayPausePause(t *testing.T) {
|
|||||||
"CSeq": base.HeaderValue{"2"},
|
"CSeq": base.HeaderValue{"2"},
|
||||||
"Session": base.HeaderValue{sx.Session},
|
"Session": base.HeaderValue{sx.Session},
|
||||||
},
|
},
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -1338,14 +1338,14 @@ func TestServerReadTimeout(t *testing.T) {
|
|||||||
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"CSeq": base.HeaderValue{"1"},
|
"CSeq": base.HeaderValue{"1"},
|
||||||
"Transport": inTH.Write(),
|
"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)
|
||||||
|
|
||||||
var sx headers.Session
|
var sx headers.Session
|
||||||
err = sx.Read(res.Header["Session"])
|
err = sx.Unmarshal(res.Header["Session"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
res, err = writeReqReadRes(conn, br, base.Request{
|
res, err = writeReqReadRes(conn, br, base.Request{
|
||||||
@@ -1449,14 +1449,14 @@ func TestServerReadWithoutTeardown(t *testing.T) {
|
|||||||
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"CSeq": base.HeaderValue{"1"},
|
"CSeq": base.HeaderValue{"1"},
|
||||||
"Transport": inTH.Write(),
|
"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)
|
||||||
|
|
||||||
var sx headers.Session
|
var sx headers.Session
|
||||||
err = sx.Read(res.Header["Session"])
|
err = sx.Unmarshal(res.Header["Session"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
res, err = writeReqReadRes(conn, br, base.Request{
|
res, err = writeReqReadRes(conn, br, base.Request{
|
||||||
@@ -1541,14 +1541,14 @@ func TestServerReadUDPChangeConn(t *testing.T) {
|
|||||||
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"CSeq": base.HeaderValue{"1"},
|
"CSeq": base.HeaderValue{"1"},
|
||||||
"Transport": inTH.Write(),
|
"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)
|
||||||
|
|
||||||
var sx headers.Session
|
var sx headers.Session
|
||||||
err = sx.Read(res.Header["Session"])
|
err = sx.Unmarshal(res.Header["Session"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
res, err = writeReqReadRes(conn, br, base.Request{
|
res, err = writeReqReadRes(conn, br, base.Request{
|
||||||
@@ -1649,14 +1649,14 @@ func TestServerReadPartialTracks(t *testing.T) {
|
|||||||
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=1"),
|
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=1"),
|
||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"CSeq": base.HeaderValue{"1"},
|
"CSeq": base.HeaderValue{"1"},
|
||||||
"Transport": inTH.Write(),
|
"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)
|
||||||
|
|
||||||
var sx headers.Session
|
var sx headers.Session
|
||||||
err = sx.Read(res.Header["Session"])
|
err = sx.Unmarshal(res.Header["Session"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
res, err = writeReqReadRes(conn, br, base.Request{
|
res, err = writeReqReadRes(conn, br, base.Request{
|
||||||
@@ -1704,14 +1704,14 @@ func TestServerReadAdditionalInfos(t *testing.T) {
|
|||||||
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"CSeq": base.HeaderValue{"1"},
|
"CSeq": base.HeaderValue{"1"},
|
||||||
"Transport": inTH.Write(),
|
"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)
|
||||||
|
|
||||||
var th headers.Transport
|
var th headers.Transport
|
||||||
err = th.Read(res.Header["Transport"])
|
err = th.Unmarshal(res.Header["Transport"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
ssrcs[0] = th.SSRC
|
ssrcs[0] = th.SSRC
|
||||||
|
|
||||||
@@ -1729,7 +1729,7 @@ func TestServerReadAdditionalInfos(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var sx headers.Session
|
var sx headers.Session
|
||||||
err = sx.Read(res.Header["Session"])
|
err = sx.Unmarshal(res.Header["Session"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
res, err = writeReqReadRes(conn, br, base.Request{
|
res, err = writeReqReadRes(conn, br, base.Request{
|
||||||
@@ -1737,7 +1737,7 @@ func TestServerReadAdditionalInfos(t *testing.T) {
|
|||||||
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=1"),
|
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=1"),
|
||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"CSeq": base.HeaderValue{"2"},
|
"CSeq": base.HeaderValue{"2"},
|
||||||
"Transport": inTH.Write(),
|
"Transport": inTH.Marshal(),
|
||||||
"Session": base.HeaderValue{sx.Session},
|
"Session": base.HeaderValue{sx.Session},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
@@ -1745,7 +1745,7 @@ func TestServerReadAdditionalInfos(t *testing.T) {
|
|||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||||
|
|
||||||
th = headers.Transport{}
|
th = headers.Transport{}
|
||||||
err = th.Read(res.Header["Transport"])
|
err = th.Unmarshal(res.Header["Transport"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
ssrcs[1] = th.SSRC
|
ssrcs[1] = th.SSRC
|
||||||
|
|
||||||
@@ -1761,7 +1761,7 @@ func TestServerReadAdditionalInfos(t *testing.T) {
|
|||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||||
|
|
||||||
var ri headers.RTPInfo
|
var ri headers.RTPInfo
|
||||||
err = ri.Read(res.Header["RTP-Info"])
|
err = ri.Unmarshal(res.Header["RTP-Info"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
return &ri, ssrcs
|
return &ri, ssrcs
|
||||||
@@ -1936,14 +1936,14 @@ func TestServerReadErrorUDPSamePorts(t *testing.T) {
|
|||||||
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"CSeq": base.HeaderValue{"1"},
|
"CSeq": base.HeaderValue{"1"},
|
||||||
"Transport": inTH.Write(),
|
"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)
|
||||||
|
|
||||||
var sx headers.Session
|
var sx headers.Session
|
||||||
err = sx.Read(res.Header["Session"])
|
err = sx.Unmarshal(res.Header["Session"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
res, err = writeReqReadRes(conn, br, base.Request{
|
res, err = writeReqReadRes(conn, br, base.Request{
|
||||||
@@ -1982,7 +1982,7 @@ func TestServerReadErrorUDPSamePorts(t *testing.T) {
|
|||||||
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
URL: mustParseURL("rtsp://localhost:8554/teststream/trackID=0"),
|
||||||
Header: base.Header{
|
Header: base.Header{
|
||||||
"CSeq": base.HeaderValue{"1"},
|
"CSeq": base.HeaderValue{"1"},
|
||||||
"Transport": inTH.Write(),
|
"Transport": inTH.Marshal(),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
@@ -71,7 +71,7 @@ func writeReqReadRes(conn net.Conn,
|
|||||||
br *bufio.Reader,
|
br *bufio.Reader,
|
||||||
req base.Request,
|
req base.Request,
|
||||||
) (*base.Response, error) {
|
) (*base.Response, error) {
|
||||||
byts, _ := req.Write()
|
byts, _ := req.Marshal()
|
||||||
_, err := conn.Write(byts)
|
_, err := conn.Write(byts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -406,14 +406,14 @@ func TestServerErrorTCPTwoConnOneSession(t *testing.T) {
|
|||||||
return &v
|
return &v
|
||||||
}(),
|
}(),
|
||||||
InterleavedIDs: &[2]int{0, 1},
|
InterleavedIDs: &[2]int{0, 1},
|
||||||
}.Write(),
|
}.Marshal(),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||||
|
|
||||||
var sx headers.Session
|
var sx headers.Session
|
||||||
err = sx.Read(res.Header["Session"])
|
err = sx.Unmarshal(res.Header["Session"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
res, err = writeReqReadRes(conn1, br1, base.Request{
|
res, err = writeReqReadRes(conn1, br1, base.Request{
|
||||||
@@ -448,7 +448,7 @@ func TestServerErrorTCPTwoConnOneSession(t *testing.T) {
|
|||||||
return &v
|
return &v
|
||||||
}(),
|
}(),
|
||||||
InterleavedIDs: &[2]int{0, 1},
|
InterleavedIDs: &[2]int{0, 1},
|
||||||
}.Write(),
|
}.Marshal(),
|
||||||
"Session": base.HeaderValue{sx.Session},
|
"Session": base.HeaderValue{sx.Session},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
@@ -512,14 +512,14 @@ func TestServerErrorTCPOneConnTwoSessions(t *testing.T) {
|
|||||||
return &v
|
return &v
|
||||||
}(),
|
}(),
|
||||||
InterleavedIDs: &[2]int{0, 1},
|
InterleavedIDs: &[2]int{0, 1},
|
||||||
}.Write(),
|
}.Marshal(),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||||
|
|
||||||
var sx headers.Session
|
var sx headers.Session
|
||||||
err = sx.Read(res.Header["Session"])
|
err = sx.Unmarshal(res.Header["Session"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
res, err = writeReqReadRes(conn, br, base.Request{
|
res, err = writeReqReadRes(conn, br, base.Request{
|
||||||
@@ -549,7 +549,7 @@ func TestServerErrorTCPOneConnTwoSessions(t *testing.T) {
|
|||||||
return &v
|
return &v
|
||||||
}(),
|
}(),
|
||||||
InterleavedIDs: &[2]int{0, 1},
|
InterleavedIDs: &[2]int{0, 1},
|
||||||
}.Write(),
|
}.Marshal(),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@@ -717,9 +717,9 @@ func TestServerSessionClose(t *testing.T) {
|
|||||||
return &v
|
return &v
|
||||||
}(),
|
}(),
|
||||||
InterleavedIDs: &[2]int{0, 1},
|
InterleavedIDs: &[2]int{0, 1},
|
||||||
}.Write(),
|
}.Marshal(),
|
||||||
},
|
},
|
||||||
}.Write()
|
}.Marshal()
|
||||||
_, err = conn.Write(byts)
|
_, err = conn.Write(byts)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
@@ -786,7 +786,7 @@ func TestServerSessionAutoClose(t *testing.T) {
|
|||||||
return &v
|
return &v
|
||||||
}(),
|
}(),
|
||||||
InterleavedIDs: &[2]int{0, 1},
|
InterleavedIDs: &[2]int{0, 1},
|
||||||
}.Write(),
|
}.Marshal(),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@@ -873,7 +873,7 @@ func TestServerErrorInvalidPath(t *testing.T) {
|
|||||||
"CSeq": base.HeaderValue{"1"},
|
"CSeq": base.HeaderValue{"1"},
|
||||||
"Content-Type": base.HeaderValue{"application/sdp"},
|
"Content-Type": base.HeaderValue{"application/sdp"},
|
||||||
},
|
},
|
||||||
Body: tracks.Write(false),
|
Body: tracks.Marshal(false),
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||||
@@ -901,14 +901,14 @@ func TestServerErrorInvalidPath(t *testing.T) {
|
|||||||
return &v
|
return &v
|
||||||
}(),
|
}(),
|
||||||
InterleavedIDs: &[2]int{0, 1},
|
InterleavedIDs: &[2]int{0, 1},
|
||||||
}.Write(),
|
}.Marshal(),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, base.StatusOK, res.StatusCode)
|
require.Equal(t, base.StatusOK, res.StatusCode)
|
||||||
|
|
||||||
var sx headers.Session
|
var sx headers.Session
|
||||||
err = sx.Read(res.Header["Session"])
|
err = sx.Unmarshal(res.Header["Session"])
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
sxID = sx.Session
|
sxID = sx.Session
|
||||||
@@ -989,7 +989,7 @@ func TestServerAuth(t *testing.T) {
|
|||||||
"CSeq": base.HeaderValue{"1"},
|
"CSeq": base.HeaderValue{"1"},
|
||||||
"Content-Type": base.HeaderValue{"application/sdp"},
|
"Content-Type": base.HeaderValue{"application/sdp"},
|
||||||
},
|
},
|
||||||
Body: Tracks{track}.Write(false),
|
Body: Tracks{track}.Marshal(false),
|
||||||
}
|
}
|
||||||
|
|
||||||
res, err := writeReqReadRes(conn, br, req)
|
res, err := writeReqReadRes(conn, br, req)
|
||||||
|
@@ -428,7 +428,7 @@ func (sc *ServerConn) handleRequest(req *base.Request) (*base.Response, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if stream != nil {
|
if stream != nil {
|
||||||
res.Body = stream.Tracks().Write(multicast)
|
res.Body = stream.Tracks().Marshal(multicast)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -543,7 +543,7 @@ func (sc *ServerConn) handleRequestOuter(req *base.Request) error {
|
|||||||
h.OnResponse(sc, res)
|
h.OnResponse(sc, res)
|
||||||
}
|
}
|
||||||
|
|
||||||
byts, _ := res.Write()
|
byts, _ := res.Marshal()
|
||||||
|
|
||||||
sc.conn.SetWriteDeadline(time.Now().Add(sc.s.WriteTimeout))
|
sc.conn.SetWriteDeadline(time.Now().Add(sc.s.WriteTimeout))
|
||||||
sc.conn.Write(byts)
|
sc.conn.Write(byts)
|
||||||
|
@@ -362,7 +362,7 @@ func (ss *ServerSession) runInner() error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}(),
|
}(),
|
||||||
}.Write()
|
}.Marshal()
|
||||||
}
|
}
|
||||||
|
|
||||||
// after a TEARDOWN, session must be unpaired with the connection
|
// after a TEARDOWN, session must be unpaired with the connection
|
||||||
@@ -501,7 +501,8 @@ func (ss *ServerSession) handleRequest(sc *ServerConn, req *base.Request) (*base
|
|||||||
}, liberrors.ErrServerContentTypeUnsupported{CT: ct}
|
}, liberrors.ErrServerContentTypeUnsupported{CT: ct}
|
||||||
}
|
}
|
||||||
|
|
||||||
tracks, _, err := ReadTracks(req.Body, false)
|
var tracks Tracks
|
||||||
|
_, err = tracks.Unmarshal(req.Body, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return &base.Response{
|
return &base.Response{
|
||||||
StatusCode: base.StatusBadRequest,
|
StatusCode: base.StatusBadRequest,
|
||||||
@@ -568,7 +569,7 @@ func (ss *ServerSession) handleRequest(sc *ServerConn, req *base.Request) (*base
|
|||||||
}
|
}
|
||||||
|
|
||||||
var inTH headers.Transport
|
var inTH headers.Transport
|
||||||
err = inTH.Read(req.Header["Transport"])
|
err = inTH.Unmarshal(req.Header["Transport"])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return &base.Response{
|
return &base.Response{
|
||||||
StatusCode: base.StatusBadRequest,
|
StatusCode: base.StatusBadRequest,
|
||||||
@@ -783,7 +784,7 @@ func (ss *ServerSession) handleRequest(sc *ServerConn, req *base.Request) (*base
|
|||||||
|
|
||||||
ss.setuppedTracks[trackID] = sst
|
ss.setuppedTracks[trackID] = sst
|
||||||
|
|
||||||
res.Header["Transport"] = th.Write()
|
res.Header["Transport"] = th.Marshal()
|
||||||
|
|
||||||
return res, err
|
return res, err
|
||||||
|
|
||||||
@@ -910,7 +911,7 @@ func (ss *ServerSession) handleRequest(sc *ServerConn, req *base.Request) (*base
|
|||||||
if res.Header == nil {
|
if res.Header == nil {
|
||||||
res.Header = make(base.Header)
|
res.Header = make(base.Header)
|
||||||
}
|
}
|
||||||
res.Header["RTP-Info"] = ri.Write()
|
res.Header["RTP-Info"] = ri.Marshal()
|
||||||
}
|
}
|
||||||
|
|
||||||
return res, err
|
return res, err
|
||||||
@@ -1182,14 +1183,14 @@ func (ss *ServerSession) runWriter() {
|
|||||||
if isRTP {
|
if isRTP {
|
||||||
f := rtpFrames[trackID]
|
f := rtpFrames[trackID]
|
||||||
f.Payload = payload
|
f.Payload = payload
|
||||||
n, _ := f.WriteTo(buf)
|
n, _ := f.MarshalTo(buf)
|
||||||
|
|
||||||
ss.tcpConn.conn.SetWriteDeadline(time.Now().Add(ss.s.WriteTimeout))
|
ss.tcpConn.conn.SetWriteDeadline(time.Now().Add(ss.s.WriteTimeout))
|
||||||
ss.tcpConn.conn.Write(buf[:n])
|
ss.tcpConn.conn.Write(buf[:n])
|
||||||
} else {
|
} else {
|
||||||
f := rtcpFrames[trackID]
|
f := rtcpFrames[trackID]
|
||||||
f.Payload = payload
|
f.Payload = payload
|
||||||
n, _ := f.WriteTo(buf)
|
n, _ := f.MarshalTo(buf)
|
||||||
|
|
||||||
ss.tcpConn.conn.SetWriteDeadline(time.Now().Add(ss.s.WriteTimeout))
|
ss.tcpConn.conn.SetWriteDeadline(time.Now().Add(ss.s.WriteTimeout))
|
||||||
ss.tcpConn.conn.Write(buf[:n])
|
ss.tcpConn.conn.Write(buf[:n])
|
||||||
|
@@ -840,7 +840,8 @@ func TestTrackURL(t *testing.T) {
|
|||||||
},
|
},
|
||||||
} {
|
} {
|
||||||
t.Run(ca.name, func(t *testing.T) {
|
t.Run(ca.name, func(t *testing.T) {
|
||||||
tracks, _, err := ReadTracks(ca.sdp, false)
|
var tracks Tracks
|
||||||
|
_, err := tracks.Unmarshal(ca.sdp, false)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
ur, err := tracks[0].url(ca.baseURL)
|
ur, err := tracks[0].url(ca.baseURL)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
23
tracks.go
23
tracks.go
@@ -13,16 +13,15 @@ import (
|
|||||||
// Tracks is a list of tracks.
|
// Tracks is a list of tracks.
|
||||||
type Tracks []Track
|
type Tracks []Track
|
||||||
|
|
||||||
// ReadTracks decodes tracks from the SDP format.
|
// Unmarshal decodes tracks from the SDP format. It returns the decoded SDP.
|
||||||
// It returns the tracks and the decoded SDP.
|
func (ts *Tracks) Unmarshal(byts []byte, skipGenericTracksWithoutClockRate bool) (*sdp.SessionDescription, error) {
|
||||||
func ReadTracks(byts []byte, skipGenericTracksWithoutClockRate bool) (Tracks, *sdp.SessionDescription, error) {
|
|
||||||
var sd sdp.SessionDescription
|
var sd sdp.SessionDescription
|
||||||
err := sd.Unmarshal(byts)
|
err := sd.Unmarshal(byts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var tracks Tracks //nolint:prealloc
|
*ts = nil
|
||||||
|
|
||||||
for i, md := range sd.MediaDescriptions {
|
for i, md := range sd.MediaDescriptions {
|
||||||
t, err := newTrackFromMediaDescription(md)
|
t, err := newTrackFromMediaDescription(md)
|
||||||
@@ -31,17 +30,17 @@ func ReadTracks(byts []byte, skipGenericTracksWithoutClockRate bool) (Tracks, *s
|
|||||||
strings.HasPrefix(err.Error(), "unable to get clock rate") {
|
strings.HasPrefix(err.Error(), "unable to get clock rate") {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
return nil, nil, fmt.Errorf("unable to parse track %d: %s", i+1, err)
|
return nil, fmt.Errorf("unable to parse track %d: %s", i+1, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
tracks = append(tracks, t)
|
*ts = append(*ts, t)
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(tracks) == 0 {
|
if *ts == nil {
|
||||||
return nil, nil, fmt.Errorf("no valid tracks found")
|
return nil, fmt.Errorf("no valid tracks found")
|
||||||
}
|
}
|
||||||
|
|
||||||
return tracks, &sd, nil
|
return &sd, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ts Tracks) clone() Tracks {
|
func (ts Tracks) clone() Tracks {
|
||||||
@@ -58,8 +57,8 @@ func (ts Tracks) setControls() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write encodes tracks in the SDP format.
|
// Marshal encodes tracks in the SDP format.
|
||||||
func (ts Tracks) Write(multicast bool) []byte {
|
func (ts Tracks) Marshal(multicast bool) []byte {
|
||||||
address := "0.0.0.0"
|
address := "0.0.0.0"
|
||||||
if multicast {
|
if multicast {
|
||||||
address = "224.1.0.0"
|
address = "224.1.0.0"
|
||||||
|
@@ -35,7 +35,8 @@ func TestTracksReadErrors(t *testing.T) {
|
|||||||
},
|
},
|
||||||
} {
|
} {
|
||||||
t.Run(ca.name, func(t *testing.T) {
|
t.Run(ca.name, func(t *testing.T) {
|
||||||
_, _, err := ReadTracks(ca.sdp, false)
|
var tracks Tracks
|
||||||
|
_, err := tracks.Unmarshal(ca.sdp, false)
|
||||||
require.EqualError(t, err, ca.err)
|
require.EqualError(t, err, ca.err)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -67,7 +68,8 @@ func TestTracksReadSkipGenericTracksWithoutClockRate(t *testing.T) {
|
|||||||
"m=application 42508 RTP/AVP 107\r\n" +
|
"m=application 42508 RTP/AVP 107\r\n" +
|
||||||
"b=AS:8\r\n")
|
"b=AS:8\r\n")
|
||||||
|
|
||||||
tracks, _, err := ReadTracks(sdp, true)
|
var tracks Tracks
|
||||||
|
_, err := tracks.Unmarshal(sdp, true)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, Tracks{
|
require.Equal(t, Tracks{
|
||||||
&TrackH264{
|
&TrackH264{
|
||||||
|
Reference in New Issue
Block a user