使用WebRTC替代传统的RTMP推拉流方案
RTMP
RTMP 最初设计用于向 Adobe Flash 播放器传输音频、视频和其他数据,但在2020年Adobe宣布停止对Flash播放器的支持,这是势必对RTMP发展有一定的影响。Adobe也建议直播厂商将现有的Flash内容迁移到新的开放格式中去。
RTMP基于TCP的流媒体传输协议,最大的特点是与 CDN 的强绑定,需要借助 CDN 的负载均衡系统将内容推送到接近用户的边缘节点,目前的 CDN,通常有 3-5 秒的延迟,在浏览图片、短视频等内容时用户感知不明显,对于不需要实时强互动的直播,比如体育赛事网络直播、演唱会网络直播、新闻现场直播,延迟是可以接受的,并不会影响用户体验。而在线视频会议、在线教育、电商直播、远程医疗会诊这些对互动有非常高要求的场景,RTMP+CDN 的模式与这些场景对于低延时、无卡顿的要求有一定差距。这时选择WEBRTC技术才能更好地满足开发者的需求。
WebRTC
WebRTC是一种基于浏览器的实时通信的开源解决方案,由Google,Mozilla 和 Opera等机构支持的项目,使用 UDP 私有协议来进行媒体推流,而不需要创建离散的媒体段;并且它是面向无连接的,没有 TCP 连接断开时的挥手确认连接关闭的机制,基于这两点,WebRTC 能够做到毫秒级的低延迟,远远低于基于 RTMP 协议的 CDN 分发的延迟。而且,它直接通过浏览器就可以完成推流和播放,对于开发者接入来说实在太方便。
UPRTC
如果仅在浏览器端使用,是无法满足直播等音视频应用场景的,幸运的是,我们开发的UPRTC方案解决了这种局限性。UPRTC提供了基于webrtc的IOS,Android推拉流SDK,并兼容所有支持webrtc的浏览器,提供了基于Qt,electron的PC端webrtc跨平台解决方案,完美的覆盖了所有的应用场景。
UPRTC客户端和服务端使用webrtc直接连接,中间没有转发,转码,不存在传统厂商使用HLS进行 “最后一英里” 的交付问题。可替代RTMP应用于传统的网络直播,也可以满足需要实时性,互动行的使用场景,例如主播和观众可以进行音视频连麦互动,实时沟通,延时一般低至 400ms 以内。
UPRTC服务可组成类似于CDN的分布式流媒体分发网络,CDN服务节点是被动拉取内容,UPRTC中的房间会根据当前服务器的负载情况自动向其他服务器复制为镜像房间,新进入房间的客户端会自动加入到负载最小的镜像房间中,房间的复制可能是本机的不同进程,也可以是主机间,也可以跨机房,我们也为开发者提供了手动创建镜像房间的接口,也可以指定客户端连接的镜像房间,已达到更加精准控制流量的目的。
UPRTC为开发者提供极简API,没有音视频相关开发经验的小伙伴也能轻松驾驭,每个平台都提供了对应集成DEMO,下面以Android为例:
UPRTCClient.init(appId,appKey)
UPRTCClient client = new UPRTCClient();
client.joinRoom(serverUrl, roomId, userId);
// 加入房间事件回调
void onRoomJoined(int code) {
client.openCamera()
client.openMic()
}