LiveKit Docs Recording & Composition - Room Composit Egress

avatar
作者
猴君
阅读量:0

房间在创建时,可以设置自动录像,来简化录像操作流程。 可以配置 egress 参数来设置录像传输位置

RoomComposite Egress 房间复合出口

RoomComposite Egress允许您将多个参与者曲目组合到一个输出流中。

房间复合出口

录制房间时的一个常见要求是捕捉所有参与者和发生的互动。在多用户应用程序中,这可能是一个挑战,不同的用户可能会加入、离开、打开和关闭他们的相机。录制时尽可能接近实际的应用程序体验,捕捉应用程序的丰富性和交互性,这也是可取的。

RoomCompositeEgress 使用web应用程序创建合成视图,并使用无头Chromium实例呈现输出。在大多数情况下,您现有的LiveKit应用程序只需稍加修改即可用作合成模板。

默认布局

我们提供了一些开箱即用的默认合成布局。如果未传入自定义模板URL,默认情况下将使用它们。这些模板与出口服务(源)一起部署并由其提供服务。
虽然这是一个很好的起点,但是您仍然可以使用您已经熟悉的标准web技术轻松创建自己的布局。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此外,您可以使用-light后缀将背景颜色更改为白色。即格栅灯。

启动RoomComposite

以下示例启动录制以存档到S3。它使用Encoded File Output作为出口。

EgressServiceClient client = EgressServiceClient.create(         "http://example.com",         "apiKey",         "secret");   LivekitEgress.EncodedFileOutput output = LivekitEgress.EncodedFileOutput.newBuilder()         .setFileType(LivekitEgress.EncodedFileType.MP4)         .setFilepath("test-recording.mp4")         .setS3(LivekitEgress.S3Upload.newBuilder()                 .setAccessKey("access-key")                 .setSecret("secret")                 .setBucket("bucket")                 .setEndpoint("https://my.s3.endpoint")                 .setRegion("us-east-1")                 .setForcePathStyle(true)                 .build())         .build();  Call<LivekitEgress.EgressInfo> call = client.startRoomCompositeEgress(         "roomName",         output,         "single-speaker" ); // layout 是录像时的布局,single-speaker 单一演讲者, speaker 多个演讲者, grid 网格布局 try {     LivekitEgress.EgressInfo egressInfo = call.execute().body();     // handle engress info } catch (IOException e) {     // handle error } 
  • fileRequest。输出文件如果配置中提供了s3、azure或gcp之一,则输出可以为空。
  • fileRequest。输出文件文件路径可以留空,并且将根据日期和房间名称生成一个唯一的文件名。

流式传输到RTMP

使用流式传输到RTMP,您将使用StreamOutput。当指定多个RTMP URL时,LiveKit会同时向所有这些URL进行多播。即使在使用UpdateStream启动出口后,也可以更改流URL

LivekitEgress.StreamOutput output = LivekitEgress.StreamOutput.newBuilder()         .addUrls("rtmp://youtube-url/stream")         .addUrls("rtmps://twitch-url/path")         .build();  Call<LivekitEgress.EgressInfo> call = client.startRoomCompositeEgress(         "roomName",         output ); try {     LivekitEgress.EgressInfo egressInfo = call.execute().body();     // handle engress info } catch (IOException e) {     // handle error } 

流到HLS

作为生成单个媒体文件的替代方案,可以使用SegmentedFileOutput输出让Egress服务生成段。Egress服务将输出拆分为等时长的媒体段(默认为6秒),并生成一个清单,列出所有生成的段。
目前,仅支持HTTP实时流兼容段(使用MPEG TS文件格式)和清单。
如果配置或请求中提供了s3、azure或gcp中的一个,则每个段将在生成后立即上传更新的清单。这允许在导出过程中播放导出的媒体。

LivekitEgress.SegmentedFileOutput output =         LivekitEgress.SegmentedFileOutput.newBuilder()                 .setFilenamePrefix("livekit-demo/room-composite-test-")                 .setPlaylistName("room-composite-test.m3u8")                 .setSegmentDuration(6)                 .setProtocol(LivekitEgress.SegmentedFileProtocol.HLS_PROTOCOL)                 .setS3(LivekitEgress.S3Upload.newBuilder()                         .setAccessKey("access-key")                         .setSecret("secret")                         .setBucket("bucket")                         .setRegion("region")                         .build())                 .build();  Call<LivekitEgress.EgressInfo> call = client.startRoomCompositeEgress(         "roomName",         output ); try {     LivekitEgress.EgressInfo egressInfo = call.execute().body();     // handle engress info } catch (IOException e) {     // handle error } 
  • 分段请求。输出部分。文件名前缀和分段请求。输出部分。PlaylistName可以留空,并且将根据日期和房间名称生成唯一的文件名。
  • 播放列表文件将始终在与分段相同的目录中创建,如segmentsRequest中所示。输出部分。FilenamePrefix,无论是否向segmentsRequest添加任何潜在的目录前缀。输出部分。播放列表名称。

生成图像快照

可以让出口服务定期生成房间合成的图像快照。例如,这可用于生成缩略图。生成一个清单,列出图像及其文件名和时间戳。

如果配置或请求中提供了s3、azure或gcp中的一个,则每个图像在生成后都会立即上传更新的清单。

LivekitEgress.ImageOutput output =         LivekitEgress.ImageOutput.newBuilder()                 .setFilenamePrefix("livekit-demo/room-composite-test-")                 .setCaptureInterval(10)                 .setWidth(640)                 .setHeight(480)                 .setS3(LivekitEgress.S3Upload.newBuilder()                         .setAccessKey("access-key")                         .setSecret("secret")                         .setBucket("bucket")                         .setRegion("region")                         .build())                 .build();  Call<LivekitEgress.EgressInfo> call = client.startRoomCompositeEgress(         "roomName",         output ); try {     LivekitEgress.EgressInfo egressInfo = call.execute().body();     // handle engress info } catch (IOException e) {     // handle error } 

肖像录音

纵向方向可以通过设置预设或高级选项来指定。Egress会将Chrome合成器调整到您指定的分辨率。但是,请记住:
Chrome浏览器的最小宽度限制为500px。
你的应用程序应该保持纵向布局,即使浏览器报告的宽度比典型的手机大。(例如720px宽度或更高)。

LivekitEgress.SegmentedFileOutput output =         LivekitEgress.SegmentedFileOutput.newBuilder()                 .setFilenamePrefix("livekit-demo/room-composite-test-")                 .setPlaylistName("room-composite-test.m3u8")                 .setSegmentDuration(6)                 .setProtocol(LivekitEgress.SegmentedFileProtocol.HLS_PROTOCOL)                 .setPreset(LivekitEgress.EncodingOptionsPreset.PORTRAIT_H264_720P_30)                 .setS3(LivekitEgress.S3Upload.newBuilder()                         .build())                 .build();  Call<LivekitEgress.EgressInfo> call = client.startRoomCompositeEgress(         "roomName",         output ); try {     LivekitEgress.EgressInfo egressInfo = call.execute().body();     // handle engress info } catch (IOException e) {     // handle error } 

纯音频合成

如果您的应用程序仅支持音频,则可以导出包含房间中所有参与者音频的混合音频文件。要启动纯音频合成,请在启动出口时传递audio_only=true。

Call<LivekitEgress.EgressInfo> call = client.startRoomCompositeEgress(         "roomName",         output,         "", // layout         null, // encoding options preset         null, // encoding options advanced         true); // audio only try {     LivekitEgress.EgressInfo egressInfo = call.execute().body();     // handle engress info } catch (IOException e) {     // handle error } 

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!