Skip to content

Latest commit

 

History

History
2844 lines (2576 loc) · 137 KB

conf_live_record.md

File metadata and controls

2844 lines (2576 loc) · 137 KB
<title>会议录像与直播重构方案设计</title> <style> </style>

 

目录

会议直播与录相方案设计... 0

需求... 0

产品功能... 0

功能性需求... 0

会议直播... 0

会议录像... 0

非功能性需求... 0

产品使用场景... 0

系统设计... 0

架构设计... 0

会议总体架构(非集群) 0

功能模块设计... 0

MCS的内部结构... 0

RCS与MLG内部结构... 0

模块消息交互与流程... 0

会议录像基本流程... 0

会议直播基本流程... 0

同时开始录像与直播流程... 0

同时直播与录像时,先停止直播流程... 0

在已有直播上切换屏幕共享直播流程... 0

直接开启屏幕共享直播流程... 0

一个会议同时有两个或以上直播或录像流程... 0

多人自动模式添加,删除成员流程... 0

多人自动模式手动模式切换流程... 0

第三方会议接入流程... 0

数据结构设计... 0

会议录像与直播实体关联图... 0

会议实体信息... 0

会议成员信息... 0

录像会话... 0

录像文件列表... 0

直播会话... 0

系统测试... 0

测试用例... 0

 

 

 

 

在使用实时音视频的过程中,经常会有两种情况,一是需要将音视频通话,会议的全过程录像,方便过后回看以及相应处理。如重要会议需要事后回看学习,等等;另外一种是通话或会议时,需要将全过程对外发布,让更多不在现场的人在第一时间能了解到会议实时情况,所以需要将其广播出去。也就是将会议直播出去。如在线教育,直播连麦等等。

从上面的需求可以归类成两个最基本功能,就是会议录像与直播,针对这两个功能,在一些现实中会在这两个基本需求的基础上,来满足不同应用场景。为了让系统能很好适应这些些场景,下面从功能性或非功能性方面详细细化这两大基础功能。

我们会议系统现在部分功能都已经实现,但随着业务,应用场景的不段变化,现在方案实现,越来越复杂,有新需求变更时,实现也越来越来麻烦。为了解决目前这些问题,需要对会议直播与录像进行重构,以更好方式来完成已有业务功能,以及更容易适应新的需求变更。

功能顶

功能点

功能级别

选顶

会议直播

多人单人直播

必选

同会议可输出多个直播

必选

屏幕共享直播

必选

输出布局指定

必选

直播启停控制

必选

人离开画面,暂停直播

可选

两个会议主播混屏

可选

只输出音频或视频

必选

会议录像

支持以上会议直播同样功能

必选

录像文件支持mp4,flv

必选

支持录像h264祼流与aac祼流文件

可选

录像能指定输出的分辨率大小等

必选

支持截图jpg

可选

 

多人单人直播

可以把会议的单人成员的音视频输出直播,多人混屏输出直播

同会议可输出多个直播

       同会议所有成员,可以任一组合,输出到多个直播,也就是多对一,如会议成员1,2,3 4   12输出直播频道1, 【23】输出到直播2 , 【1234】输出到直播3

屏幕共享直播

每个成员都可以有屏幕共享输出,需要确定会议的成员视频与该成员的共享屏幕是否同时输出, 屏幕共享与成员视频,可指定任一输出,还是二者都可以

输出布局指定

输出时可以指定屏幕的布局,需要确定最大人数,也需要考虑横屏与竖屏,剪栽模式,画面黑边处理

 

直播启停控制

会议在直播中,每个成员加入或退出需要自动加入或退出直播,所有人退出,自动停止所有直播

人离开画面,暂停直播

会议直播中,画面中人离开,需要自动停止直播,该功能需要依赖AI目标检查功能

两个会议主播混屏

旁路直播中,两个主播pk画面

只输出音频或视频

只输出音频或视频

录像文件支持mp4,flv

录像支持flvmp4, 需要考虑单个会议文件的时长,是否需要考虑分割成多个文件

支持录像h264祼流与aac祼流文件

可以将输出单独录像成h264,aac祼流

 

功能顶

功能点

功能级别

选顶

会议录像与直播

1.一个会议最大支持人数,会议直播与录像的输入,输出数

必选

2.会议直播的最大延迟

必选

3.录像与直播画面的连续性

必选

 

1.一个会议最大支持人数,会议直播与录像的输入,输出数

