该功能需要额外付费,收费标准请咨询 ZEGO 商务人员。
本文主要讲述如何利用 ZEGO Express SDK 的混流功能,将音视频流和 ZegoSuperBoard 内容合并成一路流,输出到第三方平台,例如微信、视频号等,从而达到更好的传播和营销效果。
白板是教育、培训和娱乐场景高频使用的功能,ZegoSuperBoard 可以与 Express SDK 结合使用,提供完整的多人实时白板互动协同服务,包括:白板涂鸦、实时轨迹同步、白板与实时音视频同步等多种能力。
许多活动,为了扩大传播效果,希望主讲人的画面、语音和白板内容,能在第三方平台,例如微信、视频号、抖音等播放,但要求主讲端和播放端同时集成了 ZEGO Express 和 ZegoSuperBoard 才可以实现实时白板互动协同服务,实现方式复杂。
当前 ZEGO 通过混流功能,将主讲人的音视频流与白板相关操作在 ZEGO 服务端合成一路,再输出到第三方平台,实现第三方平台无需集成 ZEGO Express 和 ZegoSuperBoard,即可在第三方平台同时接收主讲人画面、语音和白板内容的效果。
请参考 下载示例源码 获取源码。
相关源码请查看 “/ZegoExpressExample/Examples/Others/Mixer” 目录下的文件。
在实现白板混流功能之前,请确保:
混流功能不是默认开启的,使用前请在 ZEGO 控制台 自助开通(开通步骤请参考 项目管理 - 服务配置 中的“混流”),或联系 ZEGO 技术支持开通。
具体流程请参考“实现视频通话”文档的 3.1 初始化 和 3.2 登录房间 章节完成初始化并登录房间。
在 Express SDK 中,通过 ZegoMixerTask 定义混流任务配置对象,其中包含输入流布局、输出流和 ZEGO 超级白板配置等信息。
/// 混流任务对象
@interface ZegoMixerTask : NSObject
- (instancetype)init NS_UNAVAILABLE;
/// 通过 TaskID 构造一个混流任务对象
- (instancetype)initWithTaskID:(NSString *)taskID;
/// 混流任务 ID
@property (nonatomic, copy, readonly) NSString *taskID;
/// 设置混流任务对象的输入流列表
- (void)setInputList:(NSArray<ZegoMixerInput *> *)inputList;
/// 设置混流任务对象的输出列表
- (void)setOutputList:(NSArray<ZegoMixerOutput *> *)outputList;
/// 设置混流任务对象的白板配置
- (void)setWhiteboard:(ZegoMixerWhiteboard *)whiteboard;
@end
具体流程请参考混流文档的 5.2.1 创建混流任务对象 进行创建。
具体流程请参考混流文档的 5.2.4 设置混流输入流 进行设置。
具体流程请参考混流文档的 5.2.5 设置混流输出 进行设置。
第三方平台直播间的地址可以通过设置混流输出中的参数进行配置,直播间地址格式一般为:rtmp://xxxx
。
调用 setWhiteboard 接口,将 ZEGO 超级白板内容合入混流:需填入 whiteboardID 白板 ID 等参数,即本文 前提条件 中,集成 ZegoSuperBoard SDK 并创建白板时返回的 ID 等信息。
白板混流支持的文件格式如下:
以白板布局放置于画面左上角为例:
// ZEGO 超级白板 ID,即本文前提条件中,集成 ZegoSuperBoard SDK 并创建白板时返回的 ID
long whiteboardID = 0;
ZegoMixerWhiteboard *whiteboard= [[ZegoMixerWhiteboard alloc] initWithWhiteboardID:whiteboardID layout:CGRectMake(0, 0, 100, 100)];
// ZEGO 超级白板是否支持加载动态 PPT
[whiteboard setIsPPTAnimation:YES];
[task setWhiteboard:whiteboard];
具体流程请参考混流文档的 5.3 开始混流任务 章节。
Express SDK 支持更新混流任务中的白板配置,例如,需要切换要混入的 ZEGO 超级白板实例或不再混入 ZEGO 超级白板时,可通过调用 startMixerTask 接口更新配置。如需更新混流任务的其它配置,请参考混流文档中的 5.4 更新混流任务的配置。
以不再混入 ZEGO 超级白板内容到混流中为例:
// 重置混流任务白板配置信息
[self.mixerTask setWhiteboard:nil];
// 再调用一次启动混流任务接口,即可更新混流配置
[self.engine startMixerTask:self.mixerTask callback:^(ZegoMixerStartResult * _Nonnull result) {
if (result.errorCode == 0) {
NSLog(@"Start mixer task success");
} else {
NSLog(@"Start mixer task fail");
}
}];
具体流程请参考混流文档的 5.5 停止混流。
请确认混流任务白板配置中 whiteboardID
成员的值,是否为要混入混流的 ZEGO 超级白板 ID。
请确认混流任务白板配置中 isPPTAnimation
成员的值,是否为 true。
可以,但是至少需要一路音频流。否则无法发起白板混流。
联系我们
文档反馈