2. getRouterRtpCapabilities
<h5>简要描述</h5>
<ul>
<li>与SFU服务器建立连接以后,第一条发送消息就是请求RTP路由器能力信息</li>
<li>通过返回的RTP能力信息建立mediasoup::device信息</li>
</ul>
<h5>请求方式</h5>
<ul>
<li>Websocket.Send </li>
</ul>
<h5>参数</h5>
<p><a href="https://www.showdoc.com.cn/1591639269927039/7912937086999827" title="通用协议部分点击这里查看">通用协议部分点击这里查看</a></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">必选</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">(空消息)</td>
<td style="text-align: left;"></td>
<td style="text-align: left;"></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<h5>请求示例</h5>
<pre><code>{
"request": true,
"id": 8062875,
"method": "getRouterRtpCapabilities",
"data": {}
}</code></pre>
<h5>返回示例</h5>
<pre><code>{
"codecs": [
{
"channels": 2,
"clockRate": 48000,
"kind": "audio",
"mimeType": "audio/opus",
"parameters": {},
"preferredPayloadType": 100,
"rtcpFeedback": [
{
"parameter": "",
"type": "transport-cc"
}
]
},
{
"clockRate": 90000,
"kind": "video",
"mimeType": "video/VP8",
"parameters": {
"x-google-start-bitrate": 1000
},
"preferredPayloadType": 101,
"rtcpFeedback": [
{
"parameter": "",
"type": "nack"
},
{
"parameter": "pli",
"type": "nack"
},
{
"parameter": "fir",
"type": "ccm"
},
{
"parameter": "",
"type": "goog-remb"
},
{
"parameter": "",
"type": "transport-cc"
}
]
},
{
"clockRate": 90000,
"kind": "video",
"mimeType": "video/rtx",
"parameters": {
"apt": 101
},
"preferredPayloadType": 102,
"rtcpFeedback": []
},
{
"clockRate": 90000,
"kind": "video",
"mimeType": "video/VP9",
"parameters": {
"profile-id": 2,
"x-google-start-bitrate": 1000
},
"preferredPayloadType": 103,
"rtcpFeedback": [
{
"parameter": "",
"type": "nack"
},
{
"parameter": "pli",
"type": "nack"
},
{
"parameter": "fir",
"type": "ccm"
},
{
"parameter": "",
"type": "goog-remb"
},
{
"parameter": "",
"type": "transport-cc"
}
]
},
{
"clockRate": 90000,
"kind": "video",
"mimeType": "video/rtx",
"parameters": {
"apt": 103
},
"preferredPayloadType": 104,
"rtcpFeedback": []
},
{
"clockRate": 90000,
"kind": "video",
"mimeType": "video/H264",
"parameters": {
"level-asymmetry-allowed": 1,
"packetization-mode": 1,
"profile-level-id": "4d0032",
"x-google-start-bitrate": 1000
},
"preferredPayloadType": 105,
"rtcpFeedback": [
{
"parameter": "",
"type": "nack"
},
{
"parameter": "pli",
"type": "nack"
},
{
"parameter": "fir",
"type": "ccm"
},
{
"parameter": "",
"type": "goog-remb"
},
{
"parameter": "",
"type": "transport-cc"
}
]
},
{
"clockRate": 90000,
"kind": "video",
"mimeType": "video/rtx",
"parameters": {
"apt": 105
},
"preferredPayloadType": 106,
"rtcpFeedback": []
},
{
"clockRate": 90000,
"kind": "video",
"mimeType": "video/H264",
"parameters": {
"level-asymmetry-allowed": 1,
"packetization-mode": 1,
"profile-level-id": "42e01f",
"x-google-start-bitrate": 1000
},
"preferredPayloadType": 107,
"rtcpFeedback": [
{
"parameter": "",
"type": "nack"
},
{
"parameter": "pli",
"type": "nack"
},
{
"parameter": "fir",
"type": "ccm"
},
{
"parameter": "",
"type": "goog-remb"
},
{
"parameter": "",
"type": "transport-cc"
}
]
},
{
"clockRate": 90000,
"kind": "video",
"mimeType": "video/rtx",
"parameters": {
"apt": 107
},
"preferredPayloadType": 108,
"rtcpFeedback": []
}
],
"headerExtensions": [
{
"direction": "sendrecv",
"kind": "audio",
"preferredEncrypt": false,
"preferredId": 1,
"uri": "urn:ietf:params:rtp-hdrext:sdes:mid"
},
{
"direction": "sendrecv",
"kind": "video",
"preferredEncrypt": false,
"preferredId": 1,
"uri": "urn:ietf:params:rtp-hdrext:sdes:mid"
},
{
"direction": "recvonly",
"kind": "video",
"preferredEncrypt": false,
"preferredId": 2,
"uri": "urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id"
},
{
"direction": "recvonly",
"kind": "video",
"preferredEncrypt": false,
"preferredId": 3,
"uri": "urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id"
},
{
"direction": "sendrecv",
"kind": "audio",
"preferredEncrypt": false,
"preferredId": 4,
"uri": "http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"
},
{
"direction": "sendrecv",
"kind": "video",
"preferredEncrypt": false,
"preferredId": 4,
"uri": "http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time"
},
{
"direction": "recvonly",
"kind": "audio",
"preferredEncrypt": false,
"preferredId": 5,
"uri": "http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01"
},
{
"direction": "sendrecv",
"kind": "video",
"preferredEncrypt": false,
"preferredId": 5,
"uri": "http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01"
},
{
"direction": "sendrecv",
"kind": "video",
"preferredEncrypt": false,
"preferredId": 6,
"uri": "http://tools.ietf.org/html/draft-ietf-avtext-framemarking-07"
},
{
"direction": "sendrecv",
"kind": "video",
"preferredEncrypt": false,
"preferredId": 7,
"uri": "urn:ietf:params:rtp-hdrext:framemarking"
},
{
"direction": "sendrecv",
"kind": "audio",
"preferredEncrypt": false,
"preferredId": 10,
"uri": "urn:ietf:params:rtp-hdrext:ssrc-audio-level"
},
{
"direction": "sendrecv",
"kind": "video",
"preferredEncrypt": false,
"preferredId": 11,
"uri": "urn:3gpp:video-orientation"
},
{
"direction": "sendrecv",
"kind": "video",
"preferredEncrypt": false,
"preferredId": 12,
"uri": "urn:ietf:params:rtp-hdrext:toffset"
},
{
"direction": "sendrecv",
"kind": "video",
"preferredEncrypt": false,
"preferredId": 13,
"uri": "http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time"
},
{
"direction": "sendrecv",
"kind": "audio",
"preferredEncrypt": false,
"preferredId": 13,
"uri": "http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time"
}
]
}</code></pre>
<h5>返回参数说明</h5>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">codecs</td>
<td style="text-align: left;">object</td>
<td>服务器支持的编码器相关信息</td>
</tr>
<tr>
<td style="text-align: left;">headerExtensions</td>
<td style="text-align: left;">object</td>
<td>服务器支持的扩展标头相关信息</td>
</tr>
</tbody>
</table>
<h5>备注</h5>
<p>nlohmann::json& msgJson;
mediasoupclient::PeerConnection::Options& option;
mediasoupclient::Device->Load(msgJson, &option);
通过返回的消息内容, 便可通过 pDevice->Load(msgJson, &option) 方法创建mediasoup的设备对象了。
当Devcice成功加载RTP能力数据以后,便知道了所有允许的媒体编解码器和其他设置的方式。</p>
<ul>
<li>更多返回错误代码请看首页的错误代码描述</li>
</ul>