合成流(program)是频道级的音视频流:由服务端 MCU 程序把频道内所有人合成为一路,所有订阅者收到的画面和声音完全一致。
典型用途:
- 不发言的观众只订一路流,省带宽也省解码开销
- 旁路录制 / 转推直播
保留标识
合成流不属于任何普通用户,它挂在一个系统身份下。头文件里已把这三个保留常量开放出来:
发布(MCU 程序侧)
发布合成流必须以 MCU 身份接入:服务端签发的 Token 里 uid 必须是 __mcu__,否则发布接口返回 RTC_ERROR。
rtc_publish_mcu_video_track
发布视频合成流。与 rtc_publish_local_track 的区别只有两点:内部强制使用保留 trackId(不可自定义),以及要求 MCU 身份。track_handle 须用视频 codec 创建,options 填 desc / width / height / fps。
rtc_publish_mcu_audio_track
发布音频合成流(混音流),语义同上。track_handle 须用音频 codec 创建,options 填 desc / sample_rate / channel_count。
返回值(两个接口相同)
订阅(观众侧)
C 接口没有 RemoteTrack 句柄,所以合成流不另设订阅接口 —— 用通用的订阅接口配合保留常量即可:
什么时候不该用合成流
参与会话的人想”听全场”,不要订阅音频合成流。 合成流里包含你自己的声音,订了就会有回声。正确做法是 rtc_set_auto_subscribe(rtc, 1, 0) 自动订阅所有人的音频,各路数据从 track_sample 回调进来后由业务侧自行混音(混的时候把自己那一路排除掉)。合成流是给不发声的观众和录制/转推用的。