
后端音视频【免费下载链接】mediasoupCutting Edge WebRTC Video Conferencing项目地址https://gitcode.com/gh_mirrors/me/mediasoup点击查看免费下载导读rust/types/CHANGELOG.md记录了 mediasoup Rust 生态中独立类型库mediasoup-typescrate 名mediasoup-types当前版本 0.5.0从 0.2.1 到 0.4.0 的版本演进脉络涵盖 SCTP 内建协议栈切换、RTP 头部扩展 URI 枚举扩充、RTP 参数新增msid字段等关键变更。本文以该 CHANGELOG 为主线结合仓库内 类型库源码 与 mediasoup-types README逐条还原每次变更背后的类型设计与 WebRTC 协议语义帮助 Rust 开发者理解该类型库的定位、核心数据结构的字段含义以及在升级依赖时的破坏性变更注意事项。一、类型库定位为什么 mediasoup 需要独立的 Rust 类型 crate在深入 CHANGELOG 之前先明确mediasoup-types在整个项目中的角色。根据 rust/types/README.md 的说明它提供 mediasoup 各 Rust crate 之间共享的核心类型、枚举与数据结构既被主mediasoupcrate 使用也被任何需要与 mediasoup 交互的 Rust 库、工具和应用使用。入口模块在 rust/types/src/lib.rs 中清晰列出data_structuresICE/DTLS/SCTP 状态、传输元组、指纹等通用数据结构rtp_parametersRTP 编解码器、头部扩展、编码层等 RTP 参数体系scalability_modes可伸缩性模式SVC枚举sctp_parametersSCTP 关联与流参数srtp_parametersSRTP 加解密参数。依赖关系上rust/types/Cargo.toml 显示该 crate 基于serde含derive特性做序列化、serde_json做 JSON 解析、thiserror做错误定义、once_cell与regex用于可伸缩性模式字符串解析整体保持轻量、无 mediasoup 运行时依赖便于作为独立类型契约被上下游复用。注意仓库根目录的 Cargo.toml 与 rust-scripts.mjs 用于构建、测试整个 Rust workspace而mediasoup-types自身位于 rust/types 目录其 API 文档对应docs.rs/mediasoup-types。二、版本 0.2.1作为独立 crate 的首次发布CHANGELOG 记录的最早版本是 0.2.1标注为Initial release as a standalone crate extracted frommediasoupPR #1572从源码结构看这一变更的本质是将原本内嵌在mediasoupcrate 中的类型定义抽离为独立 crate。其直接收益是类型契约解耦应用代码、中间件库可以仅依赖mediasoup-types引入RtpParameters、RtpCapabilities、MediaKind等类型而不必引入完整的 mediasoup 运行时语义边界清晰类型定义与 worker 进程通信逻辑分离后续的协议演进如新增头部扩展只需改动类型 crate再同步主 crate。README 中的最小使用方式即 rust/types/README.md 的 Usage 章节如下[dependencies] mediasoup-types X.Y.Zuse mediasoup_types::{RtpCodecParameters, RtpCapabilities, MediaKind};2.1 从源码看类型的序列化设计独立发布的同时类型库确立了贯穿至今的 serde 序列化约定这在此后所有版本变更中反复出现枚举序列化为字符串如MediaKind以#[serde(rename_all lowercase)]序列化为audio/video见 rtp_parameters.rs 中的定义结构体字段采用 camelCaseRtpCapabilities、RtpParameters等均标注#[serde(rename_all camelCase)]与 mediasoup 的 JS API 及 worker 通道协议保持一致可选字段跳过序列化大量字段使用#[serde(skip_serializing_if Option::is_none)]避免输出冗余null。这意味着所有版本新增的类型字段都能直接用于 JSON 通道通信与用户侧参数构造是理解后续 CHANGELOG 变更的底层背景。三、版本 0.3.0RTP 头部扩展与 msid 支持0.3.0 的变更集中在 RTP 参数体系包含两项 PR3.1 RtpHeaderExtensionUri 新增 7 个变体PR #1631CHANGELOG 原文RtpHeaderExtensionUri: AddSsrcAudioLevel,AbsSendTime,TransportWideCcDraft01,DependencyDescriptor,AbsCaptureTime,PlayoutDelayandMediasoupPacketIdvariants. RenameAudioLeveltoSsrcAudioLevel.从 rtp_parameters.rs 中可看到完整的RtpHeaderExtensionUri枚举它用 serde 将每个变体映射为对应的标准 URI 字符串变体序列化 URI用途Midurn:ietf:params:rtp-hdrext:sdes:midBUNDLE 媒体标识MIDRtpStreamIdurn:ietf:params:rtp-hdrext:sdes:rtp-stream-idRID 扩展RepairRtpStreamIdurn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id修复流标识RRIDAbsSendTimehttp://www.webrtc.org/experiments/rtp-hdrext/abs-send-time绝对发送时间TransportWideCcDraft01http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01传输级拥塞控制transport-ccSsrcAudioLevelurn:ietf:params:rtp-hdrext:ssrc-audio-levelSSRC 音频电平RFC 6464DependencyDescriptorhttps://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extensionAV1 依赖描述符VideoOrientationurn:3gpp:video-orientation视频旋转信息AbsCaptureTimehttp://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time绝对采集时间PlayoutDelayhttp://www.webrtc.org/experiments/rtp-hdrext/playout-delay播放延迟控制MediasoupPacketIdurn:mediasoup:params:rtp-hdrext:packet-idmediasoup 自定义分组包 IDUnsupportedunsupported#[serde(other)]兜底未知/未支持扩展两点值得注意重命名语义对齐AudioLevel更名为SsrcAudioLevel与其真实 URIurn:ietf:params:rtp-hdrext:ssrc-audio-level对齐避免与 RFC 6465 的 in-band 音频电平混淆兜底变体Unsupported使用#[serde(other)]捕获未知 URI 字符串保证反序列化远端能力集时不会因未知扩展而整体失败这与 mediasoup 对未知扩展“跳过但容忍”的处理策略一致。3.2 RtpParameters 新增可选 msid 字段PR #1634CHANGELOG 原文RtpParameters: Add optionalmsidfield (WebRTC MediaStream Identification, RFC 8830).在 rtp_parameters.rs 的RtpParameters结构体中msid位于rtcp之后、以OptionString承载并标注#[serde(skip_serializing_if Option::is_none)]pub struct RtpParameters { pub mid: OptionString, // BUNDLE MID pub codecs: VecRtpCodecParameters, pub header_extensions: VecRtpHeaderExtensionParameters, pub encodings: VecRtpEncodingParameters, pub rtcp: RtcpParameters, pub msid: OptionString, // RFC 8830 MediaStream Identification }msid让 mediasoup 在信令层面感知 WebRTC 的 MediaStream 标识形如stream-id track-id从而在转码/转发场景中保留媒体流归属信息。它是纯可选项不设置时不影响既有调用。3.3 相关测试印证类型库为每个模块提供了配套单元测试例如 rtp_parameters 测试 与 scalability_modes 测试覆盖 MIME 类型解析、可伸缩性模式字符串解析等路径主 crate 的集成测试如 rust/tests/integration/webrtc_transport.rs则验证了这些类型在实际传输流程中的可用性。四、版本 0.4.0内建 SCTP 协议栈与 SctpNegotiatedCapabilities0.4.0 是 CHANGELOG 中影响面最大的破坏性变更对应 PR #1806New built-in SCTP stack:RemoveNumSctpStreamstype.AddSctpNegotiatedCapabilitiestype.4.1 移除 NumSctpStreams在旧设计中SCTP 关联需要显式指定发送/接收流数量numSctpStreams即 OS/MIS 字段。新内建 SCTP 协议栈不再需要调用方预先声明流数量因此NumSctpStreams类型被删除。这一变化与 worker 侧内建 SCTP 实现见 worker/include/RTC/SCTP 与 worker/src/RTC/SCTP 目录下的 association/rx/tx 等实现直接对应内建协议栈在关联建立阶段自动协商流数量。4.2 新增 SctpNegotiatedCapabilities替代方案是新增SctpNegotiatedCapabilities仅在 SCTP 关联成功连接后可用。源码见 rust/types/src/sctp_parameters.rs#[serde(rename_all camelCase)] pub struct SctpNegotiatedCapabilities { pub negotiated_max_outbound_streams: u16, pub negotiated_max_inbound_streams: u16, }两个字段分别表示协商后的最大出站/入站流数量均由内建协议栈在握手过程中实际协商得出而非调用方预先指定——这正是“移除 NumSctpStreams、改为协商结果”的设计意图。4.3 兼容性遗留字段为保持向后兼容SctpParameters 中仍保留三个旧字段源码注释明确标注“For backwards compatibility. Remove them in the future”os: u16JSON 键名为OS出站流数量mis: u16JSON 键名为MIS入站流数量max_message_size: u32旧的最大消息尺寸字段。同时新增了内建栈下的字段max_send_message_size、max_receive_message_size、send_buffer_size、per_stream_send_queue_limit、max_receiver_window_buffer_size、is_data_channel。升级到 0.4.0 后若代码中直接构造SctpParameters应优先采用新字段并为未来移除遗留字段做好准备。4.4 源码中的实际使用从仓库搜索可见SctpNegotiatedCapabilities已被 pipe_transport.rs、plain_transport.rs、webrtc_transport.rs 等路由模块引用并出现在 webrtc_transport 集成测试 与 plain_transport 集成测试 中作为关联连接后查询协商结果的标准途径。五、NEXT当前未发布变更与升级路线CHANGELOG 顶部保留### NEXT占位用于记录尚未发布的下一个版本变更。当前仓库中mediasoup-types的版本号已推进到0.5.0见 rust/types/Cargo.toml因此可以推断自 0.4.0 之后存在一批已提交但尚未写入 CHANGELOG 的变更。在实际升级时建议开发者以仓库内 CHANGELOG.md 顶部NEXT区块为准核对目标版本对应的破坏性变更关注NumSctpStreams相关代码的清理进度避免继续使用遗留的os/mis字段结合 types 目录测试 与 集成测试 验证类型行为。六、版本演进之外类型库核心数据结构速查为便于读者在阅读 CHANGELOG 时定位对应类型下表汇总了本次演进的直接载体及其文件位置类型文件关键字段/变体RtpParametersrust/types/src/rtp_parameters.rsmid、codecs、header_extensions、encodings、rtcp、msidRtpCodecParameters同上mime_type、payload_type、clock_rate、parameters、rtcp_feedbackRtpHeaderExtensionUri同上12 个标准/自定义 URI 变体 UnsupportedRtpEncodingParameters同上ssrc、rid、rtx、dtx、scalability_mode、max_bitrateRtcpParameters同上cname、reduced_size默认 truemediasoup 假定始终为 trueScalabilityModerust/types/src/scalability_modes.rsNoneS1T1到S3T3h共 40 变体 Custom正则兜底SctpParametersrust/types/src/sctp_parameters.rs新内建栈字段 兼容遗留os/mis/max_message_sizeSctpNegotiatedCapabilities同上negotiated_max_outbound_streams、negotiated_max_inbound_streamsSctpStreamParameters同上stream_id、ordered、max_packet_life_time、max_retransmitsSrtpParametersrust/types/src/srtp_parameters.rscrypto_suite4 种默认AES_CM_128_HMAC_SHA1_80、key_base64ListenInfo/IceCandidate/DtlsParameters等rust/types/src/data_structures.rs监听、ICE、DTLS 相关结构值得展开的两个类型ScalabilityMode完整覆盖 W3C webrtc-svc 定义的 L/S 系列模式L1T2、L2T2_KEY、S3T3h 等并支持通过正则^LST([1-9][0-9]?)(_KEY)?解析自定义模式字符串见 scalability_modes.rsspatial_layers()/temporal_layers()/ksvc()提供层数查询SctpStreamParameters可靠性语义清晰——orderedtrue时max_packet_life_time与max_retransmits必须为Noneorderedfalse时二者最多只能设置一个并提供了new_ordered、new_unordered_with_life_time、new_unordered_with_retransmits三个构造器保证组合合法。七、总结与升级建议mediasoup-types的 CHANGELOG 虽然简短却精准勾勒了类型契约的两条演进主线协议覆盖面扩张0.3.0RTP 头部扩展从基础 MID/RID 扩展到拥塞控制transport-cc、AV1 依赖描述符、自定义 packet-id 等RTP 参数补全 RFC 8830msid使 Rust 侧类型与 mediasoup v3 的完整能力对齐传输栈重构0.4.0内建 SCTP 协议栈取代依赖外部栈的方案将流数量从“调用方预声明”改为“关联后协商”以SctpNegotiatedCapabilities暴露结果并保留遗留字段以兼容旧代码。对使用方而言升级时需重点检查是否还在构造NumSctpStreams0.4.0 已删除、是否依赖RtpHeaderExtensionUri::AudioLevel0.3.0 已更名为SsrcAudioLevel、以及是否主动使用了新增的msid字段。结合本仓库的 类型源码、mediasoup-types README 与 worker SCTP 实现即可在升级前后完整验证类型行为与协议语义的一致性。赞分享后端音视频【免费下载链接】mediasoupCutting Edge WebRTC Video Conferencing项目地址https://gitcode.com/gh_mirrors/me/mediasoup点击查看免费下载相关推荐Discount Bandit高级配置如何设置价格提醒规则与通知方式Discount Bandit高级配置如何设置价格提醒规则与通知方式 Discount Bandit是一款多用户自托管价格跟踪器支持Amazon、Aliex后端音视频dcg危险命令拦截工具4大类绕过攻击测试语料库完整解读dcg危险命令拦截工具4大类绕过攻击测试语料库完整解读 Destructive Command Guarddcg 是一款专门拦截 AI 代理Agent后端音视频react-pdf/types 类型系统演进全解从 CHANGELOG 看 react-pdf 的核心 API 能力react pdf/types 类型系统演进全解从 CHANGELOG 看 react pdf 的核心 API 能力 导读 react pdf/typPDF生成后端前端上一篇Obsidian团队协作终极指南如何实现高效思维导图权限管理下一篇免费开源Mac菜单栏管理工具Ice指南三步收好多余图标创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考