你可参看以下最佳实践来获取转推直播最佳效果。
直播拉流端收到的 SEI(Supplemental Enhancement Information)分为 RTC 透传SEI 和服务端合流转推 SEI:
sendSEIMessage
传入的 SEI,合流转推服务端仅在订阅该用户的流并从视频帧中提取出 SEI 之后做透传,数据结构由用户自行定义;服务端在转推直播以及录制场景下,默认会在 SEI 中增加关于当前视频流的编码信息。该信息为 JSON 格式的字符串,具体示例如下:
{ "app_data": "Your_AppData", "canvas": { "bgnd": "#ff0000", "h": 480, "w": 640 }, "infos": [ { "talk": 0, "uid": "Your_UserId_1", "volume": 10 }, { "talk": 0, "uid": "Your_UserId_2", "volume": 20 } ], "regions": [ { "alpha": 1.0, "contentControl": 0, "h": 1.0, "renderMode": 2, "uid": "Your_UserId_1", "w": 0.5, "x": 0.0, "y": 0.0, "zorder": 0 }, { "alpha": 1.0, "contentControl": 0, "h": 1.0, "renderMode": 2, "uid": "Your_UserId_2", "w": 0.5, "x": 0.5, "y": 0.0, "zorder": 1 } ], "ts": 1687920756747 }
各项参数定义如下:
参数 | 描述 |
---|---|
canvas | 画布信息。返回的信息取决于 OpenAPI 任务启动时传入的参数。画布的参数信息如下:
|
regions | 所有合流用户的信息(包含布局信息),返回的信息取决于 OpenAPI 任务启动时传入的参数;
|
infos | 音量信息。只有开启了音量指示模式,才会返回该字段;
|
ts | 生成该信息时的 Unix 时间戳,单位为毫秒。 |
app_data | 自定义信息。用户在 Control 中传入的 UserConfigExtraInfo 字段; |
在转推直播场景中,你可能需要开启音量指示,以便实现某些业务逻辑,例如在观众客户端实时展示某个主播说话的声波动效。
步骤 1: 将 VolumeIndicationMode
设置为 true
开启音量指示模式。
步骤 2:通过 VolumeIndicationInterval
设置用户说话音量的回调间隔。
[可选] 步骤 3:通过 talkVolume
设置有效说话音量大小。
步骤 4:解析服务端合流转推SEI 中的 infos
字段获取用户的音量信息。
在开启音量指示模式后,你可以通过设置 SeiContentMode
和 AddVolumeValue
选择在非关键帧中携带不同的 SEI 信息,但关键帧中会携带全量的 SEI 信息。
SeiContentMode
=0
, AddVolumeValue
=false
时,非关键帧中包含除用户说话音量值外全部 SEI 信息。{ "app_data": "Your_AppData", "canvas": { "bgnd": "#ff0000", "h": 480, "w": 640 }, "infos": [ { "talk": 0, "uid": "Your_UserId_1" }, { "talk": 0, "uid": "Your_UserId_2" } ], "regions": [ { "alpha": 1.0, "contentControl": 0, "height": 320, "renderMode": 2, "uid": "Your_UserId_1", "width": 320, "locationX": 1, "locationY": 2, "zorder": 0 }, { "alpha": 1.0, "contentControl": 0, "height": 600, "renderMode": 2, "uid": "Your_UserId_2", "width": 200, "locationX": 330, "locationY": 2, "zorder": 1 } ], "ts": 1687920756747 }
SeiContentMode
=0
, AddVolumeValue
=true
时,非关键帧中包含全部 SEI 信息。{ "app_data": "Your_AppData", "canvas": { "bgnd": "#ff0000", "h": 480, "w": 640 }, "infos": [ { "talk": 0, "uid": "Your_UserId_1", "volume": 10 }, { "talk": 0, "uid": "Your_UserId_2", "volume": 20 } ], "regions": [ { "alpha": 1.0, "contentControl": 0, "height": 320, "renderMode": 2, "uid": "Your_UserId_1", "width": 320, "locationX": 1, "locationY": 2, "zorder": 0 }, { "alpha": 1.0, "contentControl": 0, "height": 600, "renderMode": 2, "uid": "Your_UserId_2", "width": 200, "locationX": 330, "locationY": 2, "zorder": 1 } ], "ts": 1687920756747 }
SeiContentMode
=1
, AddVolumeValue
=false
时,非关键帧 SEI 中只包含除用户说话音量值外音量信息{ "infos": [ { "talk": 0, "uid": "Your_UserId_1" }, { "talk": 0, "uid": "Your_UserId_2" } ], "ts": 1687920756747 }
SeiContentMode
=1
, AddVolumeValue
=true
时,SEI 中只包含音量信息{ "infos": [ { "talk": 0, "uid": "Your_UserId_1", "volume": 10 }, { "talk": 0, "uid": "Your_UserId_2", "volume": 20 } ], "ts": 1687920756747 }
你可以设置 SEI PayLoadType
为 5
或 100
以兼容你的客户端播放器。
SEIPayLoadType
参数,会对服务端合流转推 SEI和 RTC 透传 SEI 均生效;SEIPayloadType
= 5
并传入了 SEIPayloadUUID
参数,则该参数仅对 RTC 透传SEI 生效;此时,服务端合流转推 SEI 的 SEIPayloadUUID
为固定值:566f6c63656e67696e65525443534549
,对应16位字符串 VolcengineRTCSEI
。