APIRTC如何实现仅录制1对1会议中的指定音视频流?
APIRTC 1对1会议指定流录制实现方案
核心录制目标
仅录制:远端客户端携带的音视频流 + 本地端采集的音频流,排除其他无关轨道
1. 自定义流标签的添加方法
不管是本地流还是远端流,都需要在轨道绑定录制配置前打上指定标签,供录制接口匹配识别:
- 本地流打标:在初始化本地采集流时,通过原生参数直接给目标音频轨道绑定标签,不需要额外后置操作
// 初始化仅采集音频的本地流,绑定录制标签 const localAudioStream = await ApiRTC.createStream({ audio: true, video: false, // 1对1场景不需要本地视频入录的话关闭采集即可 customAudioTrackLabels: ["local-audio-record"] }); await localAudioStream.publish(); // 打标完成后再发布流 - 远端流打标:在收到远端流发布通知、订阅流之前,通过流实例提供的绑定方法给远端的音视频轨道打标
// 监听会话内的远端流发布事件 conversation.on("streamAdded", (remoteStream) => { // 给远端流的音频、视频轨道统一绑定录制标签 remoteStream.attachCustomTrackLabel("remote-media-record", { audio: true, video: true }); // 标签绑定完成后再执行订阅,确保录制配置能识别到标签 remoteStream.subscribe(); });
2. 目标流标签的获取方式
- 本地流的标签是初始化时手动设置的,直接使用预设的常量值即可,不需要额外查询
- 远端流的标签可以通过流实例的查询方法拉取校验,避免标签绑定失效导致录制漏轨:
如果是需要批量筛选所有符合录制要求的流,也可以通过会话的流列表接口拉取所有流实例,批量查询标签后匹配入录范围。// 获取指定远端流绑定的所有自定义标签 const boundLabels = remoteStream.getCustomTrackLabels(); // 校验目标标签是否存在 const isTargetStream = boundLabels.includes("remote-media-record");
3. 指定流录制的完整调用逻辑
录制接口直接传入匹配的标签集合,即可实现仅录制指定轨道的效果,不需要录制的轨道因为没有绑定对应标签,不会被纳入录制范围:
// 构造录制配置 const recordingOptions = { // 匹配所有需要录制的轨道标签 customTrackLabels: [ "remote-media-record", // 匹配远端的音视频全轨道 "local-audio-record" // 匹配本地的音频轨道 ], // 基础录制参数配置 recordingName: "1on1_meeting_recording", outputContainerFormat: "mp4" }; // 启动录制 await conversation.startRecording(recordingOptions);
实操注意点
- 所有打标操作必须在流发布/订阅完成前执行,否则录制引擎无法在轨道初始化阶段识别到自定义标签
- 同一个轨道可以绑定多个自定义标签,录制时只要命中任意一个标签,就会被纳入录制范围
- 1对1场景下不需要额外做参会者身份筛选,只要严格按照标签匹配轨道,就不会误录其他无关音视频内容
内容的提问来源于stack exchange,提问作者mmedial
相关产品推荐
相关产品推荐

