17#if defined (__MACH__) || defined(__FreeBSD__) 
   18#include <machine/endian.h> 
   19#define __BYTE_ORDER BYTE_ORDER 
   20#define __BIG_ENDIAN BIG_ENDIAN 
   21#define __LITTLE_ENDIAN LITTLE_ENDIAN 
   32#define RTP_HEADER_SIZE 12 
   37#if __BYTE_ORDER == __BIG_ENDIAN 
   44#elif __BYTE_ORDER == __LITTLE_ENDIAN 
 
   77#if __BYTE_ORDER == __BIG_ENDIAN 
   83#elif __BYTE_ORDER == __LITTLE_ENDIAN 
 
   93#define JANUS_RTP_EXTMAP_AUDIO_LEVEL            "urn:ietf:params:rtp-hdrext:ssrc-audio-level" 
   95#define JANUS_RTP_EXTMAP_TOFFSET                        "urn:ietf:params:rtp-hdrext:toffset" 
   97#define JANUS_RTP_EXTMAP_ABS_SEND_TIME          "http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time" 
   99#define JANUS_RTP_EXTMAP_VIDEO_ORIENTATION      "urn:3gpp:video-orientation" 
  101#define JANUS_RTP_EXTMAP_TRANSPORT_WIDE_CC      "http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01" 
  103#define JANUS_RTP_EXTMAP_PLAYOUT_DELAY          "http://www.webrtc.org/experiments/rtp-hdrext/playout-delay" 
  105#define JANUS_RTP_EXTMAP_MID                            "urn:ietf:params:rtp-hdrext:sdes:mid" 
  107#define JANUS_RTP_EXTMAP_RID                            "urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id" 
  109#define JANUS_RTP_EXTMAP_REPAIRED_RID           "urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id" 
  111#define JANUS_RTP_EXTMAP_DEPENDENCY_DESC        "https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension" 
  113#define JANUS_RTP_EXTMAP_ENCRYPTED                      "urn:ietf:params:rtp-hdrext:encrypt" 
  190        gboolean *c, gboolean *f, gboolean *r1, gboolean *r0);
 
  200        uint16_t *min_delay, uint16_t *max_delay);
 
  210        char *sdes_item, 
int sdes_len);
 
  220        char *sdes_item, 
int sdes_len);
 
  230        uint8_t *dd_item, 
int *dd_len);
 
  300#define RTP_AUDIO_SKEW_TH_MS 120 
  301#define RTP_VIDEO_SKEW_TH_MS 120 
  302#define SKEW_DETECTION_WAIT_TIME_SECS 10 
  369        char *buf, 
int len, uint32_t *ssrcs, 
char **rids,
 
  417        uint8_t *dd, 
int dd_len, uint8_t *template_id);
 
Plugin-Core communication (implementation)
 
struct json_t json_t
Definition plugin.h:236
 
const char * janus_videocodec_name(janus_videocodec vcodec)
Definition rtp.c:977
 
