1 SEI功能简介
在音视频流媒体应用中,除了可以流媒体通道推拉音视频内容外,还可以使用流 SEI(Supplemental Enhancement Information,媒体补充增强信息)通过流媒体通道将文本信息与音视频内容打包在一起,从主播端(推流端)推出,并从观众端(拉流端)接收,以此实现文本数据与音视频内容的精准同步的目的。
一般可用于视频画面的精准布局、远端歌词同步、直播答题等应用场景。
SEI 的相关概念及原理请参考 如何理解和使用 SEI(媒体补充增强信息)。
适合对消息发送有较高频率和实时性要求,且消息丢失不会影响业务逻辑时,推荐使用 SEI(Supplemental Enhancement Information,媒体补充增强信息)。
2 SEI示例源码下载
请参考 下载示例源码 获取源码。
相关源码请查看 “/ZegoExpressExample/Examples/Others/SupplementalEnhancementInformation” 目录下的文件。
3 实现SEI之前的前提条件
在实现 SEI 功能之前,请确保:
- 已在项目中集成 ZEGO Express SDK,实现基本的实时音视频功能,详情请参考 快速开始 - 集成 和 快速开始 - 实现视频通话。
- 已在 ZEGO 控制台 创建项目,并申请有效的 AppID 和 AppSign,详情请参考 控制台 - 项目管理 中的“项目信息”。
4 SEI接口使用步骤
发送与接收 SEI 信息功能需要推流和拉流端配对使用才能展示效果,即需要在推流端发送 SEI 信息,拉流端接收 SEI 信息。以下内容将介绍各端如何使用发送与接收 SEI 信息功能。
主播推流发送 SEI 消息调用流程如下:
-
调用
createEngine
接口创建 engine 对象。 -
调用
loginRoom
接口登录房间。 -
调用
startPublishingStream
接口推流。 -
在推流成功后,调用
sendSEI
接口发送 SEI 信息。
观众拉流接收 SEI 消息调用流程如下:
-
调用
createEngine
接口创建 engine 对象。 -
创建
IZegoEventHandler
对象,并重写接收 SEI 信息的onPlayerRecvSEI
方法,调用setEventHandler
接口传入创建的IZegoEventHandler
监听onPlayerRecvSEI
的回调。 -
调用
loginRoom
接口登录房间。 -
调用
startPlayingStream
接口拉流。 -
在拉流成功后,接收到推流端发送的 SEI 信息之后触发
onPlayerRecvSEI
回调。拉流时,如果开发者通过调用
mutePlayStreamVideo
或muteAllPlayStreamVideo
接口,设置了只拉音频流时,将无法接收 SEI 信息。
4.1 (可选)设置 SEI 类型
设置 SEI 类型
由于 SDK 默认使用 ZEGO 自行定义的 SEI(nalu type = 6, payload type = 243)类型打包,且此类型是 SEI 标准未规定的类型,因此跟视频编码器或者视频文件中的 SEI 不存在冲突。但当开发者需要使用第三方解码器解码时(如 FFmpeg),会导致解不出正确的 SEI,此时需要在推流前调用 setSEIConfig
接口更换 SDK 发送 SEI 的类型,使用 UserUnregister 的 SEI(nalu type = 6, payload type = 5)类型打包。
仅当开发者使用第三方解码器解码 SEI 时需要执行该步骤。
-
接口