您好,欢迎访问三七文档
当前位置:首页 > 中学教育 > 高中教育 > 【一文弄懂simulcast】
简介在目前多方会议中,多数方案是采用一个中心节点的服务器,这样有助于减少CPU和带宽的压力。但是在多方会议中,各个终端的能力是不一样的(屏幕大小/cpu/带宽/支持的格式等)。如何在终端能力适配和服务器压力/视频质量之间平衡,是一个亟需解决的问题。simulcast是其中一种解决方案。本文定义了一种机制,如何在SDP中进行协商以及如何在RTP包中传输simulcast的码流。为了解决多方会议中各个终端能力不一的问题,业界提出了simulcast的方案。而在simulcast提出之前,主要有两种解决方案:•转码:中心节点服务器收到RTP码流后,根据各个终端的能力,重新进行编码。这个方案的优点在于终端适配很好;缺点在于服务器成本很昂贵。•选择子集:服务器收到RTP码流后,根据各个终端的能力,选择一个子集。这个方案的优点在于节约了服务器的成本;缺点在于难以从接收RTP码流中选择一个合适的子集,以便接收端能够正常解码。simulcast的方案主要是解决上述第二个方案的问题。通常使用simulcast的场景有如下几种:•能力不一的接收端:比如接收端的能力差别只在于屏幕大小(一种是360P,另一种是720P),那么发送端可以使用simulcast码流(包含360P和720P两种编码码流)。simulcast的能力限制主要在于发送端的处理能力以及上行带宽。•应用场景个性化:比如在会议中,通常当前说话者作为发送端会显示在其他接收端的大屏幕上,但是他本身是不会显示在自己的大屏幕上的,此时显示在发送端的大屏幕上的可能是之前说话的人。这种场景也可以使用simulcast解决。•接收端偏好:接收端希望接收某一种不同与其他接收端的码流。比如希望接收15FPS而不是30FPS的码流。simulcast详细介绍simulcast属性定义在SDP中,引入一个新的属性:a=simulcast:value,其中value的ABNF语法定义如下:简单来说,就是满足如下特点:包含两个方向的描述,send和recv。每个send/recv后跟随一个rid的列表,rid列表用分号隔开,表示一个simulcast的流。例子如下:a=simulcast:send1;2,3recv4表示:send方向会发送两个simulcast流,其中一个流的描述在rid=1的描述中,另一个流的描述在rid=2和rid=3的描述中。recv方向接收一个simulcast流,在rid=4的描述中。simulcast能力•在SDP中,每个m行最多只有一个a=simulcast描述。•在a=simulcast的描述中,rid必须是有效的rid,rid对应的能力在a=rid属性中描述。•在rid列表中,出现越早的rid优先级越高。•如果一个simulcast流可以有多个格式,会采用逗号隔开的rid作为描述。•如果在开始阶段,此rid描述的格式处于paused状态,则rid前会带有~字符。simulcast的offer/answer•发送offeroofferer添加a=simulcast属性,并添加对应的simulcast流。•发送answero如果answerer无法识别simulcast,则会移除对应内容。如果answerer发现simulcast属性在会话层,会移除对应的内容。如果在媒体层发现多余一个simulcast属性,则会移除所有的simulcast属性。o如果answerer识别simulcast内容,则将send/recv调换。answerer可能会从offer的rid中选择支持的,但是不允许添加新的rid属性,也不允许添加simulcast流。•处理answero如果answer中没有simulcast属性或者rid无效,则表示不能使用simulcast。oofferer最后在使用simulcast时,只允许使用answer中携带的rid的格式。simulcast例子假设是一个四方会议,如下图:Alice加入会议,发起offer。视频支持simulcast。发送方向支持simulcast,分别为分辨率1280*720/30FPS和320*180/15FPS的能力。接收方向只能接收1280*720/30FPS能力的码流。Answer也有simulcast能力,并回响应如下。Fred加入会议。但是Fred有两个摄像头,因此发起两个m=video行的offer。其中第一个摄像头有三个simulcast流,分别为H264-SVC,H264,VP8/H264(初始化是paused)。第二个摄像头也有三个simulcast,但是都是VP8格式。除了优先级最高的rid=1外,初始化状态都是paused。如果audio/video支持冗余的特性,又支持simulcast,发起的offer可能如下。音频支持simulcast,其中第一个流支持opus,第二个流支持RED或者G.711。视频支持simulcast,都是H.264/VP8+RTX+flexfec,不过不同的simulcast的流能力不同,一个最大支持1280*720分辨率,一个最大支持640*360分辨率。RTP层面信息simulcast中每个流都有对应的id标识(RtpStreamId),通常采用SDESitem或者RTP扩展头传输。
本文标题:【一文弄懂simulcast】
链接地址:https://www.777doc.com/doc-7096024 .html