首页 / 科技百科

webrtc只能用rtmp推流吗

2025-05-14 08:42科技百科

作者:网易云信资深客户端开发工程师 陶金亮

近几年,实时音视频领域越来越热,业界很多音视频引擎都是基于 WebRTC 进行实现的。本文主要介绍 WebRTC 在视频辅流上的需求背景以及相关技术实现。

WebRTC 中的 SDP 支持两种方案: PlanB 方案 和 Unified Plan 方案。早期我们使用多PeerConnection的 Plan B 方案中只支持一条视频流发送,这条视频流,我们称之为”主流”。目前我们使用单 PeerConnection 的 Unified Plan 方案,新增一条视频辅流,何为视频”辅流”?视频辅流是指第二条视频流,一般用于屏幕共享。

需求背景

随着业务的发展,一路视频流满足不了更多实际业务场景的需求,例如在多人视频聊天、网易会议以及其他在线教育场景下,需要同时发送两路视频流:一路是摄像头流,另一路是屏幕共享流。

但是,目前使用 SDK 分享屏幕时,采用的是从摄像头采集通道进行屏幕分享。在该方案下,分享者只有一路上行视频流,该场景中要么上行摄像头画面,要么上行屏幕画面,两者是互斥的。

除非实例一个新的 SDK 专门采集并发送屏幕画面,但实例两个 SDK 的方案在业务层处理起来十分麻烦且会存在许多问题,例如如何处理两个流间的关系等。

在 WebRTC 场景中,还存在一种可以单独为屏幕分享开启一路上行视频流的方案,并称之为“辅流(Substream)”。辅流分享即共享者同时发布摄像头画面和屏幕画面两路画面。

另外,有了这个辅流的通道,当设备为新版本 iPhone(新版本 iPhone 具有同时开启前后摄像头的能力)时,也为支持前后2路摄像头发送视频数据奠定了基础。

技术背景

前期 SDK 的架构设计是一个多 PeerConnection 的模型,即:一个 PeerConnection 对应一路音视频流。随着新的 SDP(Session Description Protocol)格式(UnifyPlan)的推出和支持,一个 PeerConnection 可以对应多路音视频流,即单 PeerConnection 模型,即基于单 PC 的架构,允许创建多个 Transceiver,用于发送多条视频流

技术实现

目前视频流主要分为三类:Camera 流、屏幕共享流、自定义输入视频流,分别有不同属性:

将 Camera 流作为主流,支持 Simulcast;将自定义视频输入(非屏幕共享)作为主流,不支持 Simulcast;将屏幕共享作为辅流,不支持 Simulcast,有单独的屏幕共享编码策略;

由于 iOS 屏幕共享的特殊性,其需要通过自定义视频输入的方式来获取视频数据,因此存在如下图所示的流程图:

综上所述:iOS 的自定义输入既可以使用主流的通道发送视频(非屏幕共享),也可以使用辅流的通道发送视频(屏幕共享)。

如果是其他平台,例如 Mac、Win、Aos 等,则会相对简单,摄像头数据和屏幕共享的数据都来自于 SDK 内部,外部自定义视频输入的数据才来自于外部。

关键类图

上述提到的单 PC 架构,目前会有2个 RtpTransceiver,一个是 AudioTransceiver,一个是 VideoTransceiver,而辅流的屏幕共享会在新增一个 RtpTransceiver。一个 VideoRtpSender 会包含一个 VideoMediaChannel。

辅流改动

实现辅流需要对不同层面都做一些调整以及重构,具体如下:

信令层面需要支持多路视频流,使用 mediaType 用于区分上述的 Camera 流(Video)、屏幕共享流(ScreenShare)、自定义视频输入流(externalVideo);重构跨平台层的 Capture 和 Source 的管理;重构用户和渲染画布的管理,从一个 UID 对应一个 render,过渡到一个 UID 的 sourceId 对应一个 render,每个 UID 可能会包含2个 sourceId;互动直播的服务器推流和录制需要支持主流和辅流的合流录制;主流和辅流的拥塞控制方案的落地;主流和辅流的码率分配方案的落地;主流和辅流的编码器性能优化;PacedSender 发送策略、音画同步等方案的调整;服务器 Qos 下行码率的分配方案的调整;辅流相关的统计数据的汇总;

下面介绍在整个过程中,比较重要的几个技术点的实现。

带宽分配

在弱网情况下,需要视频辅流的时候,我们会优先把码率分配给音频流,其次是辅流,最后再分配给主流,整体策略为保辅流

