自定义录制模板
创建自己的录制布局,以便与RoomComposite一起使用。
概述
由于Egress使用无头Chrome的实例来组合房间,因此您可以使用相同的应用程序代码来设计直播或录制的交互式体验。
与标准LiveKit应用程序相比,有一些不同之处:
- 不呈现本地参与者-在这种情况下,本地参与者将是记录器实例
- 当地参与者不应发布任何媒体
- 房间控制(静音、离开等)不应可见
/**
* Add [VideoGrant] to this token.
*/
fun addGrants(grants: Iterable<VideoGrant>) {
for (grant in grants) {
videoGrants.add(grant)
}
}
/**
* hide participant from others (used by recorder)
*/
class Hidden(value: Boolean) : VideoGrant("hidden", value)
理解流程
1、你发出一个出口。StartRoomComposite向LiveKit发出请求
2、LiveKit分配一个可用的egress实例来处理它
3、出口记录器为您的模板创建必要的连接和身份验证详细信息,包括:
- LiveKit服务器的URL
- 一种访问令牌,旨在以记录器的身份加入房间
- 将所需布局传递给StartRoomCompositeEgress
4、Egress记录器使用启动Chrome浏览器?url=<>模板=<>令牌=<>
5、出口记录器等待webapp记录START_RECORDING以开始录制
6、出口记录器等待webapp记录END_RECORDING以终止流
您不必担心上述细节,我们提供了一个模板SDK来处理与Egress本身的交互。
使用模板SDK
安装
yarn add @livekit/egress-sdk
使用
import EgressHelper from '@livekit/egress-sdk'
import { Room } from 'livekit-client'
const room = new Room({
adaptiveStream: true,
})
///创建房间后,立即向egress助手注册,以便其可以监听
//事件。
//设置autoEnd后,当所有参与者都离开时,录制将停止。
EgressHelper.setRoom(room, {
autoEnd: true,
})
//高级功能,如果你想在不同的录音之间切换
//使用EgressService以编程方式进行布局。UpdateLayout,这些更改
//可以在这里处理
EgressHelper.onLayoutChanged((layout) => {
})
//连接到房间,并像往常一样呈现应用程序UI
//EgressHelper提供由Egress服务传入的URL和令牌
await room.connect(
EgressHelper.getLiveKitURL(),
EgressHelper.getAccessToken(),
);
//渲染视图后,调用此命令开始录制
EgressHelper.startRecording();
身份验证
LiveKit将使用Egress记录器生成的访问令牌对会话进行身份验证。它将为其分配一个以EG_开头的随机生成的用户身份。
如果在没有正确访问令牌的情况下访问网页,则无法连接。
要使用自己的系统进行身份验证,您可以将任何其他URL参数附加到传递给Egress的baseUrl。例如,您可以附加一个唯一的身份验证密钥https://your-template-url.com/?authkey={}作为您的基本URL。
测试您的模板
为了加快录制模板的开发周期,我们在CLI中提供了一个方便的实用程序。test-express模板将启动一些虚拟发布器,然后模拟它们加入您的房间。它还会将浏览器实例指向您的本地模板,并填写正确的URL参数。
这里有一个例子:
lk egress test-template
--base-url http://localhost:3000 \
--url <LIVEKIT_INSTANCE>
--api-key <KEY>
--api-secret <SECRET>
--room <ROOM_NAME> --layout <LAYOUT> --publishers 3
此命令将启动指向的浏览器http://localhost:3000,同时模拟3个发布者发布到您的livekit实例。