会议人数,是指与参加会议的实际人数; 输入数是指需要录像或直播的人数,输出数是

向直播推流的频道数与录像输出的个数之后

2. 会议直播的最大延迟

    会议的视频与直播后的视频最大允许的延迟

3. 录像与直播画面的连续性

    画面花屏,或卡顿的次数,在直播或录像过程有可能网络掉线后马上恢复

1.    创建会议,开始直播,中间有人加入会议,有人退出会议

2.    创建会议,多人在开会中,现在还没有直播,在某个时候,需要开始直播

3.    会议还没有开始,尝试开启直播

4.    会议开始后,想看某人的直播

5.    会议开始后,想看多人的混屏直播

6.    想看某人的共享屏幕,同时想看该人的成员视频

7.    想把直播输出的画面,同时也能回看录像

8.    我现在正在看共享屏幕,突然我想看成员的视频, 反之,也一样

9.    我想看多人的的共享屏幕

10.我只需要会议中某人的音频或视频,

11.我需要会议中某画面中的图片文件

12.我想在某个时候开始直播与录像

13.会议结束后,我要看该会议所有录像,包括个人,多个,屏幕共享等等

14.该会议是永久会议,这次结束后,下次开始时,我需要自动录像与直播

15.我用手机看多人会议直播,画面需要根据手机屏幕自适应

16.会议直播过程,与会的终端突然没有音视频流,可以网络断线等等

17.会议直播中, 终端禁止音频,视频

18.会议直播中,频繁退出加入会议

19.会议直播中,切换前后摄象头

20.会议直播中,开启共享屏幕

21.会议直播中,会议加入人数到达最大数怎么样

22.会议直播中,突然一下加入多个人,或退出多人

 

 

Mcs是媒体系统的总的控制中心,下图只例出与会议直播与录像相关的模块结构

MLG内部结构

 

 

RCS内部结构

 

1.    首先主持人打开app,登录会议系统,并创建会议准备开会

2.    主持人开会,通过RestServer,CCM, CallRouteGW,MCS,创建会议,媒体通道等资源信息基中包括mas的对外地址,端口等,同时通过mcs开启会议录像

3.    客户端获取媒体通道等信息后,向指定的地址与端口发送音视频媒体流

4.    Mcs开启会议录像过程:

5.    首先mcsrcs获取接收媒体信息,包括音频与视频接收端口

6.    Mcs请求mps创建一个通道,将混音媒体流发送到rcs

7.    Mcs请求mcu创建一个房间,同时通知mas将成员的视频流发送到mcu, 通知mcumcu混屏后的流发送到rcs

8.    Rcs收到mcu的视频,mps的音频后, 将视频保存成h264, 音视保存aac, 同时将音视频复合后,生成flvmp4文件,保存在磁盘上

9.    主持人会议结束,在app结束会议,通过RestServer,CCM, CallRouteGW,MCS删除相关通道,释放相关资源,同时通过mcs停止会议录像

10.Mcs停止会议录像过程:

11.Mcs请求mps停止向rcs发送音频数据,同时删除相关通道

12.Mcs请求mas停止向mcu发送相关视频数据,同时通知mcu通知向rcs发送视频数据,在mcu中释放会议房间的所有资源

13.RCS停止写录像文件,生成会议录像列表

14.录像点播过程:

15.客户端通过RESTServer, CCM, MCS根据会议号,时间范围,获取会议列表,得到相关会议录像的点播url

16.客户端通过点播url,打开录像视频回看

开会与停止会议流程:

 

启停录像流程

1.    首先主持人打开app,登录会议系统,并创建会议准备开会

2.    主持人开会,通过RestServer,CCM, CallRouteGW,MCS,创建会议,媒体通道等资源信息基中包括mas的对外地址,端口等  

3.    客户端获取媒体通道等信息后,向指定的地址与端口发送音视频媒体流,会议开始

4.    Mcs开启会议直播过程:

5.    主持人或其他人员,选择会议,并发送开始直播命令

6.    Mcs收到开始直播命令后,向mlg获取接收媒体信息,包括音频与视频接收端口

7.    Mcs请求mps创建一个通道,将混音媒体流发送到mlg

8.    Mcs请求mcu创建一个房间,同时通知mas将成员的视频流发送到mcu, 通知mcumcu混屏后的流发送到mlg

9.    mlg收到mcu的视频,mps的音频后,将音视频复合后封装flv后通过rtmp发送到直播服务器