带宽分配的主要流程如下:

WebRTC 的拥塞控制算法 GCC(下文简称 CC) 评估出来的总带宽分配会分给音频流、主流、辅流;主流内部再由 Simulcast 模块分配大小流的码率,不开 Simulcast 时就直接给大流;

具体过程如图所示:

辅流会在上图的基础上再新增一个 VideoSendStream。

码率分配

目前关于码率分配的流程如下图所示,概括起来有一下几步:

CC 的码率通过 transport controller 传递到 Call 中;然后经过 BitrateAllocator 分配到各个注册的流中 (目前就是视频模块);视频模块拿到分配的码率,分配给 fec 和重传,剩下来的分配给 video encoder bitrate;视频编码器模块拿到 video encoder bitrate,按照我们的策略,分配给大流、小流使用;

拥塞控制

为了实现视频辅流的功能,我们需要对拥塞控制进行相关的改动,主要通过以下四个方面的改动来实现:

SDP 信令改动

按照 RFC 2327,使用 b= modifier : bandwidth-value 的方式来指定建议带宽,有两种 modifier(修饰符):

AS:单一媒体带宽;CT:会话总带宽,表示所有媒体的总带宽;

目前 SDK 使用 b=AS: 的方式指定摄像头码流或屏幕共享码流的建议带宽,并把这个值作为 CC 模块的估计值上限。

新的需求要求在同一会话中,可同时发送摄像头码流和屏幕共享码流,因此应把两路媒体的建议带宽值相加得到整个会话的建议带宽值,作为 CC 模块的估计值上限。

WebRTC 支持 b=AS: 方式(单路媒体),在 WebRTC 内部对多路媒体进行相加处理即可满足需求,而 WebRTC 目前不支持 b=CT: 方式,所以建议使用 b=AS: 方式,改动相对较少。

CC 总码率更新策略

Pub 码流能力更新,通过 SDP 方式 (b=AS:) 同步设置最大带宽到 CC 模块,当新增一路媒体流时,通过启动 probe 快速探测的方式,迅速上探到可用带宽:

快速带宽评估

突然增加一路媒体流时,需要能够很快上探到真实带宽值,使用 probe 快速探测算法实现这一目标:

如果探测成功,CC 估计值迅速收敛,在带宽充足场景中收敛为 CC 上限,带宽受限场景中为真实带宽;如果探测失败(如高丢包率场景),CC 估计值缓慢收敛,在带宽充足场景中最终收敛为 CC 上限, 带宽受限场景中为真实带宽;

Paced Sender 处理

辅流与主流的视频大小流的发送优先级一致,所有视频媒体数据,使用预算和 pacing multiplier 的方式做平滑发送处理;增加一个视频码流类型,kVideoSubStream = 3,与主流的大小流视频数据区分开来;Probe 快速探测期间,当编码数据不足的情况下,发送 padding 数据弥补,以保证发送码率满足要求;

下图为实际进行码率分配测试的结果展示:

统计上报

带宽的统计上报分为两个部分,分别是从 MediaInfo 获取以及 Bweinfo 获取。

1、发送端和接收端 MediaInfo 获取

当前 SDK 的带宽估计从 MediaInfo 获取逻辑为:

遍历当前所有 transceiver,获取每个 transceiver 的 video_channel 和 voice_channel,从而获取到 video_media_channel 和 voice_media_channel;根据 media_channel 的 getstats 获取当前 channel 的 MediaInfo;将获取的 MediaInfo 放在 vertor media_infos 中,便于上报;

主流和辅流同时发送场景,只是增加了一个 transceiver,因此此逻辑适用于主流和辅流同时发送的场景,如下图:

2、带宽估计信息获取

当前 SDK 的带宽估计从 Bweinfo 获取逻辑:

获取 gcc、probe 探测等表示总体带宽信息;获取每个 transceiver 的 voiceChanel 和 videoChannel 相关的带宽估计信息(类似于 MediaInfo 的获取);

主流和辅流同时发送的场景只是增加了 transceiver,因此此逻辑适用主流加辅流同时发送场景,如下图:

总结

以上就是关于 WebRTC 中视频辅流的分享,主要从业务需求出发,通过技术背景以及关键技术类图,详细分享了关于视频辅流的技术实现。也欢迎留言与我们交流关于 WebRTC 以及音视频相关技术。

