基于mediasoup的多方通话研究(一)

  • mediasoup简介
  • mediasoup的特性
  • 安装mediasoup-demo
  • 本地运行Demo
  • server的配置文件
  • mediasoup的原理
  • 扩展与展望
  • 总结

mediasoup简介

mediasoup号称尖端的WebRTC的视频会议系统,官网为 https://mediasoup.org/.
安装极其简单:

npm install mediasoup
npm install mediasoup-client

从ibc开发这套系统一直跟进到最新的版本,经历了V1到V2的变迁,api从webrtc到ortc的变更,一点一点的完善,目前好评度越来越高。

有没有兴趣跟我一起学习研究这个优秀的系统呢?

需要强调一点的是:希望大家能提前对ORTC有个大概的了解。

mediasoup的特性

脱颖而出mediasoup,可以用小而美来形容她:

  1. 支持目前主流的浏览器,chrome、Firefox、safari、Edge等等。
  2. 支持UnifiedPlanSdp和PlanBSdp两种方式;
  3. ORTC的api风格调用方式,避免了WebRTC的不足,使协议更简洁;
  4. json-rpc远程调用方法,协议清晰简洁。;
  5. 增加了支持simulcast;
  6. 编码简洁、结构清晰;

纵使她很让人喜欢,但也有不尽人意的地方:

  1. 上层接口是nodejs,这个根据我们情况集成可能有麻烦(后面我们讲讲怎么解决这个问题)。
  2. 功能比较简单,后续的开发较多;

安装mediasoup-demo

首先呢找一台linux服务器吧,推荐用ubuntu,安装最新版本的npm,快速安装可参考npm最新版本安装方法。另外网速不好的同学建议修改npm源npm源修改办法。

  • 首先克隆项目:
$ git clone https://github.com/versatica/mediasoup-demo.git
$ cd mediasoup-demo
  • 安装server:
$ cd server
$ npm install
  • 复制 config.example.js 重命名 config.js 然后可以自定义设置,目前先不做修改:
$ cp config.example.js config.js
  • 安装浏览器端app:
$ cd app
$ npm install
  • 全局安装 gulp-cli (可能需要使用 sudo):
$ npm install -g gulp-cli

本地运行Demo

  • 首先打开一个终端,运行server :
$ cd server
$ node server.js
  • 在另外一个终端中打开启动app
$ cd app
$ gulp live
  • 接着就可以用浏览器浏览了。

server的配置文件

这里对于config.js 强调一点:

  • 设置rtcAnnouncedIPv4(同rtcAnnouncedIPv6)以支持公网访问,局域网访问默认不需要修改。
 //局域网访问:默认不需要修改rtcAnnouncedIPv4 : null,//公网可以访问:将rtcAnnouncedIPv4修改为公网的IP,重启server即可(仅限有公网IP的云服务器)。rtcAnnouncedIPv4 : '111.111.111.111',
  • 设置rtcMinPort和rtcMaxPort:如果需要公网访问,记得防火墙放行,局域网访问默认不需要修改。
 rtcMinPort       : 40000,rtcMaxPort       : 49999,

mediasoup的原理

下图举例三个Client (browser或者客户端)同时加入一个房间,每个app同时发布一路视频和一路音频,并且接受来自其他app的音视频流,mediasoup内部的结构如下:

  • 每个Client创建两个Peerconnection分别用于发送和接受媒体流,发送端用于发送承载本地videoTrack和audioTrack的localStream,接收端接受来自其他Client的remoteStream;
  • 同时Room会为每个Client创建一个Peer,Peer管理两个Transport用于接受Client的媒体流和向Client发送媒体流;
  • Peer为对应的Client发送的videoTrack和audioTrack分别创建一个Producer(共2个);
  • Peer为其他两个Client发送的videoTrack和audioTrack分别创建2个Consumer(共2个);
  • Producer将媒体数据发送给每一个订阅者Consumer。

到此为止,可能会有一个简单的了解了,这里不再细分,有兴趣的话可以私下找我交流。

扩展与展望

mediasoup作为一个SFU服务器,有着出色的性能和极小的开销,多进程负载均衡的方式让我们体会到它的强悍。美中不足的是它的信令只有nodejs接口,并不能满足所有人的胃口。庆幸的是出于对c++的情怀,我将所有的nodejs逻辑翻译成了c++版本,并且开发了对应的native客户端:

  • c++版本服务器,支持跨平台的编译;保持原有mediasoup-worker代码99.9%完整和不变;
  • c++版本客户端,Qt5+WebRTC68,支持windows、Mac OS、Linux的编译,且与mediasoup-demo互通;
  • 客户端增加Gpu Video Accelerator,支持H264的硬件encode/decode功能。

未来将加入的新功能

  • 客户端和服务器的音视频流录制功能;
  • rtsp和rtmp与meidasoup的互通功能;
  • H264硬件编解码的持续优化。

现献上效果图
server端(有没有熟悉的味道):

Windows Client:

Windows Client与Web互通:

**Demo下载地址: https://pan.baidu.com/s/18Nfnu_MAafFnkyzBrJnq1g 提取码: jbtu **

总结

  • Windows下面与mediasoup-worker的管道通讯遇到了好多问题,好在坚持不懈的解决了,毕竟Libuv文档稀有;
  • nodejs用了ES6新特性,如promise,考虑到维护原版的特性和结构,千辛万苦地用promise-cpp勉强解决了;
  • 很久没有更新博客了,是因为没有新的成果,mediasoup的研究让我又有了新的乐趣,希望能坚持下去;
  • 上面涉及的代码后期可能考虑开源。

