You need to enable JavaScript to run this app.
文档中心
实时音视频

实时音视频

复制全文
下载 pdf
转推直播
集成最佳实践
复制全文
下载 pdf
集成最佳实践

你可参看以下最佳实践来获取转推直播最佳效果。

SEI 类型

直播拉流端收到的 SEI(Supplemental Enhancement Information)分为 RTC 透传SEI 和服务端合流转推 SEI:

  • RTC 透传 SEI:
    • 含义:用户在客户端API sendSEIMessage 传入的 SEI,合流转推服务端仅在订阅该用户的流并从视频帧中提取出 SEI 之后做透传,数据结构由用户自行定义;
    • 触发时机:在服务端转码机器人收到该用户的视频流之后,立即将该信息编入下一视频帧(普通视频帧/关键帧);
  • 服务端合流转推 SEI:
    • 含义:由合流转推服务端生成的特定的 SEI,数据结构由火山引擎定义;
    • 触发时机:该 SEI 信息默认跟随每个 I 帧;若用户开启了音量指示模式,那么该 SEI 信息可能被编入普通视频帧;若透传客户端传入 SEI,服务端也会产生一条 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 任务启动时传入的参数。画布的参数信息如下:
  • w:画布的宽度,对应 Canvas.Width
  • h:画布的高度,对应 Canvas.Height
  • bgnd:画布的背景颜色,格式为 RGB 定义下的十六进制整数,对应 Canvas.Background
regions所有合流用户的信息(包含布局信息),返回的信息取决于 OpenAPI 任务启动时传入的参数;
  • Alpha:画面的透明度,对应 Region.Alpha
  • contentControl:该路流参与混流的媒体类型,对应 Region.MediaType
  • w:视频流对应区域宽度的像素绝对值,对应 Region.Width
  • h: 视频流对应区域高度的像素绝对值,对应 Region.Height
  • x:视频流对应区域左上角的横坐标相对整体画面的比例,对应 Region.LocationX
  • y:视频流对应区域左上角的纵坐标相对整体画面的比例,对应 Region.LocationY
  • renderMode:画面的渲染模式,对应 Region.RenderMode
  • uid:流所属用户的 Id,对应 Streams.Stream.UserId
  • zorder:画面的图层顺序,对应 Region.Zorder
infos音量信息。只有开启了音量指示模式,才会返回该字段;
  • uid:流所属用户的 Id;
  • talk:该用户是否有讲话。0 表示用户实际音量未超过 TalkVolume 设定值。1 表示用户实际音量超过 TalkVolume 设定值。
  • volume:用户实际音量大小,范围为[0,255]
ts生成该信息时的 Unix 时间戳,单位为毫秒。
app_data自定义信息。用户在 Control 中传入的 UserConfigExtraInfo 字段;

音量指示模式


在转推直播场景中,你可能需要开启音量指示,以便实现某些业务逻辑,例如在观众客户端实时展示某个主播说话的声波动效。

步骤 1: 将 VolumeIndicationMode 设置为 true 开启音量指示模式。
步骤 2:通过 VolumeIndicationInterval 设置用户说话音量的回调间隔。
[可选] 步骤 3:通过 talkVolume 设置有效说话音量大小。
步骤 4:解析服务端合流转推SEI 中的 infos 字段获取用户的音量信息。

在开启音量指示模式后,你可以通过设置 SeiContentModeAddVolumeValue 选择在非关键帧中携带不同的 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

你可以设置 SEI PayLoadType5100 以兼容你的客户端播放器。

  • 如果你传入了 SEIPayLoadType 参数,会对服务端合流转推 SEI和 RTC 透传 SEI 均生效;
  • 如果你传入 SEIPayloadType = 5 并传入了 SEIPayloadUUID 参数,则该参数仅对 RTC 透传SEI 生效;此时,服务端合流转推 SEI 的 SEIPayloadUUID 为固定值:566f6c63656e67696e65525443534549 ,对应16位字符串 VolcengineRTCSEI
最近更新时间:2024.01.04 16:48:08
这个页面对您有帮助吗?
有用
有用
无用
无用