1use bytes::Bytes;
2use ezk::{Frame, MediaType};
3use std::str::Utf8Error;
4
5mod depacketizer;
6mod media_type;
7mod ntp_timestamp;
8mod packetizer;
9mod rtp_packet;
10mod session;
11
12pub use depacketizer::DePacketizer;
13pub use media_type::{Rtp, RtpConfig, RtpConfigRange};
14pub use ntp_timestamp::NtpTimestamp;
15pub use packetizer::Packetizer;
16pub use rtp_packet::*;
17pub use session::Session;
18
19pub use rtcp_types;
20pub use rtp_types;
21
22#[derive(Debug)]
23pub enum DecodeError {
24 Incomplete,
25 InvalidVersion,
26 InvalidAlignment,
27
28 UnknownPayloadType(u8),
29 UnknownFmt(u8),
30 UnknownTag(u8),
31
32 Utf8(Utf8Error),
33}
34
35impl From<Utf8Error> for DecodeError {
36 fn from(value: Utf8Error) -> Self {
37 Self::Utf8(value)
38 }
39}
40
41pub trait Payloadable: Sized + MediaType {
45 type Payloader: Payloader<Self>;
46 type DePayloader: DePayloader<Self>;
47
48 const STATIC_PT: Option<u8>;
50
51 fn make_payloader(config: Self::Config) -> Self::Payloader;
53
54 fn make_depayloader(available: Vec<Self::ConfigRange>) -> (Self::Config, Self::DePayloader);
56}
57
58pub trait Payloader<M: MediaType>: Send + 'static {
60 fn payload(&mut self, frame: Frame<M>, max_size: usize) -> impl Iterator<Item = Bytes> + '_;
62}
63
64pub trait DePayloader<M: MediaType>: Send + 'static {
65 fn depayload(&mut self, payload: &[u8]) -> M::FrameData;
66}