百科生活 投稿
关于【srtp是什么】:srtp是什么,今天小编给您分享一下,如果对您有所帮助别忘了关注本站哦。
- 内容导航:
- 1、srtp是什么
- 2、WebRTC音视频协议-SRTP
1、srtp是什么
SRTP,即安全实时传输协议(SecureReal-timeTransportProtocol),其是在实时传输协议(Real-timeTransportProtocol)基础上所定义的一个协议,旨在为单播和多播应用程序中的实时传输协议的数据提供加密、消息认证、完整性保证和重放保护。
在使用实时传输协议或实时传输控制协议时,使不使用安全实时传输协议或安全实时传输控制协议是可选的;但即使使用了安全实时传输协议或安全实时传输控制协议,所有它们提供的特性(如加密和认证)也都是可选的,这些特性可以被独立地使用或禁用。唯一的例外是在使用安全实时传输控制协议时,必须要用到其消息认证特性。
2、WebRTC音视频协议-SRTP
1 SRTP环境搭建
1.1 SRTP简介
STRP它是 思科的开源安全 RTP 库。RTP 是实时传输协议,一种用于传输实时数据(如电话、音频和视频)的 IETF 标准,由RFC 3550定义。SRTP用于为 RTP 数据提供机密性以及对 RTP 标头和有效负载进行身份验证。SRTP 是 IETF 标准,在RFC 3711中定义,该库支持 SRTP 的所有强制功能。
1.2 环境搭建
安装openssl加密库
git clone https://github.com/openssl/openssl/archive/refs/tags/openssl-3.0.1.tar.gzcd openssl-3.0.1./Configure --prefix=/opt/openssl --openssldir=/usr/local/sslmake -j4 && make install
安装libsrtp库
git clone git clone https://github.com/cisco/libsrtp.gitcd libsrtp./configure --prefix=/opt/srtp \ --with-openssl-dir=/opt/openssl \ --enable-openssl \ crypto_CFLAGS=/opt/openssl/include \ crypto_LIBS=/opt/openssl/lib64
2 协议格式介绍
V 2bits 版本号,版本2
P 1bit 填充位,当负载的长度不够32bits的整数倍时,需要填充位
X 1bit 扩展位,若为1,则固定的包头后增加一个32bits的扩展(rtp extension)
CC 4bits CSRC的数目
M 1bit 允许在比特流中标记重要的事件
PT 7bits 负载类型
seq16bits 每发送一个RTP数据包,序列号加1,根据此来判断序列号的顺序
时间戳 32bits
SSRC标识符 32bits synchronizating source identifier 识别同步源
CSRC标识符 n个32bits contributing source identifiers 识别负载重的有效贡献源
可选存在的RTP extension
加密的数据(末尾可能包含RTP padding和RTP pad count)
包尾是SRTP MKI(可选),master key identifier,是用来生成session加密密钥的随机位串标识符。
认证标签(Authentication tag)
C++音视频开发学习资料:点击领取→音视频开发(资料文档+视频教程+面试题)(FFmpeg+WebRTC+RTMP+RTSP+HLS+RTP)
3 实现流程
3.1 SRTP协商
SRTP加密之前双方需要进行加密算法和秘钥的协商,可以采用sip的协商方式进行协商。主要是在sip中增加:a=crypto字段用于存放加密类型和秘钥。那么问题来了秘钥这里是否需要进行加密,答案很显然需要进行秘钥的加密,不然就透明了你的秘钥第三方也可以获取秘钥进行解密操作。
3.2 SRTP数据传输
srtp协商已经获取了双方的秘钥这时候可以利用秘钥进行加密操作,对方也可以利用秘钥对加密数据进行还原。
4 协议三方库使用
4.1 加密过程
srtp_t session;srtp_policy_t policy;// Set key to predetermined valueuint8_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};// initialize libSRTPsrtp_init();// default policy valuesmemset(&policy, 0x0, sizeof(srtp_policy_t));// set policy to describe a policy for an SRTP streamsrtp_crypto_policy_set_rtp_default(&policy.rtp);srtp_crypto_policy_set_rtcp_default(&policy.rtcp);policy.ssrc = http://www.029ztxx.com/tg/ssrc;policy.key = key;policy.next = NULL;// allocate and initialize the SRTP sessionsrtp_create(&session, &policy);// main loop: get rtp packets, send srtp packetswhile (1) { char rtp_buffer[2048]; unsigned len; len = get_rtp_packet(rtp_buffer); srtp_protect(session, rtp_buffer, &len); send_srtp_packet(rtp_buffer, len);}
4.2 解密过程
srtp_t session;srtp_policy_t policy;// Set key to predetermined valueuint8_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};// initialize libSRTPsrtp_init();// default policy valuesmemset(&policy, 0x0, sizeof(srtp_policy_t));// set policy to describe a policy for an SRTP streamsrtp_crypto_policy_set_rtp_default(&policy.rtp);srtp_crypto_policy_set_rtcp_default(&policy.rtcp);policy.ssrc = http://www.029ztxx.com/tg/ssrc;policy.key = key;policy.next = NULL;// allocate and initialize the SRTP sessionsrtp_create(&session, &policy);// main loop: get rtp packets, send srtp packetswhile (1) { char rtp_buffer[2048]; unsigned len; recv_srtp_packet(rtp_buffer, &len); srtp_unprotect(session, rtp_buffer, &len); //deal data deal_data(rtp_buffer, len);}
本文关键词:srtp是什么比赛,srtp是什么级别的科研,srtp是什么意思研究生,srtp是什么管材,srtp是什么项目。这就是关于《srtp是什么,srtp是什么意思(WebRTC音视频协议-SRTP)》的所有内容,希望对您能有所帮助!
- 最近发表