int janus_rtp_header_extension_set_abs_send_time(char *buf, int len, int id, uint32_t abs_ts)
Helper to set an abs-send-time RTP extension (http://www.webrtc.org/experiments/rtp-hdrext/abs-send-t...
Definition rtp.c:353
 
struct janus_rtp_packet janus_rtp_packet
RTP packet.
 
int janus_rtp_skew_compensate_audio(janus_rtp_header *header, janus_rtp_switching_context *context, gint64 now)
Use the context info to compensate for audio source skew, if needed.
Definition rtp.c:474
 
struct janus_rtp_header_extension janus_rtp_header_extension
RTP extension.
 
void janus_rtp_header_update(janus_rtp_header *header, janus_rtp_switching_context *context, gboolean video, int step)
Use the context info to update the RTP header of a packet, if needed.
Definition rtp.c:704
 
void janus_av1_svc_context_reset(janus_av1_svc_context *context)
Set (or reset) the context fields to their default values.
Definition rtp.c:1226
 
struct janus_rtp_switching_context janus_rtp_switching_context
RTP context, in order to make sure SSRC changes result in coherent seq/ts increases.
 
void janus_rtp_switching_context_reset(janus_rtp_switching_context *context)
Set (or reset) the context fields to their default values.
Definition rtp.c:467
 
janus_audiocodec
Definition rtp.h:116
 
@ JANUS_AUDIOCODEC_PCMU
Definition rtp.h:121
 
@ JANUS_AUDIOCODEC_MULTIOPUS
Definition rtp.h:119
 
@ JANUS_AUDIOCODEC_OPUSRED
Definition rtp.h:120
 
@ JANUS_AUDIOCODEC_NONE
Definition rtp.h:117
 
@ JANUS_AUDIOCODEC_ISAC_32K
Definition rtp.h:124
 
@ JANUS_AUDIOCODEC_G722
Definition rtp.h:123
 
@ JANUS_AUDIOCODEC_OPUS
Definition rtp.h:118
 
@ JANUS_AUDIOCODEC_PCMA
Definition rtp.h:122
 
@ JANUS_AUDIOCODEC_ISAC_16K
Definition rtp.h:125
 
void janus_rtp_simulcasting_context_reset(janus_rtp_simulcasting_context *context)
Set (or reset) the context fields to their default values.
Definition rtp.c:1032
 
gboolean janus_rtp_simulcasting_context_process_rtp(janus_rtp_simulcasting_context *context, char *buf, int len, uint32_t *ssrcs, char **rids, janus_videocodec vcodec, janus_rtp_switching_context *sc)
Process an RTP packet, and decide whether this should be relayed or not, updating the context accordi...
Definition rtp.c:1073
 
janus_audiocodec janus_audiocodec_from_name(const char *name)
Definition rtp.c:929
 
int janus_rtp_header_extension_parse_dependency_desc(char *buf, int len, int id, uint8_t *dd_item, int *dd_len)
Helper to parse a dependency descriptor RTP extension (https://aomediacodec.github....
Definition rtp.c:313
 
int janus_rtp_header_extension_replace_id(char *buf, int len, int id, int new_id)
Helper to replace the ID of an RTP extension with a different one (e.g., to turn a repaired-rtp-strea...
Definition rtp.c:401
 
int janus_rtp_header_extension_set_transport_wide_cc(char *buf, int len, int id, uint16_t transSeqNum)
Helper to set a transport wide sequence number (https://tools.ietf.org/html/draft-holmer-rmcat-transp...
Definition rtp.c:387
 
janus_videocodec
Definition rtp.h:131
 
@ JANUS_VIDEOCODEC_NONE
Definition rtp.h:132
 
@ JANUS_VIDEOCODEC_H264
Definition rtp.h:135
 
@ JANUS_VIDEOCODEC_AV1
Definition rtp.h:136
 
@ JANUS_VIDEOCODEC_VP9
Definition rtp.h:134
 
@ JANUS_VIDEOCODEC_VP8
Definition rtp.h:133
 
@ JANUS_VIDEOCODEC_H265
Definition rtp.h:137
 
int janus_rtp_header_extension_parse_abs_sent_time(char *buf, int len, int id, uint32_t *abs_ts)
Helper to parse an abs-send-time RTP extension (http://www.webrtc.org/experiments/rtp-hdrext/abs-send...
Definition rtp.c:336
 
const char * janus_rtp_header_extension_get_from_id(const char *sdp, int id)
Ugly and dirty helper to quickly get the RTP extension namespace associated with an id (extmap) in an...
Definition rtp.c:81
 
int janus_videocodec_pt(janus_videocodec vcodec)
Definition rtp.c:1012
 
int janus_rtp_header_extension_parse_playout_delay(char *buf, int len, int id, uint16_t *min_delay, uint16_t *max_delay)
Helper to parse a playout-delay RTP extension (https://webrtc.org/experiments/rtp-hdrext/playout-dela...
Definition rtp.c:251
 
int janus_rtp_header_extension_parse_transport_wide_cc(char *buf, int len, int id, uint16_t *transSeqNum)
Helper to parse a transport wide sequence number (https://tools.ietf.org/html/draft-holmer-rmcat-tran...
Definition rtp.c:367
 
gboolean janus_av1_svc_context_process_dd(janus_av1_svc_context *context, uint8_t *dd, int dd_len, uint8_t *template_id)
Process a Dependency Descriptor payload, updating the SVC context accordingly.
Definition rtp.c:1235
 
char * janus_rtp_payload(char *buf, int len, int *plen)
Helper to quickly access the RTP payload, skipping header and extensions.
Definition rtp.c:26
 
rtp_header janus_rtp_header
Definition rtp.h:57
 
int janus_rtp_header_extension_parse_mid(char *buf, int len, int id, char *sdes_item, int sdes_len)
Helper to parse a sdes-mid RTP extension (https://tools.ietf.org/html/draft-ietf-mmusic-sdp-bundle-ne...
Definition rtp.c:270
 
struct janus_rtp_rfc2833_payload janus_rtp_rfc2833_payload
RTP RFC2833 payload.
 
struct janus_av1_svc_template janus_av1_svc_template
Helper struct to track SVC templates.
 
janus_videocodec janus_videocodec_from_name(const char *name)
Definition rtp.c:996
 
int janus_rtp_header_extension_parse_rid(char *buf, int len, int id, char *sdes_item, int sdes_len)
Helper to parse a rtp-stream-id RTP extension (https://tools.ietf.org/html/draft-ietf-avtext-rid-09)
Definition rtp.c:291
 
int janus_rtp_header_extension_parse_video_orientation(char *buf, int len, int id, gboolean *c, gboolean *f, gboolean *r1, gboolean *r0)
Helper to parse a video-orientation RTP extension (http://www.3gpp.org/ftp/Specs/html-info/26114....
Definition rtp.c:229
 
struct rtp_header rtp_header
RTP Header (http://tools.ietf.org/html/rfc3550#section-5.1)
 
void janus_rtp_simulcasting_prepare(json_t *simulcast, int *rid_ext_id, uint32_t *ssrcs, char **rids)
Helper method to prepare the simulcasting info (rids and/or SSRCs) from the simulcast object the core...
Definition rtp.c:1043
 
const char * janus_audiocodec_name(janus_audiocodec acodec)
Definition rtp.c:904
 
struct janus_av1_svc_context janus_av1_svc_context
Helper struct for processing and tracking AV1-SVC streams.
 
int janus_audiocodec_pt(janus_audiocodec acodec)
Definition rtp.c:951
 
gboolean janus_is_rtp(char *buf, guint len)
Helper method to demultiplex RTP from other protocols.
Definition rtp.c:19
 
int janus_rtp_header_extension_get_id(const char *sdp, const char *extension)
Ugly and dirty helper to quickly get the id associated with an RTP extension (extmap) in an SDP.
Definition rtp.c:52
 
struct janus_rtp_simulcasting_context janus_rtp_simulcasting_context
Helper struct for processing and tracking simulcast streams.
 
int janus_rtp_header_extension_parse_audio_level(char *buf, int len, int id, gboolean *vad, int *level)
Helper to parse a ssrc-audio-level RTP extension (https://tools.ietf.org/html/rfc6464)
Definition rtp.c:214
 
int janus_rtp_skew_compensate_video(janus_rtp_header *header, janus_rtp_switching_context *context, gint64 now)
Use the context info to compensate for video source skew, if needed.
Definition rtp.c:590
 
Helper struct for processing and tracking AV1-SVC streams.
Definition rtp.h:377
 
uint8_t tcnt
Number of templates advertised via Dependency Descriptor.
Definition rtp.h:379
 
int spatial_layers
How many spatial and temporal layers are available.
Definition rtp.h:385
 
GHashTable * templates
Map of templates advertised via Dependency Descriptor, indexed by ID.
Definition rtp.h:383
 
gboolean updated
Whether this context changed since the last update.
Definition rtp.h:387
 
uint8_t tioff
Template ID offset, as advertised via Dependency Descriptor.
Definition rtp.h:381
 
int temporal_layers
Definition rtp.h:385
 
Helper struct to track SVC templates.
Definition rtp.h:393
 
uint8_t id
Template ID.
Definition rtp.h:395
 
int spatial
Spatial layer associated to this template.
Definition rtp.h:397
 
int temporal
Temporal layer associated to this template.
Definition rtp.h:399
 
Janus plugin RTP extensions.
Definition plugin.h:555
 
RTP packet.
Definition rtp.h:60
 
gint64 current_backoff
Definition rtp.h:65
 
char * data
Definition rtp.h:61
 
gint64 last_retransmit
Definition rtp.h:64
 
gint length
Definition rtp.h:62
 
gint64 created
Definition rtp.h:63
 
janus_plugin_rtp_extensions extensions
Definition rtp.h:66
 
RTP RFC2833 payload.
Definition rtp.h:76
 
uint8_t end
Definition rtp.h:79
 
uint16_t duration
Definition rtp.h:82
 
uint8_t event
Definition rtp.h:78
 
uint8_t reserved
Definition rtp.h:80
 
uint8_t volume
Definition rtp.h:81
 
Helper struct for processing and tracking simulcast streams.
Definition rtp.h:322
 
gboolean changed_temporal
Whether the temporal layer has changed after processing a packet.
Definition rtp.h:340
 
int templayer_target
As above, but to handle transitions (e.g., wait for keyframe)
Definition rtp.h:332
 
int substream_target
As above, but to handle transitions (e.g., wait for keyframe, or get this if available)
Definition rtp.h:328
 
gint rid_ext_id
RTP Stream extension ID, if any.
Definition rtp.h:324
 
gboolean changed_substream
Whether the substream has changed after processing a packet.
Definition rtp.h:338
 
guint32 drop_trigger
How much time (in us, default 250000) without receiving packets will make us drop to the substream be...
Definition rtp.h:334
 
int substream_target_temp
Definition rtp.h:328
 
int templayer
Which simulcast temporal layer we should forward back.
Definition rtp.h:330
 
int substream
Which simulcast substream we should forward back.
Definition rtp.h:326
 
gboolean need_pli
Whether we need to send the user a keyframe request (PLI)
Definition rtp.h:342
 
gint64 last_relayed
When we relayed the last packet (used to detect when substreams become unavailable)
Definition rtp.h:336
 
RTP context, in order to make sure SSRC changes result in coherent seq/ts increases.
Definition rtp.h:274
 
uint32_t v_start_ts
Definition rtp.h:276
 
uint32_t a_prev_ts
Definition rtp.h:275
 
gboolean a_seq_reset
Definition rtp.h:279
 
gboolean v_seq_reset
Definition rtp.h:280
 
uint32_t v_base_ts
Definition rtp.h:276
 
gint64 a_reference_time
Definition rtp.h:285
 
gint32 v_prev_delay
Definition rtp.h:284
 
gint32 v_ts_offset
Definition rtp.h:284
 
uint16_t v_base_seq_prev
Definition rtp.h:278
 
gint32 v_active_delay
Definition rtp.h:284
 
uint32_t a_last_ssrc
Definition rtp.h:275
 
gboolean a_ts_reset
Definition rtp.h:279
 
uint16_t a_base_seq
Definition rtp.h:277
 
uint16_t v_base_seq
Definition rtp.h:278
 
uint32_t a_target_ts
Definition rtp.h:275
 
gint64 a_evaluating_start_time
Definition rtp.h:285
 
uint32_t a_start_ts
Definition rtp.h:275
 
gboolean a_new_ssrc
Definition rtp.h:279
 
gboolean v_ts_reset
Definition rtp.h:280
 
uint32_t a_base_ts
Definition rtp.h:275
 
uint32_t a_base_ts_prev
Definition rtp.h:275
 
gboolean v_new_ssrc
Definition rtp.h:280
 
gint64 v_last_time
Definition rtp.h:286
 
gint16 v_seq_offset
Definition rtp.h:282
 
uint16_t a_base_seq_prev
Definition rtp.h:277
 
uint16_t v_last_seq
Definition rtp.h:278
 
gint64 v_start_time
Definition rtp.h:286
 
uint16_t v_prev_seq
Definition rtp.h:278
 
gint64 a_start_time
Definition rtp.h:285
 
gint32 a_prev_delay
Definition rtp.h:283
 
uint32_t v_last_ts
Definition rtp.h:276
 
gint64 a_last_time
Definition rtp.h:285
 
gint16 a_seq_offset
Definition rtp.h:281
 
uint32_t a_last_ts
Definition rtp.h:275
 
gint32 a_active_delay
Definition rtp.h:283
 
uint32_t v_target_ts
Definition rtp.h:276
 
uint16_t a_prev_seq
Definition rtp.h:277
 
gint64 v_evaluating_start_time
Definition rtp.h:286
 
uint16_t a_last_seq
Definition rtp.h:277
 
uint32_t v_prev_ts
Definition rtp.h:276
 
gint64 v_reference_time
Definition rtp.h:286
 
uint32_t v_base_ts_prev
Definition rtp.h:276
 
gint32 a_ts_offset
Definition rtp.h:283
 
uint32_t v_last_ssrc
Definition rtp.h:276