首先我们知道,Rtmp是一种客户端到服务端的技术,Peer to Server。WebRTC是一种客户端到客户端的技术,Peer to Peer。
Rtmp通过一个TCP连接,向服务端发送或接收连接信息,媒体数据。
WebRTC先使用ICE技术连接STUN/TURN,得到自己的连接信息。再绑定音视频设备获取媒体信息,拼装为SDP信令。两个客户端通过任意方式交换信令,建立客户端直接的连接,再使用RTP发送和接收媒体数据。
如果一个服务端实现了WebRTC客户端的能力,那么它也可以被认为是一个Peer,与用户浏览器的WebRTC客户端创建连接,获得客户端推送过来的媒体数据,就完成了Peer to Server的转换。
WebRTC是一个非常非常复杂的协议,如果自己从0开始写起是不现实的。在完成这个工作的时候,我也尝试过其它一些实现,做了一些分析。大体分为如下几种类型。
第一种,将开源项目Chromium内WebRTC的cpp原生实现集成到项目中使用。
比如这个项目:
https://github.com/node-webrtc/node-webrtc
经过分析,pion/webrtc 是目前看起来最适合用在NMSv3中的项目。原因如下:
1. 原生WebRTC虽然有最好的功能实现,但复杂的编译环境,源码整合,API封装,工作量非常繁重,放弃。
2.GStreamer在Linux下有非常普遍的使用率,但它严重依赖大量第三方项目,比如glib,libice等,都存在跨平台编译问题,也存在API使用繁琐的问题。

本文探讨了如何将WebRTC的客户端到客户端技术与RTMP的客户端到服务器技术相结合。通过分析不同实现方式,选择了pion/webrtc,并介绍了使用WebSocket进行信令交换,以及在服务器端处理Opus转码为AAC的过程,实现了浏览器无插件的RTMP推流功能。
最低0.47元/天 解锁文章
4006

被折叠的 条评论
为什么被折叠?



