2 个不稳定版本

0.2.1 2022 年 6 月 19 日
0.0.1 2022 年 5 月 14 日

#3#voip

Download history 106/week @ 2024-04-03 80/week @ 2024-04-10 135/week @ 2024-04-17 151/week @ 2024-04-24 52/week @ 2024-05-01 72/week @ 2024-05-08 114/week @ 2024-05-15 179/week @ 2024-05-22 109/week @ 2024-05-29 68/week @ 2024-06-05 116/week @ 2024-06-12 104/week @ 2024-06-19 56/week @ 2024-06-26 73/week @ 2024-07-03 42/week @ 2024-07-10 25/week @ 2024-07-17

201 次每月下载
用于 2 个 crate(通过 atm0s-media-server-transp…

自定义许可证

170KB
4.5K SLoC

sdp-rs

Crates.io Version Released API docs License: MIT Minimum rustc version

SDP 的通用库。它可以解析和生成所有 SDP 结构。支持 RFC8866RFC4566

类似于 rsip,这个 crate 是一个通用库,用于处理 SDP 协议时遇到的常见类型。你可以找到诸如 SessionDescriptionMediaDescriptionTime 这样的高层类型,但也可以找到诸如 Connection 或甚至行内的类型,如 Bwtype 等。

sdp-rs 能够使用 nom 解析器解析来自 &str 或 String 的消息,并可以使用主 SessionDescription 结构生成 SDP 消息。每种类型(高层类型、行类型或子行类型)都可以按原样解析或显示,因此你可以处理 SDP 消息的一部分,如果你认为这对你有用的话。

如果你需要解析原始字节(&[u8]),请联系我们。这是可能的,但我们最初避免了这样做,因为 a) 这需要大量的 traits/generics,这将增加复杂性和编译时间 b) SDP 规范强烈建议输入为 UTF-8 c) 将字节转换为 UTF-8 的性能应该可以忽略不计。

特性

  • 这个库非常 快速,使用 nom 进行基本消息解析。
  • 大多数情况下使用强类型(新类型)。每当存在对类型的严格规范时,我们都会选择严格的(新类型)定义。
  • 非常简单的代码结构使其扩展和添加新的SDP行和属性变得超级容易。只要你能够做nom的事情,这很简单。如果你发现处理nom很困难,你总是可以为所需(缺失)的类型打开一个问题。目标是添加尽可能多的类型SDP属性。

架构

sdp-rs中的每个类型都有一个相关的分词器。这还不是由类型系统强制执行的,然而,很快就会是这样。简而言之,对于每个sdp-rs类型,我们有

  • 分词:在最低级别,我们有一个能够分词输入的Tokenizer。所有常见的分词器都接受&str输入。你不需要直接与分词器工作,这些分词器在解析级别间接使用。
  • 解析:一旦输入被分词成标记,那么就有从相关类型分词器到实际类型的TryFrom实现。这是解析步骤,其中标记(以&str的形式)被转换为整数、字符串或sdp-rs类型。
  • 每个sdp-rs类型都实现了Display特质,因此有一个表示。

依赖项

~2.5MB
~41K SLoC