9个版本
0.1.2 | 2024年6月13日 |
---|---|
0.1.1 | 2024年2月14日 |
0.1.0 | 2023年6月30日 |
0.0.5 | 2023年2月2日 |
0.0.0 | 2019年6月30日 |
#158 在 网络编程
5,916 每月下载量
用于 5 个Crate(3个直接使用)
260KB
6.5K SLoC
rtsp-types
用于处理RTSP(RFC 7826)消息的Crate,包括解析器和序列化器以及支持解析和生成常用头部。
请参阅文档以获取详细信息。
许可证
rtsp-types遵循MIT许可证(LICENSE 或 http://opensource.org/licenses/MIT)。
贡献
欢迎以pull request的形式提供任何类型的贡献。
除非你明确说明,否则你提交给rtsp-types的任何有意贡献都应按照上述MIT许可证进行许可,不附加任何额外条款或条件。
lib.rs
:
用于处理RTSP(RFC 7826)消息的Crate,包括解析器和序列化器以及支持解析和生成常用头部。
创建一个OPTIONS
请求
let request = rtsp_types::Request::builder(
rtsp_types::Method::Options,
rtsp_types::Version::V2_0
)
.header(rtsp_types::headers::CSEQ, "1")
.empty();
此请求包含一个空体。
创建一个带有请求体的SET_PARAMETER
请求
let request = rtsp_types::Request::builder(
rtsp_types::Method::SetParameter,
rtsp_types::Version::V2_0
)
.request_uri(rtsp_types::Url::parse("rtsp://example.com/test").expect("Invalid URI"))
.header(rtsp_types::headers::CSEQ, "2")
.header(rtsp_types::headers::CONTENT_TYPE, "text/parameters")
.build(Vec::from(&b"barparam: barstuff"[..]));
体传递给build()
函数,并在请求头中自动插入一个Content-Length
头。
创建一个OK
响应
let response = rtsp_types::Response::builder(
rtsp_types::Version::V2_0,
rtsp_types::StatusCode::Ok,
)
.header(rtsp_types::headers::CSEQ, "1")
.empty();
此响应包含一个空体。可以通过与请求相同的方式添加非空体。
创建数据消息
let data = rtsp_types::Data::new(0, vec![0, 1, 2, 3, 4]);
这将为通道ID 0创建一个新的数据消息,其中包含给定的 Vec<u8>
。
解析RTSP消息
let data = b"OPTIONS * RTSP/2.0\r\n\
CSeq: 1\r\n\
Supported: play.basic, play.scale\r\n\
User-Agent: PhonyClient/1.2\r\n\
\r\n";
let (message, consumed): (rtsp_types::Message<Vec<u8>>, _) =
rtsp_types::Message::parse(data).expect("Failed to parse data");
assert_eq!(consumed, data.len());
match message {
rtsp_types::Message::Request(ref request) => {
assert_eq!(request.method(), rtsp_types::Method::Options);
},
_ => unreachable!(),
}
可以从任何 AsRef<[u8]>
解析消息,并将其解析为任何实现了 From<&[u8]>
的借用或所有权的主体类型。
有关解析的更多详细信息,请参阅 Message::parse
。
序列化RTSP消息
let request = rtsp_types::Request::builder(
rtsp_types::Method::SetParameter,
rtsp_types::Version::V2_0
)
.request_uri(rtsp_types::Url::parse("rtsp://example.com/test").expect("Invalid URI"))
.header(rtsp_types::headers::CSEQ, "2")
.header(rtsp_types::headers::CONTENT_TYPE, "text/parameters")
.build(Vec::from(&b"barparam: barstuff"[..]));
let mut data = Vec::new();
request.write(&mut data).expect("Failed to serialize request");
assert_eq!(
data,
b"SET_PARAMETER rtsp://example.com/test RTSP/2.0\r\n\
Content-Length: 18\r\n\
Content-Type: text/parameters\r\n\
CSeq: 2\r\n\
\r\n\
barparam: barstuff",
);
序列化可以针对任何实现了 std::io::Write
的类型进行。
有关序列化的更多详细信息,请参阅 Message::write
。
依赖关系
~2.5MB
~68K SLoC