logo
当前页

媒体补充增强信息(SEI)

2024-02-02

功能简介

在音视频流媒体应用中,除了可以通过流媒体通道推拉音视频内容外,还可以使用流 SEI(Supplemental Enhancement Information,媒体补充增强信息)通过流媒体通道将文本信息与音视频内容打包在一起,从主播端(推流端)推出,并从观众端(拉流端)接收,以此实现文本数据与音视频内容的精准同步的目的。

一般可用于视频画面的精准布局、远端歌词同步、直播答题等应用场景。

说明

SEI 的相关概念及原理请参考 如何理解和使用 SEI(媒体补充增强信息)

前提条件

在实现 SEI 功能之前,请确保:

使用步骤

发送与接收 SEI 信息功能,需要在推流端发送 SEI 信息,在拉流端接收 SEI 信息,如下图所示:

推流端:

  1. 调用 loginRoom 接口登录房间。
  2. 调用 startPublishingStream 接口推流。
  3. 在推流成功后,调用 sendSEI 接口发送 SEI 信息。

拉流端:

  1. 创建 ZegoEventListener 对象,并重写接收 SEI 信息的 onPlayerRecvSEI 方法。
  2. 调用 loginRoom 接口登录房间。
  3. 调用 startPlayingStream 接口拉流。
  4. 在拉流成功后,接收到推流端发送的 SEI 信息之后触发 onPlayerRecvSEI 回调。
注意
  • SDK 目前支持在 H.264 编码的视频中进行传输 SEI 信息。
  • 推流时,若调用 enableCamera 接口关闭摄像头采集,将不会发送 SEI 数据。
  • 拉流时,如果只拉纯音频或调用 mutePlayStreamVideo 接口停止拉取视频流时,将无法接收 SEI 信息。

1 推流方

推流成功之后,调用 sendSEI 发送 SEI 信息。

// utf8 编码格式
let arrayBuffer:ArrayBuffer = Utils.utf8DecoderToBuf(this.seiMessage);
this.ZegoExpressInstance.sendSEI(arrayBuffer, ZegoPublishChannel.Main);

2 拉流方

在拉流成功之后,通过 onPlayerRecvSEI 回调接收 SEI 信息。

this.ZegoExpressInstance.on('onPlayerRecvSEI', (streamID: string, data: ArrayBuffer) => {
    let utf8Data = Utils.utf8Decode(data)
    this.logInfo('onPlayerRecvSEI. streamID: ' + streamID + ', data: '  + utf8Data)
})

Previous

通话质量监测

Next

流量控制