创建offer 或者answer sdp时的RTCMediaConstraints 有一下可设定
| 属性名 | 类型 | 描述 |
|----------------------------------|--------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `kRTCMediaConstraintsMandatory` | `NSString` | 表示约束是强制的。如果无法满足这些约束,`RTCPeerConnection` 将不会生成 Offer 或 Answer。 |
| `kRTCMediaConstraintsOptional` | `NSString` | 表示约束是可选的。如果无法满足这些约束,`RTCPeerConnection` 仍然可以生成 Offer 或 Answer。 |
| `kRTCMediaConstraintsMinWidth` | `NSString` | 视频轨道的最小宽度,以像素为单位。例如,`640` 表示视频宽度至少为 640 像素。 |
| `kRTCMediaConstraintsMinHeight` | `NSString` | 视频轨道的最小高度,以像素为单位。例如,`480` 表示视频高度至少为 480 像素。 |
| `kRTCMediaConstraintsMinFrameRate`| `NSString` | 视频轨道的最小帧率,以每秒帧数为单位。例如,`30` 表示帧率至少为 30 FPS。 |
| `kRTCMediaConstraintsMaxWidth` | `NSString` | 视频轨道的最大宽度,以像素为单位。例如,`1280` 表示视频宽度最多为 1280 像素。 |
| `kRTCMediaConstraintsMaxHeight` | `NSString` | 视频轨道的最大高度,以像素为单位。例如,`720` 表示视频高度最多为 720 像素。 |
| `kRTCMediaConstraintsMaxFrameRate`| `NSString` | 视频轨道的最大帧率,以每秒帧数为单位。例如,`60` 表示帧率最多为 60 FPS。 |
| `kRTCMediaConstraintsOfferToReceiveAudio` | `NSString` | 控制是否希望从远端接收音频。值为 `true` 或 `false`,通常在创建 Offer 或 Answer 时使用。 |
| `kRTCMediaConstraintsOfferToReceiveVideo` | `NSString` | 控制是否希望从远端接收视频。值为 `true` 或 `false`,通常在创建 Offer 或 Answer 时使用。 |
| `kRTCMediaConstraintsVoiceActivityDetection`| `NSString`| 控制是否启用语音活动检测(VAD)。值为 `true` 或 `false`,用于在音频轨道中检测是否有语音活动。 |
| `kRTCMediaConstraintsIceRestart` | `NSString` | 控制是否强制 ICE 重新启动。值为 `true` 或 `false`,用于在现有连接上重新启动 ICE 代理。 |
| `kRTCMediaConstraintsUseRtpMux` | `NSString` | 控制是否使用 RTP 复用。值为 `true` 或 `false`,如果设置为 `true`,将 RTP 和 RTCP 流复用在同一连接上。 |
| `kRTCMediaConstraintsEnableDtlsSrtp` | `NSString` | 控制是否启用 DTLS-SRTP。值为 `true` 或 `false`,用于加密音视频流。 |
| `kRTCMediaConstraintsDtlsSrtpKeyAgreement` | `NSString`| 控制 DTLS-SRTP 的密钥协商,通常用于在两个端点之间的安全连接中。 |
sdp 内容描述
| 字段 | 描述 |
|-----------|----------------------------------------------------------------------------------------------|
| `v=0` | 版本号,目前 SDP 版本总是 0。 |
| `o=` | 会话的起源,包括用户名、会话ID、版本号、网络类型(IN)、地址类型(IP4/IP6)、IP 地址。 |
| `s=` | 会话名,通常为一个简短的描述。 |
| `t=` | 时间描述字段,表示会话的有效时间范围。通常为 `0 0`,表示会话持续有效。 |
| `a=group:`| BUNDLE 组,表示音频和视频流将通过同一个传输通道传输。 |
| `a=msid-semantic:` | 流和轨道的关联,表示媒体流标识符 (MSID) 的语义。 |
| `m=` | 媒体描述,包括媒体类型(audio、video)、传输端口、传输协议、编码列表。 |
| `c=` | 连接信息,指定媒体流传输的 IP 地址。通常为 `IN IP4 0.0.0.0` 表示先不指定具体 IP。 |
| `a=rtcp:` | RTCP(实时传输控制协议)连接信息,类似于 `c=` 字段。 |
| `a=ice-ufrag:` | ICE(交互式连接建立)的用户名片段,用于 NAT 穿越。 |
| `a=ice-pwd:` | ICE 的密码片段,用于与 `ice-ufrag` 一起进行 NAT 穿越的认证。 |
| `a=fingerprint:` | DTLS-SRTP 指纹,用于传输层安全性(TLS)连接的认证。 |
| `a=setup:` | 指定 DTLS 连接的角色,`actpass` 表示既可以是主动端也可以是被动端。 |
| `a=mid:` | 媒体标识符,用于标识每个媒体流。 |
| `a=extmap:` | RTP 头扩展,用于传输附加信息,如绝对发送时间、视频方向等。 |
| `a=sendrecv` | 媒体方向,`sendrecv` 表示同时发送和接收媒体。 |
| `a=rtcp-mux` | 表示使用单个 RTP 通道来传输 RTP 和 RTCP 数据包。 |
| `a=rtpmap:` | 映射 RTP payload 类型到编解码器及其参数。 |
| `a=fmtp:` | 编解码器的格式参数,如 `packetization-mode`、`profile-level-id` 等。 |
| `a=ssrc:` | 源标识符,用于标识媒体流的唯一性。 |
| `a=ssrc-group:` | SSRC 组,用于将多个 SSRC 组合在一起,例如 FID(前向误差隐藏)。 |