SRTP
概述
libsrtp是一个实现SRTP协议(Secure Real-time Transport Protocol,安全实时传输协议)的库。RTP 是实时传输协议,它是由 RFC 3550 定义的实时数据传输( 例如电话。音频和视频)的标准。 安全 RTP ( SRTP ) 是一个RT P配置文件,用于为RTP数据和对RTP报头和负载的认证提供机密性。 SRTP是在 RFC 3711 中定义的,它是在IETF的音频/视频传输( AVT ) 工作组中定义的。 这里库支持SRTP的所有强制功能,但并非所有可选功能。 有关详细信息,请参阅支持的功能部分。
示例代码
示例提供了libSRTP的简要使用流程,主要代码如下:
srtp_t session;
srtp_policy_t policy;
// 加密秘钥
uint8_t key[30] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D};
// 初始化SRTP库
srtp_init();
memset(&policy, 0x0, sizeof(srtp_policy_t));
// 配置rtp和rtcp的默认配置参数
srtp_crypto_policy_set_rtp_default(&policy.rtp);
srtp_crypto_policy_set_rtcp_default(&policy.rtcp);
// 配置源和秘钥等
policy.ssrc = ssrc;
policy.key = key;
policy.next = NULL;
// 分配srtp上下文,并根据policy初始化相关资源
srtp_create(&session, &policy);
while (1) {
char rtp_buffer[2048];
unsigned len;
// 获取一包rtp原始数据
len = get_rtp_packet(rtp_buffer);
// 加密rtp包
srtp_protect(session, rtp_buffer, &len);
// 发送加密后的rtp包
send_srtp_packet(rtp_buffer, len);
}