#candidate #ice #nat #webrtc #web-rtc #parser

candidateparser

根据RFC5245实现的ICE候选SDP解析器

3个不稳定版本

使用旧的Rust 2015

0.2.0 2017年9月25日
0.1.1 2017年9月22日
0.1.0 2017年9月22日

#candidate中排名第6

MIT/Apache

23KB
576

candidateparser

CircleCI Crates.io Version Crates.io Downloads Rust

这是一个用于ICE候选SDP的解析器,用于通信系统(如WebRTC)中的连接建立和NAT穿越。提供了C和Android(通过JNI)的绑定。也可以构建iOS的通用库。

候选SDP示例

candidate:842163049 1 udp 1686052607 1.2.3.4 46154 typ srflx raddr 10.0.0.17 rport 46154 generation 0 ufrag EEtu network-id 3 network-cost 10

它将数据解析为包含所有组件的结构体。上面的示例将生成以下对象

IceCandidate {
    foundation: "842163049",
    component_id: 1,
    transport: Udp,
    priority: 1686052607,
    connection_address: V4(1.2.3.4),
    port: 46154,
    candidate_type: Srflx,
    rel_addr: Some(V4(10.0.0.17)),
    rel_port: Some(46154),
    extensions: Some({
        [110, 101, 116, 119, 111, 114, 107, 45, 99, 111, 115, 116]: [49, 48],
        [103, 101, 110, 101, 114, 97, 116, 105, 111, 110]: [48],
        [117, 102, 114, 97, 103]: [69, 69, 116, 117],
        [110, 101, 116, 119, 111, 114, 107, 45, 105, 100]: [51]
    })
}

有关更多信息,请参阅RFC5245(交互式连接建立(ICE))

模块文档:https://docs.rs/candidateparser/

注意:由于构建系统问题,需要Rust 1.21+。

FFI(C/C++17)

此库包含C和C++17绑定,因此您可以从支持C调用约定的任何语言中使用它。C和C++17的示例程序可以在candidateparser-ffi/examples/目录中找到。

JNI绑定(Java/Android)

此库还包含JNI绑定,使用jni-rs编写。在candidateparser-android目录中提供了一个具有简单测试的Android库。

确保在构建Android库之前构建candidateparser-jni模块。

为Android构建candidateparser-jni

要求

  • Android NDK
  • Rustup
  • Make

添加rustup目标

$ rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android

构建独立的工具链

$ ./create-ndk-standalone.sh

将工具链配置添加到您的~/.cargo/config

$ cat cargo-config.toml >> ~/.cargo/config

构建Android库

$ make android

为Android构建candidateparser-android

使用gradle构建库

$ ./gradlew build

您将在app/build/outputs/aar/目录中找到AAR文件。

代码风格检查

要在夜间编译器上运行clippy代码风格检查,请使用--features clippy编译库

$ cargo build --features clippy

注意:从工作区根目录运行此命令将不起作用,您必须使用cd进入子模块!

通用iOS库

如果您想构建一个通用的iOS库,请安装cargo-lipo。然后,删除根目录下的Cargo.toml文件(目前cargo-lipo无法处理工作区)。

$ rm Cargo.toml

最后,构建库

$ make ios

请注意,目前这仅在macOS上有效。

许可证

根据以下任一许可证授权:

贡献

除非您明确说明,否则您根据Apache-2.0许可证定义的,有意提交以包含在作品中的任何贡献,将按上述方式双授权,不附加任何额外条款或条件。


lib.rs:

遵循RFC5245的ICE候选解析器。

此库的主要入口点是parse函数。有关更多信息,请参阅该函数的文档。

依赖项

~1.1–2MB
~46K SLoC