10.主持人会议结束时,在 app结束会议,通过RestServer,CCM, CallRouteGW,MCS删除相关通道,释放相关资源,同时通过mcs停止会议录像

11.Mcs停止会议录像过程:

12.Mcs请求mps停止向mlg发送音频数据,同时删除相关通道

13.Mcs请求mas停止向mcu发送相关视频数据,同时通知mcu通知向mlg发送视频数据,在mcu中释放会议房间的所有资源

启停直播流程

1.    会议先开始录像流程, 录像开始

2.    向会议发送开始直播命令

3.    Mcs收到直播命令,向mlg获取媒体端口等资源,同时向直播系统申请直播推流地址,

直播地址可以是内网地址,这个可以通过参数配置

4.    根据本次直播请求生成一个新的ssrc, ssrc在本次直播中是唯一的

5.    根据ssrcmps创建一个新的通道,同时通知mpsmlg发送混音流

6.    Mcs mcu发送创建房间命令,如果mcu返回已存在,跳过,否则创建一个新的房间

7.    Mcs通知mas,需要将哪些人的视频发送到mcu, 可以所有人或指定某些人

8.    Mcs通知mcu 创建一个observer, 混流指定视频,输出到mlg视频端口

9.    Mlg收到mps的音频与mcu的视频后,封装成rtmp流,发送到直播系统

1.    系统当前一个会议有一个录像与直播

2.    首先向mcs发送停止直播命令

3.    Mcs收到停止直播命令后,向mlg发送停止通知,mlg停止向直播服务器推流。

4.    Mcs通知mps,删除该直播的音频通道

5.    Mcs通知mcu删除该直播的observer

 

1.    首先开启会议直播,默认是成员视频

2.    通过本次直播sessionId, 发送切换成员命令,成员列表带共享屏幕类型

3.    Mcs收到命令,检查成员列表,哪些是屏幕视频,哪些是成员视频,分别通知到mas,将相关媒体发送到mcu

4.    根据成员列表,重置mcuobserver,输出相关视频到mlg

 

1.    通过api接口发送开启直播命令,其中成员列表参数,带有屏幕共享类型

2.    生成新的直播会话记录,分别向mlgmcu, mps获取相关资源

3.    Mcs收到命令,检查成员列表,哪些是屏幕视频,哪些是成员视频,分别通知到mas,将相关媒体发送到mcu

5.    根据成员列表,创建mcuobserver,输出相关视频到mlg

4.    通知mps将混音流发送mlg

5.    Mlg收到mps的音频与mcu的视频后,封装成rtmp流,发送到直播系统

1.         开始第一个直播,指定输出成员列表,生成一个直播会话记录,开始直播

2.         开始第二直播,指定输出成员列表,生成一个新直播会话记录,开始第二个直播

 

1.    开始直播,设置自动模式

2.    Mcs将当前会议所有人,设置输出列表

3.    有新人加入会议, 自动将该入,加入直播输出列表中

4.    有人退出会议,自动将该人,播出列表中删除,

 

1.    自动模式输出所有人视频

2.    切换手动模式后,需要指定输出成员

3.    手动模式,如果有人退会议,且在输出列表中,需要删除,如是不在列表中,不需要处理

待补充

会议会议成员(1对多)

会议录像会话(1对多)

会议直播会话(1对多)

录像会话会议成员(多对多)

直播会话会议成员(多对多)

会议ID

会议号

成员列表

录像会话列表

直播会话列表

   

     成员ID

     会议ID

     uuid

     音频参数

     视频参数

     共享屏幕参数

     录像会话列表

     直播会话列表

录像会话id

会议ID

输出ssrc

Mcu地址与端口

Mps地址与端口

录像成员列表

输出类型:

输出名称

输出路径

画面布局参数

媒体输出参数

会话状态

开始时间

结束时间

 

录像会话ID

会议ID

录像时长

录像大小

录像文件全名

下载地址

录像状态

开始时间

结束时间

 

直播会话id

会议ID

输出ssrc

Mcu地址与端口

Mps地址与端口

直播成员列表

直播频道ID

直播UID

直播推流地址

直播播放地址

画面布局参数

媒体输出参数

会话状态

开始时间

结束时间

用例详细描述请参考<<会议直播与录像用例.xlsx>>

用例编号

测试用例描述

1

创建会议同时加入会议,并开启直播

2

会议已创建且已直播,有人加入会议

3

会议已创建且已直播,已有多人加入会议,再加入会议

4

多人加入会议直播,1237203637人加入会议