猜你喜欢

  • 军事之最

    历史公认的三位军事天才,拿破仑只能排第三,第一第二都是中国人

    说起军事天才,很多人脑海里蹦出来的都是那些攻城略地、战功赫赫的猛将。实际上,真正的军事天才,并非真正亲临前线的将军。在所有学者研究之后惊奇地发现,如果要把所有军事天才排一个名词,那么拿破仑也只能排在第三,而排在第一和第二的人,却出乎我们预料。拿破仑先来看看拿破仑。“法国人的皇帝”拿破仑·波拿巴,在欧..

    2025-06-27
  • 植物之最

    箬竹叶,最常用的粽叶之一,但宝藏植物箬竹可不是只能用来包粽子

    粽子是我国食用历史极为悠久,带有节日属性,富有文化内涵,从古至今都备受民众喜爱的食品之一。春节时的饺子可能并非南北必备,但端午节的粽子可谓基本统一(本想用“绝对”但改了“基本”,毕竟个别地区吃鸡蛋、栀粿、食饼筒等)。不过“吃粽子”这事虽然基本统一,但吃什么样的粽子却争议很大。和豆腐脑一样,粽子也有南..

    2025-06-19
  • 中国十大

    中国十大名山,泰山只能排第二,爬过五座是青铜,爬过七座是王者

    在这个星球上,隐藏着无数让人心跳加速的自然奇迹,而中国,这片古老而又神奇的土地,尤为让人着迷。从东方的秀美到西方的雄浑,从南方的温婉到北方的壮阔,中国的山脉如同一幅幅流动的史诗,诉说着千古风华。今天,就让我们一起踏上这场视觉与心灵的盛宴,探索中国十大名山的绝世风光,看看你的心已被哪一座悄悄俘获?开场..

    2025-06-17
  • 排行榜

    中国十大自然胜地排名,湖南张家界只能排第六,华清池居然没上榜

    《华清池之憾》当我踏上湖南之行的征程,内心涌动着对祖国大好河山的热爱与期待。如今,中国的自然胜地频频上榜,让我更加好奇、更加向往。然而,让我万万没有想到的是,湖南张家界竟然只能排在第六位,而华清池居然没能上榜。这一次的旅程,让我领略了大好河山的宏伟壮美,也让我深切感受到自然之美与人文之魅。首先,湖南..

    2025-06-16
  • 班主任请全班女生喝奶茶 男生只能羡慕

    班主任在妇女节这一天请班里的18位女生喝奶茶。在三八妇女这一天很多。地方的女性都是有着一定的优待,比如说很多公司都会给公司里面的女员工放假半天,虽然学校里没有这样的规定,不过在陕西西安一个学校的班主任在这一天自己掏腰包花了110元购买奶,请全班里的是一位女生喝了一杯奶茶。他让这些女生非常的开心,不过男生..

    2025-06-14
  • 十一维空间的具体内容 人类只能感受到三维空间

    在物理学理论里面推出出最高的维度理论是十一维空间。这个概念对于一般人来说简直无法想象,一般三维四维空间就是人可以认知的极限。十一维这么高,不是物理学大师都难以法理解。这种概念很好的解释了宇宙的起源。在十一维空间中,人类只能感受到三维空间1、日常只能感受三维空间众所周知,我们人类只能感受到三维空间,即..

    2025-06-10
  • 中国十大

    中国十大火车站,第一名堪比一个国家,北京南站只能排倒数第一

    每次提起中国高铁,总有人掰着手指头数复兴号的速度、八纵八横的规划,却很少有人注意到,那些每天吞吐数十万旅客的超级高铁站,才是中国速度最硬核的见证。今天咱们不聊冰冷的数字,带你看懂高铁站背后的江湖地位。第一名【南京南站】73万平米的站房藏着个小彩蛋——立柱纹样复刻明孝陵石像生。全站无线充电覆盖这事,让拖..

    2025-05-29
  • 世界第二大的运输机,安124运输机1年只能造出1架

    苏联安东诺夫设计局的安124运输机是世界第二大的运输机,这种飞机无论是在军事上还是民用上,都是不可多得的存在,安124运输机最大起飞重量为450吨,载重量可达150吨,可见运输量能达到什么地步,不过这么变态的大家伙要生产并不是那么容易的事情。世界第二大的运输机安124运输机安124运输机是世界第二大的运输机,该机是由..

    2025-05-29

微信分享

微信分享二维码

扫描二维码分享到微信或朋友圈

链接已复制