rtp 丢包率计算_音视频传输:RTP协议详解和H.264打包方案

本文深入介绍了RTP实时传输协议,包括其背景、与RTSP、RTCP的关系,以及在音视频传输中的应用。文章重点阐述了RTP数据包的生成、结构和H264 NALU如何打包到RTP中,讨论了单一NALU和FU-A打包方式。此外,还提到了RTP在WebRTC、安防领域的广泛应用。
摘要由CSDN通过智能技术生成

问题背景:

前面讲解了PS、TS、FLV这三种媒体封装格式,现在新开一个系列讲解下传输协议,这里面会包含RTP、RTSP、HLS、RTMP等。当然最复杂的封装格式MP4在准备中,后面会把封装格式这个系列讲完。今天要说的RTP传输协议,有人也认为这是封装格式,因为协议中打包音视频要填写时间戳的相关信息,FFmpeg就把这个作为封装格式。我觉得都没啥问题,不过我更偏向认为是传输协议。

RTP协议即实时传输协议(Real-time Transport Protocol),从字面理解也是和实时传输有关系,协议的初衷是为了实时多人视频会议而设计的,现在应用很广泛。在视频监控、实时直播、语音电话、视频会议都能看到应用。特别是在目前大热的webRTC中将其作为传输协议,国内安防标准GB28181和国际标准ONVIF也是用这个传输音视频。所以在视频监控和实时视频传输还是统治级别的存在,没有啥协议能够进行短期取代,当然这都是由RTP特点决定的。

下面篇章会讲解下RTP协议的内容和一些周边协议的关系,最后还会讲解如何把H264的NALU数据打包到RTP协议内,你可以选择性阅读。

RTP协议背景:

RTP协议即Real-time Transport Protocol是一种网络传输协议,一般负责音视频数据的封包和传输。其中IETF多媒体小组在1996年的RFC1889就给出了该协议的规范和细节,其后在RFC3550中进行了更新,如果你要系统性学习,直接看RFC3550规范即可。

跟RTSP、RTCP的关系:

RTCP协议:实时传输控制协议即Real-time Transport Control Protocol,这个协议是RTP协议的姊妹协议,它是为了进行服务质量的监视与反馈、媒体间的同步,以及多播组中成员的标识,目前WecRTC用这个协议进行流量和拥塞控制。

RTSP协议:实时流协议即Real Time Streaming Protocol,这是一种会话管理和媒体控制的协议,用的最多地方就是视频监控。视频监控中摄像机、NVR、前后端之间都是用这个协议和RTP协议配合进行流媒体传输。

站在播放器实现角度,理解三者关系,看图:

09c33fe9de634fb51ed86ff78c4e3ac4.png

我用一个开源软件通过RTSP的URL拉取了一个大华摄像头的视频。其中大家看到这些开始播放,暂停、快播这些播放按钮背后的功能就需要靠RTSP来支持。看到这个图像视频数据,其实靠的是RTP协议传输过来的。RTCP呢?由于RTP协议大多数情况是不可靠协议,它只管传输音视频数据,但是并不保证这些数据丢了怎么处理,发快了怎么处理,这种数据的可靠性控制需要的RTCP协议来保障的。不过我们今天只讲RTP协议,通过这个讲解相信你能有个感官认识。

站在网络层次模型的角度,同样看图:

0d764fe70b51a7fecf4f5c07b9c828f3.png

其中RTSP协议就和HTTP协议一样,属于应用层协议,一般传输层靠的是TCP传输。其实本身的语法和HTTP协议都非常相似,后面文章会详细讲解。

RTP协议既可以理解为传输层也可以理解为应用层,这么说是因为RTP负载可以放到RTSP上进行传输,通过二元交织通道方式实现。也可以下层放到TCP进行承载,不过大多数情况RTP的负载协议是UDP,如果放到TCP上大大降低了RTP协议的实时性。之所以设计RTP协议,就是因为为了规避TCP协议的一些缺点,因为TCP协议在操作系统的协议栈上实现了流量和拥塞控制等机制,但是TCP并没有考虑传输视频的情况,它是针对传输任何数据更通用的做法,但是结合流媒体传输的特点,我们发现UDP更适合传输,所以我们把保证传输速度即快又正确这件事交给了上层的RTP和RTCP协议,这样我们开发者是可以来实现和控制这两种协议的,这样就为解决音视频低延时等场景提供了可能。

给个实例看下,上图:

7803cd10ab995002eae6baabde61286b.png

RTP协议原理:

1.发送地址的确定:

上面说了RTP协议是发送端传输流媒体数据的,但是往那个IP和端口传输,如何将自己传输的音视频属性告诉给接收端就需要一种机制来实现,常见的做法就是用SDP进行描述,然后通过RTSP、SIP或者HTTP等协议和接收端协商。一般在协商过程中,会确定发送端RTP和RTCP的目的地址,目的地址由一个IP地址和端口对组成,偶数端口就是RTP媒体流的目的端口,偶数端口+1就是RTCP协议的目的端口,其中RTSP协议传输端口的确定就是通过SetUP方法,看下图:

48305277d019341f23afedddf935ab99.png

2.RTP数据包的生成:

通过RTSP等协议的SDP信息协商好了RTP数据包的发送目的和传输方式,我们就需要把音视频数据打包成RTP包,用UDP发送给接收端了。RTP不仅可以用来传视频,也可以传音频,甚至可以传输图像和非音视频数据。传输视频不仅可以传输H264编码的数据,也可以传输H265,同样可以传输谷歌的VP8 VP9系列编码的视频裸数据。音频可以传输G7xx系列、AAC系列。那封装好的数据可以传输吗,也是可以的。其中安防中常说的国标流就是RTP&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值