a=fmtp:99 profile-level-id=42C01E;sprop-parameter-sets=Z0LAHtqHgUSagwCCg8IBCoA=,aM48gA==;packetization-mode=0;max-br=974
时间: 2024-09-04 18:03:40 浏览: 72
这个字符串是在 SDP 中用来描述音频媒体的,特别是 RTP (Real-Time Transport Protocol) 和 RTCP (Real-Time Control Protocol) 的一个.fmtp (format-specific parameter) 段。这里是一个例子:
`a=fmtp:99 profile-level-id=42C01E;sprop-parameter-sets=Z0LAHtqHgUSagwCCg8IBCoA=,aM48gA==;packetization-mode=0;max-br=974`
- `fmtp:99`: 这部分指定了 RTP 使用的是第 99 个编解码器类型,可能是某种音频编解码标准。
- `profile-level-id=42C01E`: 定义了音频的具体特性,像是高级别ID,这取决于特定的编解码标准。
- `sprop-parameter-sets`: 后面是一系列参数集,每个参数集用冒号分隔,这里是两个参数集合的值。这有助于设置加密或其他定制属性。
- `packetization-mode=0`: 设置了数据包化模式,0通常表示非分片模式。
- `max-br=974`: max-br (maximum bitrate) 表示音频的最大比特率,这里是 974 Kbps。
相关问题
sdp 中a=fmtp怎么添加sps和pps
在 SDP 中,可以使用 `a=fmtp` 属性来传递 H.264 编码器的参数,其中包括 SPS 和 PPS 信息。具体来说,`a=fmtp` 属性中会包含几个参数,例如 `profile-level-id`、`packetization-mode` 等,其中 `sprop-parameter-sets` 参数用于指定 SPS 和 PPS 的值。
下面是一个示例 SDP,其中包含了 SPS 和 PPS 信息:
```
v=0
o=- 0 0 IN IP4 127.0.0.1
s=H264 Video
t=0 0
m=video 5000 RTP/AVP 96
c=IN IP4 127.0.0.1
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=64001f;sprop-parameter-sets=Z2QAFKzZQLQ9ucgCAIA=,aOvssiw=
```
在上述 SDP 中,`a=fmtp:96` 表示 H.264 编码器的参数,其中包含了 SPS 和 PPS 信息。具体来说,`sprop-parameter-sets` 参数的值为 `Z2QAFKzZQLQ9ucgCAIA=,aOvssiw=`,这就是 SPS 和 PPS 的值。注意,这里的 SPS 和 PPS 是经过 base64 编码后的值,接收端需要先将其进行解码,才能获取原始的 SPS 和 PPS。
需要注意的是,添加 SPS 和 PPS 信息的方式可能因应用场景而异,具体的实现方式需要根据实际情况进行确定。
基于GBT28181:SIP协议组件开发-----------第四篇SIP事件处理流程eXosip2实现
在基于GBT28181的SIP协议组件开发中,SIP事件处理是非常重要的一环。本文将介绍如何使用eXosip2实现SIP事件处理流程。
eXosip2是一个基于SIP协议的开源软件,它提供了一个简单易用的SIP协议栈,并且支持SIP的基本功能,例如注册、呼叫、媒体处理等。在eXosip2中,SIP事件处理是通过回调函数实现的。
下面是eXosip2的SIP事件处理流程:
1. 初始化eXosip2
在使用eXosip2之前,需要先进行初始化操作。可以通过以下代码实现:
```
osip_mutex_init ();
osip_cond_init ();
osip_udp_init (0);
osip_tcp_init (0);
osip_tls_init (0);
eXosip_init ();
```
2. 注册SIP
在eXosip2中,注册SIP是通过eXosip_register_build()函数实现的。该函数会生成一个REGISTER请求,并且通过eXosip_register_send()函数发送该请求。在注册成功后,eXosip2会调用注册成功的回调函数。
以下是注册SIP的示例代码:
```
char *server_ip = "192.168.1.100";
char *username = "test";
char *password = "123456";
char *realm = "example.com";
osip_message_t *reg = NULL;
int reg_id = -1;
reg_id = eXosip_register_build_request (reg, "REGISTER", server_ip, NULL, NULL);
osip_message_set_supported_header (reg, "path");
osip_message_set_supported_header (reg, "eventlist");
osip_message_set_supported_header (reg, "gruu");
osip_message_set_supported_header (reg, "sip.instance");
eXosip_lock ();
eXosip_register_send_request (reg_id, reg);
eXosip_unlock ();
osip_message_free (reg);
```
3. 处理SIP事件
在eXosip2中,SIP事件是通过回调函数处理的。例如,当收到INVITE请求时,eXosip2会调用INVITE请求的回调函数。以下是INVITE请求的回调函数示例代码:
```
int on_invite_recv (osip_event_t *evt)
{
osip_message_t *invite = NULL;
int call_id = -1;
char *remote_ip = NULL;
int remote_port = -1;
char *local_sdp = NULL;
call_id = eXosip_event_get_id (evt);
remote_ip = eXosip_event_get_remote_ip (evt);
remote_port = eXosip_event_get_remote_port (evt);
osip_message_init (&invite);
osip_message_parse (invite, eXosip_event_get_request (evt));
local_sdp = "v=0\r\no=root 1 1 IN IP4 192.168.1.100\r\ns=session\r\nc=IN IP4 192.168.1.100\r\nt=0 0\r\nm=audio 7078 RTP/AVP 0 8 101\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:101 telephone-event/8000\r\na=fmtp:101 0-15\r\n";
eXosip_lock ();
eXosip_call_build_answer (call_id, 200, &invite);
eXosip_call_send_answer (call_id, local_sdp, strlen (local_sdp));
eXosip_unlock ();
osip_message_free (invite);
return OSIP_SUCCESS;
}
```
在上述示例代码中,当收到INVITE请求时,通过eXosip_event_get_request()函数获取INVITE请求,并通过osip_message_parse()函数解析该请求。然后,生成一个200 OK的响应,并通过eXosip_call_send_answer()函数发送该响应。
4. 清理eXosip2
在使用完eXosip2后,需要对它进行清理操作。可以通过以下代码实现:
```
eXosip_quit ();
osip_tls_deinit ();
osip_tcp_deinit ();
osip_udp_deinit ();
osip_cond_deinit ();
osip_mutex_deinit ();
```
总结
通过以上介绍,我们了解了如何使用eXosip2实现SIP事件处理流程。在实际开发中,可以根据需要对eXosip2进行定制,以满足特定的业务需求。
阅读全文