Expand description
Crate for handling RTSP (RFC 7826) messages, including a parser and serializer and support for parsing and generating well-known headers.
§Creating an OPTIONS
request
let request = rtsp_types::Request::builder(
rtsp_types::Method::Options,
rtsp_types::Version::V2_0
)
.header(rtsp_types::headers::CSEQ, "1")
.empty();
This request contains an empty body.
§Creating a SET_PARAMETER
request with a request body
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"[..]));
The body is passed to the build()
function and a Content-Length
header is automatically
inserted into the request headers.
§Creating an OK
response
let response = rtsp_types::Response::builder(
rtsp_types::Version::V2_0,
rtsp_types::StatusCode::Ok,
)
.header(rtsp_types::headers::CSEQ, "1")
.empty();
This response contains an empty body. A non-empty body can be added in the same way as for requests.
§Creating a data message
let data = rtsp_types::Data::new(0, vec![0, 1, 2, 3, 4]);
This creates a new data message for channel id 0 with the given Vec<u8>
.
§Parsing an RTSP message
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!(),
}
Messages can be parsed from any AsRef<[u8]>
and to any borrowed or owned body type that
implements From<&[u8]>
.
More details about parsing can be found at Message::parse
.
§Serializing an RTSP message
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",
);
Serializing can be done to any type that implements std::io::Write
.
More details about serializing can be found at Message::write
.
Re-exports§
pub use headers::HeaderName;
pub use headers::HeaderValue;
pub use headers::Headers;
Modules§
- headers
- RTSP header definitions.
Structs§
- Data
- RTSP data message.
- Empty
- Empty body.
- Request
- RTSP Request.
- Request
Builder - RTSP request builder.
- Response
- RTSP Response.
- Response
Builder - RTSP response builder.
- Url
- A parsed URL record.
Enums§
- Host
- The host name of an URL.
- Message
- Enum holding all possible RTSP message types.
- Method
- RTSP method.
- Parse
Error - Message parsing error.
- Status
Code - RTSP response status codes.
- Version
- RTSP protocol version of the message.
- Write
Error - Serialization write error.