提交工单
咨询集成、功能及报价等问题
随着实时互动的发展,视频互动已经不局限于单一摄像头画面。屏幕共享画面、多路摄像头画面、趣味挂件、产品信息等已经成为越来越多的直播间或者用户需要展示的内容。
ZEGO 推出的本地导播插件,支持在本地对画面和声音进行混合,将多路音视频流或页面元素、合并为一路音视频流后推流,助力开发者实现更丰富的场景。
在线教育/会议 | 电商直播 | 游戏直播 |
---|---|---|
在实现本地导播功能之前,请确保:
开发者可通过以下任意一种方式集成本地导播插件
。
找到您项目目录下的 “index.js” 文件,添加如下代码,引入本地导播插件包。
import { ZegoExpressEngine } from'zego-express-engine-webrtc';
import { StreamCompositor } from'zego-express-engine-webrtc/stream-compositor';
ZegoExpressEngine.use(StreamCompositor);
在 下载 页面获取最新的包,解压后的文件中包含了本地导播插件包。找到您项目目录下的 “index.html” 文件,添加如下代码,手动集成本地导播插件包。
<script src="./stream-compositor-XXX.js"></script>
<script src="./ZegoExpressWebRTC-XXX.js"></script>
<script>
ZegoExpressEngine.use(StreamCompositor);
...
</script>
创建并初始化一个 ZegoExpressEngine 实例,然后调用 createStreamCompositor 接口,创建本地导播插件处理实例。
// 初始化实例,appID 及 server 请在控制台获取
const zg = new ZegoExpressEngine(appID, server);
const compositor = zg.createStreamCompositor();
调用 createZegoStream 接口,传入不同的参数,分别创建摄像头、屏幕共享的本地数据流。
const cameraStream = await zg.createZegoStream();
const screenStream = await zg.createZegoStream({ screen: { video: true } });
如果您想要将摄像头采集的人像外的视频流背景设置为透明,实现人像画中画、演讲者模式、以及沉浸式直播带货,则需要再引入 背景处理模块
。
import { BackgroundProcess } from'zego-express-engine-webrtc/background-process';
// 引用背景处理模块
ZegoExpressEngine.use(BackgroundProcess);
zg.setTransparentBackgroundOptions(cameraStream);
await zg.enableBackgroundProcess(cameraStream, true, 0);
调用 setInputEndpoint 接口,设置输入流的布局效果、渲染模式、层级等。
compositor.setInputEndpoint(screenStream, {
layout: { x: 0, y: 0, width: 1280, height: 720, zOrder: 0 }
});
compositor.setInputEndpoint(cameraStream, {
layout: { x: 0, y: 0, width: 320, height: 180, zOrder: 1 }
});
图层参数 zOrder 的数值越大,图层越靠上。
调用 addImage 接口,设置图片图层的位置。
const img = document.getElementById("backImg");
compositor.addImage(img, {
x: 0,
y: 540,
width: 320,
height: 180,
zOrder: 1
});
HTMLImageElement
的 crossOrigin
属性为 'anonymous'。onload
事件)后,再调用 addImage 接口。调用 setOutputConfig 接口,设置输出流的宽、高、帧率等。
const width = 1280, height = 720;
compositor.setOutputConfig({
width: width,
height: height,
framerate: 15
});
调用 startComposingStream 接口,开始混合媒体流。
// 输出视频流 mediaStream
const outputStream = await compositor.startComposingStream();
调用 stopComposingStream 接口,停止混合媒体流;再调用 destroyStream 销毁流数据,释放资源。
await compositor.stopComposingStream();
zg.destroyStream(cameraStream);
zg.destroyStream(screenStream);
联系我们
文档反馈