音频和视频流最佳选择?SRT协议解析及报文识别

我们所知道SRT 是由 Haivision 和 Wowza 开发的开源视频流协议。很多人会认为在不久的将来,它被是 RTMP 的替代品。因为RTMP协议安全性稍低,延迟相对较高 ,而相对于SRT协议支持高质量、稳定性、亚秒级延迟、强大的编解码器支持。SRT被许多行业专家认为是视频流的新协议。SRT究竟是什么?

什么是 SRT?

安全可靠传输 (SRT) 是一种开源数据传输协议。SRT 使用用户数据报协议 (UDP),旨在通过公共互联网发送高质量视频,因此该协议是音频和视频流的最佳选择。

在许多主要的开源技术Wireshare、FFMpeg中,应用了SRT安全可靠传输协议。

SRT的应用在哪些领域?

SRT协议主要的应用在直播、多流、视频编码、网关等领域。在技术方面,它提供类似于传输控制协议 (TCP) 的可靠传输。 然而,使用 UDP 协议作为底层传输层。
在这里插入图片描述

SRT 还支持低延迟(默认为 120 毫秒)的数据包恢复和使用高级加密标准 (AES) 的加密。

简而言之,通过 SRT,端到端流安全、视频弹性和基于网络条件的实时动态端点调整成为可能。

高质量视频传输

SRT 可以更轻松地通过互联网协议 (IP) 以低端到端延迟进行流式传输。截至目前,低延迟流媒体的协议偏好很少。

这是因为通过公共互联网流式传输可能会造成数据包丢失和抖动等障碍。 SRT 提供解决此问题的方法。

此外,该协议还包括防止数据包丢失、抖动和带宽波动的保护。这意味着如果网络状况不稳定,您的流可能会停止。但它几乎可以立即从这种丢包中恢复,您的观众在观看时几乎不会注意到任何问题。

其他有益于直播的功能包括:

1、 基于时间戳的数据包传输,通过源时间传输实现更好的延迟控制
2、 控制发送者的速度
3、 防止丢包未及时恢复造成丢包
4、数据包重传的定期 NAK 报告

SRT如何更好的保护你的视频流

如果您使用 SRT 协议流式传输视频,您肯定会受益于它的优势。 该协议保护您的视频流,并确保所有数据在发送时都经过加密。 它还消除了特殊互联网连接的负担,因为该协议可保证您交付的视频内容的质量。

SRT 通过提供可确保安全传输即使是最高级别的产品的加密技术而闻名。 SRT 可以启用端到端 AES 128/256 位加密算法,这是任何需要保护的内容的理想选择。 即使在不可靠的 WiFi 或蜂窝连接导致带宽波动期间,SRT 也能防止视频抖动和数据包丢失,可保护您的视频内容免遭分发。

SRT数据包

下面我们要对SRT协议要做进一步分析。

在这里插入图片描述

根据上图的红色框起来的方格F:

F=0 ;Data Packet

0:
Data (content to transmit)
Filtering packet (FEC)

F=1;Control Packet

HANDSHAKE
KEEPALIVE
ACK
NAK (Loss Report)
SHUTDOWN
ACKACK

SRT流媒体传输协议握手过程

caller作为连接的发起者,知道对应设置Listener模式设备的公网IP地址及其监听的UDP端口。而Listener监听发起的SRT请求,需要知道使用哪个UDP端口,并在这个端口一直监听。

  • Caller-Listener Handshake

在这里插入图片描述

caller发起建立一个点对点传输的SRT连接,Listener监听发起SRT会话的请求。

  • Rendezvous Handshake

Rendezvous两端共同协商建立连接,基本不使用此种连接。在这里插入图片描述
SRT在快速连接方面有明显优势,两次握手成功即可建连;简单了明白了握手过程,接来就是SRT协议解析了。

SRT协议解析及报文识别
下面我们对SRT协议进行解析。



static void dissect_srt(u_char *data_info,int PayloadLen)
{
	/* Other misc. local variables. */
    bool is_control = 0;
	
	/*必须至少有24个捕获的字节才能进行检查 */
	if (PayloadLen < 24)
		return ;	  
	printf("SrtHdr 0x%.2X,0x%.2X,0x%.2X,0x%.2X\n",data_info[0],data_info[1],data_info[2],data_info[3]);	
	
	if ((data_info[0] == 0x80 && data_info[1] == 0x00 && data_info[2] == 0x00 && data_info[3] == 0x00)
	|| (data_info[0] == 0x80 && data_info[1] == 0x02 && data_info[2] == 0x00 && data_info[3] == 0x00)/*UMSG_ACK*/
	|| (data_info[0] == 0x80 && data_info[1] == 0x06 && data_info[2] == 0x00 && data_info[3] == 0x00)/*UMSG_ACKACK*/
	)
	{
		is_control = true;
	}
	
	if (is_control)
	{
		
		dissect_srt_control_packet(data_info,PayloadLen);
	}
	else
	{
		/*srt data type*/
	}
}

编译运行:

在这里插入图片描述

总结

如果您使用 SRT 协议流式传输视频,您肯定会受益于它的优势。 该协议保护您的视频流,并确保所有数据在发送时都经过加密。 它还消除了特殊互联网连接的负担,因为该协议可保证您交付的视频内容的质量。

欢迎关注微信公众号【程序猿编码】,需要SRT协议源码和报文的添加本人微信号(17865354792)

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值