视频布局设计上萃取了布局的几个要素:
子窗口数量、子窗口大小是否相同(对称)、子窗口相互是否有遮挡(叠加)。有遮挡的是叠加模式,无遮挡的是平铺模式。
横屏布局
格式 | 简述 |
非对称叠加 | enumLayoutStyleClassic |
非对称平铺 | enumLayoutStyleAsymTiling |
对称平铺 | enumLayoutStyleSymmetry |
POP | enumLayoutStylePOP |
(新增横屏布局)
竖屏布局
非对称叠加 :
布局中字窗口编号采用从上到下、从左到右的原则,对于很多分屏类型,这种原则都很容易理解,需要特殊说明的是非对称平铺的1+7模式。
详细参数:
具体Json字串格式如下("position":"topLeft"是指"position"在录制服务器的内部默认值是"topLeft"):
#################################################
{
"recordPreferSpeaker":"false", ### 是否主讲人优先,可选值:"true"(优先级高于主会场), "false"(优先级低于主会场),
"onlyMainImage":"0", ### 是否开启只录主会场或主讲人,可选址:"1"(开启),"0"(不开启),
"addDeviceName":"false", ### 是否叠加终端名称,可选值:"true"(叠加), "false"(不叠加),
"recordSmartContent":"false", ### 是否开启自动Content窗口切换,可选值:"true"(添加), "false"(不叠加),默认切换时间30秒, 优先级低于layout中的smart字段
"autoFill":"0", ###是否自动填充未指定对象的窗口. 默认值"3", 可选值 "0"(people/content都自动填充) "1" (people自动填充/content不自动填充) "2"(people不自动填充/content自动填充) "3"(people不自动填充/content不自动填充) 。从nconsole带下来.
"tiltWatermarkEnable": 1, ##是否开启斜水印
"tiltWatermarkContent": "xylink", ##斜水印内容
"OSD":{ ### On Screen Display,借用屏幕菜单调节的概念,表示叠加在视频上的附属信息。
"realtime":{ ### 叠加当前时间
"enabled":false, ### 是否启动功能,可选值:true(叠加), false(不叠加),
"position":"topRight", ### 叠加位置,可选值:"topLeft","topMiddle","topRight","bottomLeft","bottomMiddle","bottomRight"。左上、上、又上、左下、下、右下。
"size":"middle", ### 叠加字体大小,可选值:"small", "middle", "large"。小、中、大
"backColor":"black", ### 字体背景颜色,可选值:"black", "red", "white",
"textColor":"black", ### 字体本身颜色,可选值:"black", "red", "white",
"timeZone":"UTC+8", ### 显示的时区:可选值:"UTC+1", ~ "UTC+11", "UTC-1", ~"UTC-11"
},
"nameplate":{ ### 叠加终端名称
"enabled":false, ### 是否启动功能,可选值:true(叠加), false(不叠加),
"position":"bottomLeft", ### 叠加位置,可选值:"topLeft","topMiddle","topRight","bottomLeft","bottomMiddle","bottomRight", 目前设为固定的位置了,不可调整(大窗口默认左上角、小窗口左下角)
"size":"middle", ### 叠加字体大小,可选值:"small", "middle", "large",
"backColor":"black", ### 字体背景颜色,可选值:"black", "red", "white",
"textColor":"black", ### 字体本身颜色,可选值:"black", "red", "white"
},
"placard":{ ### 叠加滚动字幕
"enabled":false, ### 是否启动功能,可选值:true(叠加), false(不叠加),
"positoin":"top", ### 叠加位置,可选值:"top", "bottom","topLeft","topMiddle","topRight","middleLeft","middleMiddle","middleRight","bottomLeft","bottomMiddle","bottomRight" //富文字
"size":"middle", ### 叠加字体大小,可选值:"small","middle","large",
"backColor":"black", ### 字体背景颜色,可选值:"black","red","white", //富文字
"textColor":"black", ### 字体本身颜色,可选值:"black","red","white",
"speed":"static", ### 字幕滚动速度,可选值:"static","slow","normal","fast",
"slogan":"Welcome to ShenZhen", ### 字幕内容。 //富文字
"transparency":50, ### 文字背景透明度, 0不透明, 100完全透明. 可选值: [0 - 100]. ### //富文字
"textTransparency":56, ### 文字透明度, 0不透明, 100完全透明. 可选值: [0 - 100]. ### //富文字
"sloganPropList": [ ### sloganPropList元素的个数一般来说等于slogan的字符个数,可以指定每一个字符的透明度/颜色/背景色/字体大小 //富文字,sloganPropList是否为空,作为富文字的开关.
{
"transparency":50, ### 文字透明度, 0不透明, 100完全透明. 可选值: [0 - 100], // 不要使用,无法给单个文字指定透明度.
"backColor":"0xfffff", ### 字体背景颜色,可选值:标准RGB, // 最好不用,每个文字都用不同的背景色,是非常难看的.
"textColor":"0x000000", ### 字体本身颜色,可选值:标准RGB,
"fontSize":30, ###字体大小 [1 - 120]
"bold":0/1,###字体是否加粗
"italic":0/1 ###是否斜体
"fontType":0 ### 字体: 0 微软雅黑(默认)、1 黑体、2 宋体、3 楷体、4 仿宋、5 Arial、6 Times New Roman
"applyNum": 1, ###表示当前元素应用到包含当前字符的后续几个字符, 0表示持续到结尾.
}
]
},
"watermark":{ ### 背景/斜水印
"enabled":false, ### 是否启动功能,可选值:true(叠加), false(不叠加)
"slogan":"Welcome to ShenZhen", ### 字幕内容。 //富文字
"charSpacing":30. ## 列距. 指两个文件之间的距离
"rowSpacing":30. ## 行距
"colSpacing":30. ## 列距. 指两段文字之间的水平间距.
"angle": 0 -> 360 clock-wise顺时针
"transparency":50, ### 文字透明度, 0不透明, 100完全透明. 可选值: [0 - 100]
"textColor":"0x000000", ### 字体本身颜色,可选值:标准RGB,
"fontSize":30, ###字体大小 [1 - 120]
"bold":0/1,###字体是否加粗
"italic":0/1 ###是否斜体
"fontType":0 ### 字体: 0 微软雅黑(默认)、1 黑体、2 宋体、3 楷体、4 仿宋、5 Arial、6 Times New Roman
},
"meetingname":{ ### 添加课程名称+时间
"enabled":false, ### 是否启动功能,可选值:true(叠加), false(不叠加),
"position":"bottomLeft", ### 叠加位置,可选值:"topLeft","topMiddle","topRight","bottomLeft","bottomMiddle","bottomRight",
"size":"middle", ### 叠加字体大小,可选值:"small", "middle", "large",
"backColor":"black", ### 字体背景颜色,可选值:"black", "red", "white",
"textColor":"black", ### 字体本身颜色,可选值:"black", "red", "white",
"timeZone":"UTC+8", ### 显示的时区:可选值:"UTC+1", ~ "UTC+11", "UTC-1", ~"UTC-11",
"arrange":"top-down", ### 课程时间的排列方式:可选值:"top-down(课程上时间下)", "down-top(课程下时间上)", "left-right(课程左时间右)", "right-left(课程右时间左)"
“name”: "" ###课程名称
},
"logo":{ ### 叠加图片水印
"enabled":false, ### 是否启动功能,可选值:true(叠加), false(不叠加),
"fileName":"xylink_logo.png", ### 叠加图片的URL
"position":"topLeft" ### 叠加位置,可选值:"topLeft", "topRight"
},
"background":{
"enabled":false, ###功能开关
"fileName":"background.jpg", ###背景图片url 只支持jpg
}
},
"layout":{ ### 布局相关配置
"action":"cache", ### "cache" 缓存当前操作执行之前的layout设置;"recovery" 恢复成缓存的layout设置。
"screen":"landscape", ### 横竖屏类型,可选值"landscape"(横屏),"portrait"(竖屏)。
"people":{ ### 只有people情况下的布局配置
"maxCells":8 , ### 最大窗口数量,实际参会人数超过maxCells时,只显示maxCells个人。每种布局类型有默认的最大窗口数量,view设置为"asymOverlap" 时为 6 "asymTiling" 、"pop" 为8 "symTiling"为9,当选择了竖屏类型,默认maxCells最大为3。有效值的区间 asymOverlap 时为 0 ~ 6 ,asymTiling、pop 时为 0 ~ 8 ,symTiling时为 0 ~ 9
"view":"POP", ### 布局类型,可选值: "asymOverlap"(非对称叠加), "asymTiling"(非对称平铺), "symTiling"(对称平铺),"POP"(参见POP布局定义),设置"screen":"portrait" 后,该选项不生效,都会被设为非对称叠加(竖屏)类型。
"mode":"auto", ### 布局模式:"auto"(自动布局:主会场优先),"autoas"(自动布局:语音激励优先), "force"(指定布局:由"specified"字段指定)
"specified":["content@BRUCE#1", "20741996@SOFT", "60306324@BRUCE#102"] ### 指定显示终端URLs, "mode":"force"时生效,按排列顺序,#后面数字为组id(groupId),组id为0时是people(可不加#0),为1时是content(规定content固定传content@BRUCE#1),其他值时为辅流。设置竖屏后,仅支持设置最多3且不超过maxCells个终端画面。
"specifiedRoster": [{ ### specified字段的补充信息,与specified字段对应
"items": [{
"di": "content@BRUCE", ## endpoint id,与“specified”字段对应,但后面不能加#1
"dn": "内容", ## endpoint name
“groupId”:1 ## 和上面specified后面的#数字必须一样
}]
}, {
"items": [......]
}]
"maxCellsMultiTrack":1, ## 最多允许显示的辅流数量,mode为force时该参数无效
"preferMultiTrack":false, ## 辅流是否优先于主流显示,需要"permutationMultiTrack"值是“alternation”才生效
"permutationMultiTrack":"alternation" ## 主流和辅流排列方式:"grouping"(按分组分类放置,所有主流归一类,所有辅流归一类),"alternation"(交替放置,同设备的主流和辅流放在一起)
"polling":false, ### 是否开启轮询,可选值"false"(不开启),"true"(开启)。"polling"比"autoFill" 有更高的优先级
"pollingInterval": 15, ### 轮询间隔,默认值"15"(单位秒),"5秒、10秒、15秒、20秒、30秒、1分钟、2分钟、5分钟"
"viewTune":"POP_2_bottomright" ### 用于对布局进行细微的调整. 默认值 "POP_2_bottomright", 可选值 "POP_2_bottomright" "POP_2_upright" "POP_ur_smart_2_br"(小窗口默认在右上
角,但是智能切换后,小窗口在右下角). 作为一个通用的字段, 可选值可后续增加.用于对各种布局进行微调.目前只对content布局有效,people下原则上不该传递这个参数
},
"content":{ ### 当会议中分享content情况下的布局配置
"maxCells":8 , ### 最大窗口数量,实际解码视频超过maxCells时,只显示maxCells个人(包括content)。每种布局类型有默认的最大窗口数量,view设置为"asymOverlap" 时为 6 "asymTiling" 、"pop" 为8 "symTiling"为9,当选择了竖屏类型,默认maxCells最大为3。有效值的区间 asymOverlap 时为 0 ~ 6 ,asymTiling、pop 时为 0 ~ 8 ,symTiling时为 0 ~ 9
"view":"POP", ### 布局类型,可选值: "asymOverlap"(非对称叠加), "asymTiling"(非对称平铺), "symTiling"(对称平铺),"POP"(参见POP布局定义),设置"screen":"portrait" 后,该选项不生效,都会被设为非对称叠加(竖屏)类型。
"mode":"auto", ### 布局模式:"auto"(自动布局:主会场优先),"autoas"(自动布局:语音激励优先), "force"(指定布局:由"specified"字段指定)
"specified":["content@BRUCE#1","60306324@BRUCE#102","20741996@SOFT"] ### 指定显示终端URLs, "mode":"force"时生效,按排列顺序,#后面数字为组id(groupId),组id为0时是people(可不加#0),为1时是content(规定content固定传content@BRUCE#1),其他值时为辅流。设置竖屏后,仅支持设置最多3且不超过maxCells个终端画面。
"specifiedRoster": [{ ### specified字段的补充信息,与specified字段对应
"items": [{
"di": "content@BRUCE", ## endpoint id,与“specified”字段对应,但后面不能加#1
"dn": "内容" ## endpoint name
“groupId”:1 ## 和上面specified后面的#数字必须一样
}]
}, {
"items": [......]
}]
设置竖屏后,仅支持设置最多3且不超过maxCells个终端画面。 可以指定对象的分组,包括people,content,以及其它分组,支持同时指定一个对象的多个分组。
"prefer":true, ### 指示是否content(第一分屏)幕显示,可选值:true(#1分屏), false(#2分屏), 旧版本的小鱼没有content下指定布局的功能,只能用该字段设定content是否在最大的那个位置上,这是个版本兼容字段
"smart":false, ### 指示content是否自动切换到第二分屏,可选值:true(内容画面无变化samrtWaitTime秒后或有人物画面有特殊行为,人物画面自动切换到#1分屏;内容有变化则切回#1分屏;), false(不启动自动切换),
"smartWaitTime":30, ### "smart":true时,屏幕无变化情况持续samrtWaitTime秒时触发自动切换到#2分屏,单位:秒。
"maxCellsMultiTrack":1, ## 最多允许显示的辅流数量,mode为force时该参数无效
"preferMultiTrack":false, ## 辅流是否优先于主流显示,需要"permutationMultiTrack"值是“alternation”才生效
"permutationMultiTrack":"alternation" ## 主流和辅流排列方式:"grouping"(按分组分类放置,所有主流归一类,所有辅流归一类),"alternation"(交替放置,同设备的主流和辅流放在一起)
"polling":false, ### 是否开启轮询,可选值"false"(不开启),"true"(开启)。"polling"比"autoFill" 有更高的优先级
"pollingInterval": 15, ### 轮询间隔,默认值"15"(单位秒),"5秒、10秒、15秒、20秒、30秒、1分钟、2分钟、5分钟"
"viewTune":"POP_2_bottomright" ### 用于对布局进行细微的调整. 默认值 "POP_2_bottomright", 可选值 "POP_2_bottomright" "POP_2_upright" "POP_ur_smart_2_br"(小窗口默认在右上
角,但是智能切换后,小窗口在右下角). 作为一个通用的字段, 可选值可后续增加.用于对各种布局进行微调.目前只对content布局有效,people下原则上不该传递这个参数
"autoFillPreferSpeaker": 1, ###自动填充时是否将主讲人或主会场(由recordPreferSpeaker字段决定是主讲人还是主会场)固定放在最前面的空位,值为1,若不是去掉这个字段
}
}
}
参数值选择: 适用于指定了对象,mode为force的情况
一画面 | 1 | "asymOverlap"(非对称叠加), 也可以传“POP” | - |
二画面-1 | 2 | "POP" | "POP_2_bottomright" |
二画面-2 | 2 | "POP" | "POP_2_upright" |
二画面-3 | 2 | "symTiling"(对称平铺) | - |
二画面-4 | 2 | "asymTiling"(非对称平铺) | - |
三画面-1 | 3 | "asymTiling"(非对称平铺), 也可以传“POP” | - |
三画面-2 | 3 | "symTiling"(对称平铺) | - |
四画面 | 4 | "asymTiling"(非对称平铺) 也可以传“POP” | - |
五画面 | 5 | "asymTiling"(非对称平铺) 也可以传“POP” | - |
八画面 | 8 (最多指定8个对象, 可指定空), "specified"的size必须等于8,还可以支持多分组选择. 例如: "specified":["60306324@BRUCE", "", "60306324@BRUCE#102", "", "20741996@SOFT", "", "", ""] 如果指定content用60306324@BRUCE#1,如果指定多分组用60306324@BRUCE#102. | "asymTiling"(非对称平铺) 也可以传“POP” | - |
十六画面 | maxCells传16,specified和specifiedRoster字段必须传满16个 | "symTiling"(对称平铺) | |
二十五画面 | maxCells传25,specified和specifiedRoster字段必须传满25个 | "symTiling"(对称平铺 |
参数值选择: 适用于未指定任何对象,model参数为auto的情况
一画面 | 1 | "asymOverlap"(非对称叠加), 也可以传“POP” | - |
二画面-1 | 2 | "POP" | "POP_2_bottomright" |
二画面-2 | 2 | "POP" | "POP_2_upright" |
二画面-3 | 2 | "symTiling"(对称平铺) | - |
二画面-4 | 2 | "asymTiling"(非对称平铺) | - |
三画面-1 | 3 | “POP” | - |
三画面-2 | 3 | "symTiling"(对称平铺) | - |
四画面 | 4 | “POP” | - |
五画面 | 5 | “POP” | - |
八画面 | 8 | “POP” | - |
十六画面 | 16 | "symTiling"(对称平铺) | |
二十五画面 | 25 | "symTiling"(对称平铺) |
另外智能多画面情况下mode为“auto”,view的传值必须是“POP”,这样可以保证二个人进入时,布局大小是窗口叠加模式。
指定布局下,各种情况列举:
1、people下指定布局,若有指定对应人,则mode为force,specified和specifiedRoster传递指定人信息,自动填充和轮询有效
2、content下指定布局,若有指定,则content必须指定位置(一画面除外),mode为force,specified和specifiedRoster传递指定人信息,自动填充和轮询有效,智能切换无效
3、people下指定布局,若没有指定,则mode为auto,maxCells是选定的画面数,自动填充和轮询无效
4、content下指定布局,若没有指定,则mode为auto,maxCells是选定的画面数,自动填充和轮询无效,智能切换有效
5、content下指定布局且是一画面,可以指定人,mode依然是force
一些设计原则:
1、mode为force的情况下,自动填充和轮询才有效
2、mode为auto的且有content的情况下,智能切换才有效