AVB vs. RTP

Stella981
• 阅读 768

问:近些年,随着智能驾驶技术的发展和车内影音娱乐系统的丰富,越来越多的音视频数据需要在车内网络进行传输。现在车载以太网日渐成熟,那么,我们可以使用车载以太网在车内网络传输音视频数据吗?

答:答案是肯定的。而且由于成本、传输带宽等方面的因素,在有些场景下,也许只有车载以太网才能满足我们的传输需求。

问:既能传输普通数据又能传输音视频数据,感觉很方便啊。那么,传输音视频数据和其他普通数据采用的传输协议相同吗?

答:是不同的,网络上有专门适用音视频传输的协议。目前,在车载以太网中常用的方案有两个,分别是RTP和AVB。

         • RTP(Real-time Transport Protocol),实时传输协议,采用RTP和RTCP(Real-time Transport Control Protocol,实时传输控制协议)两个子协议实现音视频数据的传输,遵循的标准为RFC 3550。

         • AVB(Audio Video Bridging),音视频桥接技术,采用 IEEE 1722,IEEE 802.1AS,IEEE 802.1Qav, IEEE 802.1Qat等一系列 IEEE 标准,通过保证带宽、控制传输延时、精准时钟同步等功能和机制实现音视频数据在网络上的实时传输。

        这里要注意的是,不管采用哪种技术,这里所传输的有效载荷数据(payload)是一样的,都是音视频媒体数据(e.g. H.264),不同的是所采用的传输方式。

问:那么具体应该选择哪种方案呢,或者说什么时候用RTP,什么时候用AVB呢?

答:这个取决于网络架构,应用场景和成本等因素,需要具体问题具体分析。RTP的机制相对比较简单,而AVB的机制会复杂一些。下面我们详细介绍一下。

        下图是OSI网络模型,左边是AVB架构,右边是基于TCP/IP的传统架构。

AVB vs. RTP

        我们可以看到RTP协议位于模型的5至7层,底层为传输层,在RFC 3550中推荐使用UDP为其底层传输协议,有的同学可能知道IEEE 1733,(一份将RTP协议和AVB相关机制整合使用的标准),但由于过于小众,今天这里就不过多介绍了。RTP协议本身没有连接的概念,为端到端的传输模式,无法保证数据的传输质量。我们知道在复杂的网络环境中,采用UDP传输的数据有可能出现丢包的情况,RTP可以借助RTCP提供的传输质量反馈信息,调整数据发送行为,从而尽可能的保障传输服务。但是,如果车内网络环境简单,通过合理的设计,我们可以规避传输过程中有可能出现的种种问题,从而使用RTP在车内进行音视频数据传输。

        比如下面的应用场景:

AVB vs. RTP

Figure 1

        摄像头和显示屏直连,摄像头采集视频数据,通过以太网传输至显示屏,显示屏实时显示摄像头所捕获到的视频画面。类似这样一对一直连的网络拓扑,如果这条链路上的带宽充裕,可以直接使用RTP进行音视频传输。

问:感觉RTP很简单啊,是不是直连的网络拓扑,一般都可以使用RTP进行传输呢?

答:是的,可以这么说。如果不是直连,但场景中Switch节点转发延时可控,在链路带宽充裕的情况下,RTP一般也都可以满足传输需求。

问:了解了,那网络环境复杂就需要使用AVB吗?

答:和RTP相比,在OSI模型中,我们可以看到AVB的一系列协议是直接基于数据链路层进行传输的,简单的层级架构,使数据的处理时间更加可控。AVB共有四个子协议,分别是:

• IEEE1722,音视频传输协议AVTP

• IEEE 802.1AS,精准时间同步协议gPTP

• IEEE 802.1Qav,时间敏感数据转发和队列优化协议FQTSS

• IEEE 802.1Qat,流预留协议SRP

        我们通过下面的场景具体介绍下AVB技术的应用情况:

AVB vs. RTP

Figure 2

        如图所示,车内网络中摄像头、显示屏、ECU1和ECU2通过Switch相互连接,同时,摄像头、ECU1和ECU2均有与显示屏通信的需求。如果ECU1和ECU2有突发的数据需要发送至显示屏,那么Switch和显示屏之间的链路带宽就会被大量占用,导致摄像头的视频数据无法准确传输。其次,我们知道车载以太网传输路径上的延时主要来自于Switch的转发延时,如果有大量数据在Switch队列中等待,网络就会出现拥塞,导致延时,从而影响数据的传输质量。以上场景,想要实现实时视频传输,有两个问题需要解决:其一是保证链路的传输带宽;其二是要控制Switch的转发延时。

        这种情况下,基于UDP的RTP传输就很难满足需求了,需要AVB技术来解决这些问题。首先要获取多流并发时各个数据流量的所需带宽并静态配置,其次再将数据划分出不同优先级,保证高优先级数据优先转发。AVB中,FQTSS可以通过基于信用的转发方式(CBS,credit-based shaper),在保证高优先级数据转发的同时,也可以转发其他低优先级数据。优先级可划分为SR class A,SR class B等级别,在这个场景中,如果视频数据的优先级较高,可以将其划分为SR class A,在7跳之内,SR class A数据默认的最大传输时间仅为毫秒级别,完全可以满足实时视频传输的需求。通过以上方法,场景中的带宽和延时问题都可以用AVB技术解决,进而就可以实现流畅的视频数据传输了。

        通过以上应用实例,我们简单的介绍了RTP和AVB两种在车内网络传输音视频数据的方案。如果网络环境简单,有足够的传输带宽,那么基于TCP/IP架构的RTP可以直接满足端到端的音视频传输需求,简单方便,性价比高。但是如果车内音视频数据的传输路径上有一个或多个Switch节点,存在多流并发的场景,或者有时钟同步的需求,就需要借助AVB技术中的gPTP,FQTSS,AVTP等技术和机制才能实现稳定的实时音视频数据传输。具体使用哪种方案,是使用所有机制还是选择性使用,还需要根据车型和应用场景,具体案例具体分析,借助时间分析工具进行仿真优化,才能呈现出最优的传输效果。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Django之Django模板
1、问:html页面从数据库中读出DateTimeField字段时,显示的时间格式和数据库中存放的格式不一致,比如数据库字段内容为2012082616:00:00,但是页面显示的却是Aug.26,2012,4p.m.答:为了页面和数据库中显示一致,需要在页面格式化时间,需要添加<td{{dayrecord.p\_time|date:
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
3年前
Netty之缓冲区ByteBuf解读(一)
!(https://oscimg.oschina.net/oscnet/up6de4d71f462d9846befe00ec6505125a928.JPEG)\Netty在数据传输过程中,会使用缓冲区设计来提高传输效率。虽然,Java在NIO编程中已提供ByteBuffer类进行使用,但是在使用过程中,其编码方式相对来说不太友好,也
Stella981 Stella981
3年前
Node.js 中使用 ECDSA 签名遇到的坑
文/Fenying最近有个朋友问我关于Node.js下使用ECDSA的问题,主要是使用Node.js的Crypto模块无法校验网络传输过来的签名结果。在踩坑无数后,终于搞清楚了原因。坑0x00:签名输出格式在排除了证书、消息不一致的可能之后,我开始对比使用Node.js签名的结果与网络传输过来的签
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这