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