2 个不稳定版本
0.2.1 | 2022 年 6 月 19 日 |
---|---|
0.0.1 | 2022 年 5 月 14 日 |
#3 在 #voip
201 次每月下载
用于 2 个 crate(通过 atm0s-media-server-transp…)
170KB
4.5K SLoC
sdp-rs
SDP 的通用库。它可以解析和生成所有 SDP 结构。支持 RFC8866 和 RFC4566。
类似于 rsip,这个 crate 是一个通用库,用于处理 SDP 协议时遇到的常见类型。你可以找到诸如 SessionDescription
、MediaDescription
和 Time
这样的高层类型,但也可以找到诸如 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