十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Zoom RTMS 媒体类型配置全指南:Audio、Video、Transcript、Chat 与 Screen Share 数据流实战

Zoom RTMS 媒体类型配置全指南:Audio、Video、Transcript、Chat 与 Screen Share 数据流实战 Zoom RTMS 媒体类型配置全指南Audio、Video、Transcript、Chat 与 Screen Share 数据流实战【免费下载链接】knowledge-work-pluginsOpen source repository of plugins primarily intended for knowledge workers to use in Claude Cowork项目地址: https://gitcode.com/GitHub_Trending/kn/knowledge-work-pluginsZoom Realtime Media StreamsRTMS通过 WebSocket 为后端服务提供会议、网络研讨会与 Video SDK 会话中的实时音频、视频、字幕、聊天与屏幕共享数据。本文以partner-built/zoom-plugin/skills/rtms/references/media-types.md为核心骨架系统讲解 RTMS 五种媒体类型的位掩码订阅方式、每种媒体流的参数配置采样率、编码器、分辨率、FPS 等、事件接收与处理代码并结合仓库内>const mediaTypes RTMSManager.MEDIA.AUDIO | RTMSManager.MEDIA.TRANSCRIPT; // 9从仓库中的枚举定义看data-types.md这一位掩码对应MEDIA_DATA_TYPEAUDIO 0x01、VIDEO 0x01 1、DESKSHARE 0x01 2、TRANSCRIPT 0x01 3、CHAT 0x01 4、ALL 0x01 5。常见的组合有Audio Transcript1 | 8 9Audio Video1 | 2 3All media32在 SDK 快速入门中正是把mediaTypes: RTMSManager.MEDIA.AUDIO | RTMSManager.MEDIA.TRANSCRIPT传给RTMSManager.init()从而只订阅音频与字幕两种流参见 quickstart.md。Audio 音频流音频参数选项PropertyOptionsSample Rate8kHz (0)、16kHz (1)、32kHz (2)、48kHz (3)CodecL16/PCM (1)、G.711 (2)、G.722 (3)、Opus (4)ChannelsMono (1)、Stereo (2)Data OptionMixed (1)、Multi-stream (2)Send Rate20ms推荐重要限制Stereo立体声仅支持 Opus 编码器这是协议层面的硬约束AUDIO_CHANNEL枚举中 STEREO值 2的说明明确标注 Only with OPUS codec!见>const audioParams { content_type: 1, // MEDIA_CONTENT_TYPE_RTP sample_rate: 1, // 16kHz channel: 1, // Mono codec: 1, // L16 (PCM) data_opt: 1, // Mixed stream (all participants) send_rate: 20 // 20ms intervals };content_type对应MEDIA_CONTENT_TYPE1RTP实时音视频、2RAW_AUDIO原始音频、3RAW_VIDEO原始视频、5TEXT文本。使用zoom/rtmsSDK 时等价写法为client.setAudioParams({ contentType, codec, sampleRate, channel, dataOpt, duration })其中duration为每个音频块的大小毫秒需为 20 的倍数最大 1000完整示例见 sdk-quickstart.md。处理音频数据RTMSManager.on(audio, ({ buffer, userName, timestamp }) { // buffer PCM 16-bit samples // Send to transcription service, save to file, etc. transcriptionService.process(buffer); });音频回调中拿到的是 PCM 16 位采样。结合仓库内的 AI 集成示例ai-integration.md常见的消费方式包括转发给 Deepgram / AssemblyAI / Whisper 等实时转写服务此时建议codec: 1sampleRate: 1channel: 1即 16kHz 单声道 PCM落盘保存为.pcm录音文件并通过**静音填充gap filling**保证连续播放——当检测到相邻音频块时间戳间隔 ≥ 500ms 时按 20ms 一帧插入Buffer.alloc(640)16kHz 单声道 20ms 640 字节的静音帧。Video 视频流视频参数选项PropertyOptionsCodecH.264 (7)、JPG (5)、PNG (6)ResolutionSD (1)、HD 720p (2)、FHD 1080p (3)、QHD 2K (4)FPS1-30通常 25Data OptionSingle active (3)、Speaker view (4)、Gallery view (5)、Single individual stream2026 年 3 月新增选择规则当fps 5时使用 JPG/PNG当fps 5时使用 H.264。这与MEDIA_PAYLOAD_TYPE的定义一致——JPG5与 PNG6被标注为 Video/Share - when fps 5H2647则用于 Video/Share - when fps 5见>const videoParams { codec: 7, // H.264 resolution: 2, // HD 720p fps: 25, data_opt: 3 // Single active speaker };SDK 中等价写法为client.setVideoParams({ codec: 7, resolution: 2, fps: 25, dataOpt: 3 })。有一个值得注意的坑必须先调用setVideoParams再调用setAudioParams否则视频参数可能被忽略见 sdk-quickstart.md 的 Common Issues 表。单个指定参会者视频流Single Individual Participant Video2026 年 3 月的协议更新新增了一次只选择一路参会者摄像头画面的订阅模式。当你需要以下能力时使用它按用户维度的视觉处理per-user vision processing由主持人选定的一路摄像头画面确定性的参会者聚焦而不是活动发言人active speaker自动切换配置规则如下将视频的data_opt设为VIDEO_SINGLE_INDIVIDUAL_STREAM对应枚举值 4见>RTMSManager.on(video, ({ buffer, userName, timestamp }) { // buffer H.264 NAL units // Decode with FFmpeg, save, or stream videoDecoder.decode(buffer); });视频回调中的buffer是 H.264 NAL 单元或 JPG/PNG 帧取决于所选编码器可用 FFmpeg 解码、落盘或转发给视觉 AI 分析服务。Screen Share 屏幕共享与 Video 相互独立屏幕共享与普通视频使用不同的事件msg_type 16 vs 15媒体位也不同4 vs 2必须单独订阅。这一设计在 SKILL.md 的关键经验清单中也被反复强调。屏幕共享参数选项PropertyOptionsCodecJPG (5)、PNG (6)、H.264 (7)ResolutionSD (1)、HD 720p (2)、FHD 1080p (3)、QHD 2K (4)FPS1-5静态内容、15-30动画内容屏幕共享配置const deskshareParams { codec: 5, // JPG (good for static slides) resolution: 2, // HD fps: 1 // Low FPS for slides };对于静态幻灯片PPT/PDF 投屏JPG 低 FPS 是推荐组合既保留了清晰画面又大幅降低带宽与解码开销只有屏幕含动画/视频时才需要提高到 15-30 FPS 并考虑 H.264。处理屏幕共享RTMSManager.on(sharescreen, ({ buffer, userName, timestamp }) { // buffer JPG/PNG image or H.264 frame saveScreenCapture(buffer); });Transcript 实时字幕字幕参数PropertyValueFormatJSON 文本Content Type5 (MEDIA_CONTENT_TYPE_TEXT)Languages支持 36 种语言src_language固定请求的语言enable_lid语言识别开关默认开启字幕与聊天都属于content_type: 5MEDIA_CONTENT_TYPE_TEXT的文本流。src_language与enable_lid是 2026 年 3 月新增的字幕握手控制项见>{ user_id: user_id, user_name: Speaker Name, text: Transcribed text content, timestamp: 1234567890, is_final: true }字幕消息以 JSON 文本形式承载包含发言者 ID、发言者名、转写文本、时间戳与是否终稿is_final标记。处理字幕RTMSManager.on(transcript, ({ text, userName, timestamp }) { // text transcribed speech // is_final true for finalized segments saveTranscript(userName, text); });在实际管线中字幕数据常被用于会议纪要生成、全文搜索、合规存档以及接入大模型做实时摘要参考 ai-integration.md 中每 5 分钟基于累积字幕调用 LLM 生成摘要的模式。Chat 会议聊天聊天参数PropertyValueFormatJSON 文本Content Type5 (MEDIA_CONTENT_TYPE_TEXT)聊天与字幕同样走文本内容类型但事件名与 msg_type 不同chat对应 msg_type 18。处理聊天RTMSManager.on(chat, ({ text, userName, timestamp }) { console.log([Chat] ${userName}: ${text}); saveChatMessage(userName, text); });聊天数据常用于消息归档与情感分析等场景。完整媒体配置Complete Media Configuration将上述五种媒体参数合并为一份完整的配置对象const mediaParams { audio: { content_type: 1, // RTP sample_rate: 1, // 16kHz channel: 1, // Mono codec: 1, // L16 (PCM) data_opt: 1, // Mixed stream send_rate: 20 }, video: { codec: 7, // H.264 resolution: 2, // HD 720p fps: 25, data_opt: 3 // Single active speaker }, deskshare: { codec: 5, // JPG resolution: 2, // HD fps: 1 }, transcript: { content_type: 5, // TEXT src_language: 9, // English enable_lid: false }, chat: { content_type: 5 // TEXT } };在手动 WebSocket 实现中这份media_params会嵌入媒体握手的DATA_HAND_SHAKE_REQmsg_type 3消息中同时media_type字段用位掩码声明本次订阅的媒体集合。例如下面的字幕订阅请求来自 connection.mdmediaWs.send(JSON.stringify({ msg_type: 3, protocol_version: 1, meeting_uuid: idValue, rtms_stream_id: streamId, signature, media_type: 8, // TRANSCRIPT media_params: { transcript: { content_type: 5, // TEXT src_language: 9, // English enable_lid: false // Lock to src_language instead of auto-switching } } }));底层协议印证位掩码如何参与媒体握手理解位掩码与媒体参数在协议层的作用有助于排查收不到某类数据的问题。根据 connection.md 的连接流程握手阶段分为收到meeting.rtms_started/webinar.rtms_started/session.rtms_startedwebhook从 payload 提取server_urls、rtms_stream_id与meeting_uuid或session_id生成 HMAC-SHA256 签名clientId,idValue,streamId拼接后以 clientSecret 加密连接信令 WebSocket发送握手请求msg_type 1携带media_type位掩码收到握手响应msg_type 2得到媒体服务器 URL连接媒体 WebSocket发送媒体握手msg_type 3携带media_params收到媒体握手响应msg_type 4后发送CLIENT_READY_ACKmsg_type 7开始接收媒体数据msg_type 14Audio、15Video、16Screen Share、17Transcript、18Chat。媒体数据消息类型与本文五种媒体一一对应。若某个media_type位未在握手时声明则对应事件不会触发——例如只订阅了media_type: 9Audio|Transcript就不会收到视频与聊天数据。此外媒体参数错误会以状态码形式返回STATUS_INVALID_MEDIA_AUDIO_SAMPLE_RATE20、STATUS_INVALID_MEDIA_VIDEO_CODEC27、STATUS_INVALID_MEDIA_VIDEO_RESOLUTION28、STATUS_INVALID_MEDIA_TRANSCRIPT_SROUCE_LANGUAGE43等完整列表见 contenteditable="false">【免费下载链接】knowledge-work-pluginsOpen source repository of plugins primarily intended for knowledge workers to use in Claude Cowork项目地址: https://gitcode.com/GitHub_Trending/kn/knowledge-work-plugins创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表