另外附上我的Github地址https://github.com/harvestsure欢迎互粉。

基于mediasoup的多方通话研究(一)相关推荐

  1. 基于mediasoup的多方通话研究 webRtc

    基于mediasoup的多方通话研究(一) 基于mediasoup的多方通话研究(一) mediasoup简介 mediasoup的特性 安装mediasoup-demo 本地运行Demo serve ...

  2. 基于mediasoup的多方通话研究(二)

    前言 时隔多年未更新这个领域的技术博客,时间和精力在大把浪费,实属愧疚.自责之下苦研数月,将mediasoup v3的nodejs部分全部翻译成了c++语法,其中99%的保留了原汁原味的架构和设计,其 ...

  3. Android 6.0 Phone 多方通话流程

    写在前面的话 本文主要分析Voice Call多方通话的流程,分析GSM和CDMA在多方通话不同的地方,研究的代码是Android 6.0的,目前只关注framework层. 1. 多方通话的概念 下 ...

  4. 【工大SCIR笔记】多方对话研究简述

    作者:哈工大SCIR 张开颜 1 介绍 人机对话技术是人工智能领域的一个重要研究方向,从手机智能助手,到闲聊陪护型聊天机器人,再到各种面向场景的任务型对话系统平台和智能家居,人机对话系统渐渐融入人类社 ...

  5. 【Java】基于TA-Lib技术分析指标研究

    [Java]SFC融媒体项目基于TA-Lib技术分析指标研究 [Java]SFC融媒体项目基于TA-Lib技术分析指标研究 0. 前言 1. TA-Lib介绍 2. TA-Lib数据准备 2.1 指标 ...

  6. 智能电话会议系统(11)---Android 6.0 Phone 多方通话流程

    Android 6.0 Phone 多方通话流程 写在前面的话 本文主要分析Voice Call多方通话的流程,分析GSM和CDMA在多方通话不同的地方,研究的代码是Android 6.0的,目前只关 ...

  7. 多方通话中的VOIP通信原理

    多方通话中的VOIP通信原理 多方通话中Internet是由众多不同的计算机网络互连而成的,遍布世界各地,使用标准的TCP/IP相互通信和交换数据.TCP/IP将要传输的计算机数据分组排队发送,每个分 ...

  8. Phone 多方通话流程(GSM CDMA)

    写在前面的话 本文主要分析Voice Call多方通话的流程,分析GSM和CDMA在多方通话不同的地方,研究的代码是Android 6.0的,目前只关注framework层. 1. 多方通话的概念 下 ...

  9. 基于图神经网络的聚类研究与应用

    Datawhale干货 本文编辑:Datawhale 用手机上网的时候,总有种感觉,推荐的视频是我爱看的,推荐的美食是我爱吃的,大家长的又好看,说话又好听. 有时候会对自己发出灵魂拷问:难道隐私被记录 ...

最新文章

  1. java 3gpp转mp3_Android音频以及音频播放器开发实例
  2. Nginx proxy_cache 使用示例
  3. PHP文件打包类和实例
  4. 解决img标签间距问题
  5. Datatables表格数据初始化时回调函数中修改要显示的值
  6. JavaScript Iframe富文本编辑器中的光标定位
  7. 嵌入式转linux服务器,嵌入式Linux中的Web服务器应用
  8. matlab解六元一次方程,如何用MATLAB编写六元一次方程组
  9. 计算机软件著作权申请教程攻略,提供 软件使用说明和源代码文档,全套模板
  10. “扫荡波”来袭 已造成大面积用户系统崩溃
  11. pcs7组态虚拟机中的服务器,PCS7冗余服务器配置
  12. HTML5物流大数据服务平台后台模板
  13. win7电脑访问共享提示“您可能没有权限使用网络资源”的解决技巧--win10专业版
  14. Python网页编程(CGI)
  15. 区块链为化解信任危机带来新契机
  16. nginx解决浏览器跨域问题_Nginx 反向代理解决浏览器跨域问题
  17. LeetCode刷题记
  18. source music play list 11-26 (edit 12-6 by clin003 )
  19. 网易云课堂---php基础第一天
  20. 乖离率背离公式_股市偏离率怎么计算 公式是怎么样的?-BIAS-技术指标-股票入门基础知识学习网...

热门文章

  1. 第八章-本-量-利分析
  2. 机器学习笔记:支持向量机(SVM)详细推导以及sklearn.svm.SVC的简单简介
  3. 有道云笔记不同步_有道云笔记笔记不能同步怎么办 有道云笔记无法同步解决教程...
  4. 以小组为单位,设计一个Windows应用程序,在该程序中定义一个学生类和班级类,以处理学生的学号,姓名,语文,数学和英语3门课程的期末考试成绩。
  5. 创新线上带货运营,佛山环球港助力“88购物狂欢节”
  6. mysql气象数据分析_气象行业 - 解决方案 - MySQL分布式数据库_开源数据库解决方案_数据处理技术提供商-爱可生...
  7. Eclipse搭建OSGi Equinox最小运行平台
  8. 一群前高盛集团员工仍认为可以用加密货币拯救华尔街
  9. 视觉媒体通信作业记录(一) 简易yuv420视频播放器
  10. <论文写作>国内论文引言怎么写?