5

会议同时多人加入会议

6

同一人加入会议后,又退出会议

7

多人同时退出会议

8

会议创建人员,解散会议

9

会议中最后一个人退出

10

多种类型终端加入会议,pc, 手机,硬件等

11

停止会议直播后,重新设置新的直播参数后直播

 

 

12

启动不存在会议直播

13

停止不存在会议直播

14

加入不存在会议的成员

15

退出不存在会义中的成员

16

一次多入加入会议时,期中有非法成员

 

 

17

会议直播时,mlg服务异常

18

会议直播时,mcu服务异常

19

会议直播时,mas服务异常

20

会议直播时,mps服务异常

21

会议直播时,mcs服务异常

 

 

22

同一会议中,每个成员1个直播频道

23

同一会议中,一个人输出2个直播频道

24

同一会议中,所有人输出一直播频道,其中有人会输出另外的直播频道

25

同会议,同一人输出,51020个直播频道

26

同会议,输出多个直播频道,510203040直播频道

 

 

27

在会议中,有人开启共享屏幕,输出直播

28

需要看人员的成员视频与共享屏幕,直播

29

会议中,有人已开启共享屏幕,另外有也尝试开启共享屏幕

30

共享屏幕输出到一个直播频道,成员视频输出到另一人直播频道

31

会议直播没有开启,直接共享屏幕直播

32

来回切换共享与成员视频

 

 

33

会议直播开始指定分辨率 如1280x720x15

34

修改新的参数输出

35

横屏输出

36

竖屏输出

37

会议直播中,不断增减成员,

38

一会议输出画面输出最大成员数

39

参数输出一些不支持的参数如1123x553

 

 

40

会议一开始,就开始直播

41

会议开始后,多人进入会议后,开始直播

42

创建会议后,没有任何人加入会议的视频时开始直播

43

会议开始直播,不断有入加入会议

44

会议直播中, 不断有人退出会议

45

会议直播中,有多人正在开会,直接解散会议

46

会议开始后,指定某人或某几人直播输出,其他不输出

47

会议直播输出时,没有在直播中的人退出会议

48

同会议,有多个直播输出,直播中的人员退出会议

49

所有人退会议或解散时,停止所有该会议所有直播输出

50

指定会议成员直播时,成员id不在该会议中

 

 

51

会议开始后,直播输出只有声音

52

会议开始后,直播输出只有视频

53

会议开始后,有两个直播频道,一个只输出声音,一个只输出视频

 

 

 

 

54

同一会议,开启直播与录像, 直播与录像画面是一样的

55

同一会议,直播输出成员视频,录像输出共享屏幕

56

同一会议,直播输出共享屏幕,录像输出成员视频

57

同一会议,直播输出所有成员视频, 录像输出某个成员视频

58

同一会议,有直播输出与录像输出,停止直播输出

59

同一会议,有直播输出与录像输出,停止录像

60

同时直播与录像输出某人视频, 之后该人退出会议, 还有其他人

61

同时直播与录像输出某人视频, 之后该人退出会议, 没有其他人

 

 

62

会议没有结束, 中途录像启停多次

63

会议开始后,一直没有停止过,长达123456个小时,或更长的时间

64

会议开始,录像开始后,马上停止录像,时间相隔比较短

65

录像开始时,指定输出flv文件

66

录像开始时,指定输出mp4文件

67

录像开始时,指定同时输出flv,mp4文件

68

录像开始时,视频指定输出h264祼流文件

69

录像开始时,音频指定输出aac文件

70

录像mp4,flv的同时,输出h264,aac文件

71

有可能有多个录像,需要获取会议的所有录像文件,需要知道录像时间,大小等等

72

会议开始后, 将输出可以生成jpg截图

73

jpg截图一直生成,直到会议结束

74

会议输出截图,不断输出当前画面截图

 

 

75

直播后,会议本地预览视频与直播显示的视频延迟

76

mcumlg 在同一机器,会议直播

77

mcumlg 不在同一机器,但在同一局域网内,会议直播

78

mcumlg使用外网会议直播

79

会议视频的有卡顿,检查直播与录像的画面

80

会议视频非常流畅,无卡顿,检查会议直播与录像后的画面

81

会议直播后,在终端关闭视频,直播画面应该消失

82

直播后,终端关闭视频后,又开启视频

83

直播后,终端关闭声音

84

直播后,终端关闭声音,以开启声音

85

直播后,终端同时关闭声音与视频