2024/01/11 15:52:18
如何处理直播 SEI 相关问题?
声网 SEI 规范
在默认情况下,声网进行服务端转码推流时,会在转码后的 H.264 或 H.265 的 SEI(Supplemental Enhancement Information)信息中,增加当前视频的编码信息。该信息为 JSON 格式的字符串,具体示例如下:
JSON
{
"canvas": {
"w": 640,
"h": 360,
"bgnd": "#000000"
},
"regions": [
{
"uid": 1,
"alpha": 255.0,
"zorder": 1,
"volume": 50,
"x": 0,
"y": 0,
"w": 320,
"h": 360
},
{
"uid": 2,
"alpha": 255.0,
"zOrder": 1,
"volume": 89,
"x": 320,
"y": 0,
"w": 320,
"h": 360
}
],
"ver": "20190611",
"ts": 1535385600000,
"app_data": ""
}
各项参数定义如下:
参数 | 描述 |
---|---|
canvas | 画布信息,画布的参数信息如下:
|
regions | 所有参与转码合流的主播的信息(包含布局信息),为 region 的列表。在客户端或服务端旁路推流 API 中设置的的 transcodingUsers 或 videoOptions /audioOptions 信息。region 的参数信息如下:
|
ver | 版本信息,当前版本为 20190611。 |
ts | 生成该信息时的 Unix 时间戳,单位为毫秒。 |
app_data | 自定义信息。在客户端或服务端旁路推流 API 中设置的 transcodingExtraInfo 或 seiOptions.customized 字段。 |
SEI 构成
下面是一段 SEI 帧的内容:
0000 0664bd7b 22617070 5f646174 61223a22 .d.{"app_data":"
0010 222c2263 616e7661 73223a7b 2262676e ","canvas":{"bgn
0020 64223a22 23666666 66666622 2c226822 d":"#ffffff","h"
0030 3a363430 2c227722 3a333630 7d2c2272 :640,"w":360},"r
0040 6567696f 6e73223a 5b7b2261 6c706861 egions": [{"alpha
0050 223a3235 352c2268 223a3634 302c2275 ":255,"h":640,"u
0060 6964223a 33313031 32373137 39312c22 id":3101271791,"
0070 766f6c75 6d65223a 32382c22 77223a33 volume":28,"w":3
0080 36302c22 78223a30 2c227922 3a302c22 60,"x":0,"y":0,"
0090 7a6f7264 6572223a 317d5d2c 22747322 zorder":1}],"ts"
00a0 3a313533 37393630 32333537 38332c22 :1537960235783,"
00b0 76657222 3a223230 31383038 3238227d ver":"20190611"}
字段说明:
06
:SEI 帧。64
: 用户定义的帧类型:- 声网默认该类型为 100。
- 其他类型。用户需要进行额外处理和逻辑保护。
bd
:表示帧长度。下面是一些以十进制和十六进制展示的计算示例:- 帧长度为 922,即 255(
0xff
)+ 255(0xff
)+ 255(0xff
)+ 157(0x9d
),则bd
表示为ffffff9d
。 - 帧长度为 572,即 255(
0xff
)+ 255(0xff
)+ 62(0x3e
),则bd
表示为ffff3e
。 - 帧长度为 234,即被 255 整除为 0 且余数为 234(
0xea
),则bd
表示为ea
。
- 帧长度为 922,即 255(
- 其余部分:帧内容。
常见问题
Q:是不是只要在这儿用了 SEI,就不能用信令传布局了?SDK 传的是同一个字段,传递方式(信令或 SEI)只能二选一?
A:这个是服务端推流时,在 H264/H265 的 SEI 帧中添加的信息,跟 APP 上行发送的数据不是一个概念。与 APP 上行发送的数据唯一相关的是 app_data 字段。
在新直播系统中,有效的方式仅有 LiveTranscoding 这个配置信息,旧直播系统的相关接口不再生效。
Q:布局信息不是通过信令传的嘛?这边为啥也要写上布局信息?不只是音量信息?
A:声网一直以来都会在合图推流中,发送 SEI 相关信息,但是一直没有进行规范化。此次修改规范化了 SEI 格式,并增加了音量信息,向前兼容。
加入布局信息的原因是,观众端有可能需要当前的布局信息,进行窗口边框的描绘。