Freswitch MCU

MCU实现及接口

一:概述

系统目标是对后台提供统一接口,实现对两个或以上由WebRTC推上来的流进行合流,输出合并之后的流至指定服务器。

WebRTC推流所在服务器称为Janus服务器,合流MCU所在服务器称为FreeSwitch服务器,合成输出的Rtmp流所在服务器称为Rtmpd服务器;

系统总体实现由四部分:

1)管理系统:提供RestAPI,负责接口后台指令,判定要合并的流所在Janus服务器,并向其发送合流消息;管理、分配FreeSwitch服务器;分配Rtmpd服务器;

2)Janus服务器:主播所在的推流服务器,负责接收WebRtc流,并根据管理系统的消息向FreeSwitch服务器推流;

3)FreeSwitch服务器:合流服务器,负责对RTC流进行合并,并根据管理系统的消息向Rtmpd服务器输出;提供查询、事件通知管理系统;

4)Rtmpd服务器:接收FreeSwitch合流之后的输出;

二:流程

1):系统后台向管理系统提交要合并的RTC流名称;

2):管理系统查询路由系统,确认RTC流存在,获得RTC流所在Room信息;

3):管理系统选择Janus Relay服务器,并通知其向发布服务器拉流;

4):管理系统分配FS服务器,分配Rtmpd服务器,分配ConferenceID。

5):管理系统通知Janus Relay服务器向FS推流(FS服务器IP、ConferenceID、SIP feedID)

6):Janus Relay服务器向FS服务器推流(注册名称,ConferenceID)

7):FS服务器收到Janus推流请求时,向管理系统请求配置;

8):当合流完成时,管理系统通知FS输出Rtmp流至给定地址;

9):管理系统收到系统后台停止合流请求时,向FS发送停止合流指令;

10):后台需要的状态,只能通过查询获得;

三 管理系统流程图

绿色方块管理模块的出口:是启动fsserver 和向janus server发送set_mcu

caller:
1) prepareFeeds--queryFeedInfo--selectRelayServer 获取最高层(省级)relay sever
2) regconference 从数据库中选fsserver
3) app::startConference
--rtmp::regRtmpAddr
---sysMediator::sendEventTo(case:fs)
---recordingActor::start(开始线程)
--fs::
(1) updateMemberStat
--sysmediator.py(case janus)发送("janus":"set_mcu")
(2) start recording conference(fs command) 

主要文件:

  • freeSwitch.py :主要是控制作用
    1) 给janus发送set_mcu,启动janus relay流工作. 启动fs conference
    2) 从db中选fsserver(这个没有什么特别策略)
  • Janus.py: 业务逻辑调用relay server? 外部通信使用urllib2发送request和接收respond
  • SysMediator.py 中介者模式.路由中心. sendEventTo函数实现发给fs,janus,rtmp的命令都要发给它中转.
  • class sysAct是基类,所有janus,fs,rmtp,app 模块调用的setEvent都是调用它的,它又wrapper了
  • SysMediator类发送,所以所有模块都是SysMediator sendEventTo函数。
    等于内部通信全都由基类实现.

消息流程图

注意:mcu 连麦是将原来的sfu改成mcu. sfu只有一个publisher,mcu变成2个publisher
fs manager制定两个janus relay server,分别拉这两个publisher的流.
然后relay 流给fs server,最后fs server将mcu 流分别发给relay server

分成两部分:1 是sip信令(交换sdp) 2 janus转一路给freeswitch,然后freeswitch将合流发回给janus
这两部分如何连接的呢? fs manager set_mcu-->janus sip 之后,创建mcu  session。 当videoroom转流的时候,遍历mcu session转发.

上图的时序图是对流程图的细化,加上了消息内容.
step1,2 管理系统选出fs server 和janus relay server并发送启动mcu 指令
step4,5 invite消息交互sdp 
step8,9,10,11,12 从publish1拉流到relay1 janus1
step13,14,15: relay1 audio/video 给freeswitch
step24: send mcu 合流结果给relay1 janus
step25 relay1 janus将合流结果转发给所有listeners

五:接口

1)管理系统

  http://xxxx.abc.domain:8282/start_conference?feed_id=xxx

  描述:将rtc流通过sip协议推往freeswitch,freeswitch创建conference(conference的id同feed_id一致)并开启rtc转rtmp功能

http://xxxx.abc.com:8282/start_muxing?caller_feed_id=xxx&&callee_feed_id=xxx

描述:启动合流

http://xxxx.qiyi.domain/freeswitch/conf(内部接口)

描述:服务系统提供给FreeSwitch的配置接口

 2)FreeSwitch

http://serverip:8888/api/stat_conference

描述:FreeSwitch提供给管理系统的会议室查询接口

3)Janus

http://serverip:8089/admin(内部接口)

描述:管理系统向Janus服务器发送推流消息(设计到jansus 流的还有roomid, appname, client_info, feed_name等信息

方法:HTTP POST

body:

http://10.121.32.61::8089/admin

备注:sip用户名和密码的值都为feed_id

开始mcu example

{"janus" : "set_mcu",

 "transaction":"123456789012",

 "admin_secret":"janusoverlord",

 "plugin":"janus.plugin.videoroom"

  "room":1,

  "feed_id":"1",

  "conference_id":4600,

  "status":"on",

  "mcu_ip":"10.153.3.68",

  "mcu_port":5060

  }

6:实现

管理系统实现:

1)数据库表

janusServerModel:Janus服务器

janusStreamModel:RTP流freeSwitchServerModel:FS服务器

freeSwitchConferenceModel:FS会议室

小结:
流程图说明了需要的模块,模块作用和总体流向;
时序图+steps说明:具体消息流程的每个消息说明.
外部通信接口实现(sip和python http),内部通信复用;
业务逻辑数据库操作实现+freeswitch 第三方合流

python fs manager:数据库操作,http通信. janus增加一个sip invite,其他就是复用转流

版权声明:本文为CSDN博主「fdsafwagdagadg6576」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/fdsafwagdagadg6576/article/details/122615590

生成海报
点赞 0

fdsafwagdagadg6576

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

分享灵动微MM32F3270微控制器的音频类产品参考方案

音频设备主要是对音频输入输出设备的总称,其包括的产品类型也很多,一般可以分为以下几种:功放机、音箱、多媒体控制台、数字调音台、音频采样卡、合成器、中高频音箱、话筒,PC中的声卡、耳机等&#

MS9331--4K hdmi信号放大延长器

一、基本介绍 MS9331是一款最高信号速率可达3Gbps的HDMI信号重定时芯片,同时支持I2S和SPDIF输出。在3Gbps速率下,MS9331可支持4KX2K30Hz和4KX2K(YCbCr420

如何使用MSGEQ7音频频谱分析仪芯片

音频响应项目 首先,让我们进行场景设置。假设我们想创建一些对声音有反应的东西,例如我当前的Audio-Reactive Box项目。您可能还记得,这涉及到一个装有假真空管的小假古董手提箱。这些灯管将使