rtpsession.h
Go to the documentation of this file.
/*
The oRTP library is an RTP (Realtime Transport Protocol - rfc3550) stack.
Copyright (C) 2001 Simon MORLAT simon.morlat@linphone.org
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef RTPSESSION_H
#define RTPSESSION_H
#include <ortp/port.h>
#include <ortp/rtp.h>
#include <ortp/payloadtype.h>
#include <ortp/sessionset.h>
#include <ortp/rtcp.h>
#include <ortp/str_utils.h>
#include <ortp/rtpsignaltable.h>
#include <ortp/event.h>
typedef enum {
RTP_SESSION_RECVONLY,
RTP_SESSION_SENDONLY,
RTP_SESSION_SENDRECV
} RtpSessionMode;
typedef struct _JBParameters{
int min_size;
int nom_size;
int max_size;
bool_t adaptive;
bool_t pad[3];
int max_packets;
} JBParameters;
typedef struct _JitterControl
{
int count;
int jitt_comp; /* the user jitt_comp in miliseconds*/
int jitt_comp_ts; /* the jitt_comp converted in rtp time (same unit as timestamp) */
int adapt_jitt_comp_ts;
int64_t slide;
int64_t prev_slide;
float jitter;
int olddiff;
float inter_jitter; /* interarrival jitter as defined in the RFC */
int corrective_step;
int corrective_slide;
bool_t adaptive;
bool_t enabled;
} JitterControl;
typedef struct _WaitPoint
{
ortp_mutex_t lock;
ortp_cond_t cond;
uint32_t time;
bool_t wakeup;
} WaitPoint;
typedef struct _RtpTransport
{
void *data;
ortp_socket_t (*t_getsocket)(struct _RtpTransport *t);
int (*t_sendto)(struct _RtpTransport *t, mblk_t *msg , int flags, const struct sockaddr *to, socklen_t tolen);
int (*t_recvfrom)(struct _RtpTransport *t, mblk_t *msg, int flags, struct sockaddr *from, socklen_t *fromlen);
struct _RtpSession *session;//<back pointer to the owning session, set by oRTP
} RtpTransport;
typedef struct _RtpStream
{
ortp_socket_t socket;
struct _RtpTransport *tr;
int sockfamily;
int max_rq_size;
int time_jump;
uint32_t ts_jump;
queue_t rq;
queue_t tev_rq;
mblk_t *cached_mp;
int loc_port;
#ifdef ORTP_INET6
struct sockaddr_storage rem_addr;
#else
struct sockaddr_in rem_addr;
#endif
int rem_addrlen;
void *QoSHandle;
unsigned long QoSFlowID;
JitterControl jittctl;
uint32_t snd_time_offset;/*the scheduler time when the application send its first timestamp*/
uint32_t snd_ts_offset; /* the first application timestamp sent by the application */
uint32_t snd_rand_offset; /* a random number added to the user offset to make the stream timestamp*/
uint32_t snd_last_ts; /* the last stream timestamp sended */
uint32_t rcv_time_offset; /*the scheduler time when the application ask for its first timestamp*/
uint32_t rcv_ts_offset; /* the first stream timestamp */
uint32_t rcv_query_ts_offset; /* the first user timestamp asked by the application */
uint32_t rcv_last_ts; /* the last stream timestamp got by the application */
uint32_t rcv_last_app_ts; /* the last application timestamp asked by the application */
uint32_t rcv_last_ret_ts; /* the timestamp of the last sample returned (only for continuous audio)*/
uint32_t hwrcv_extseq; /* last received on socket extended sequence number */
uint32_t hwrcv_seq_at_last_SR;
uint32_t hwrcv_since_last_SR;
uint32_t last_rcv_SR_ts; /* NTP timestamp (middle 32 bits) of last received SR */
struct timeval last_rcv_SR_time; /* time at which last SR was received */
uint16_t snd_seq; /* send sequence number */
uint32_t last_rtcp_report_snt_r; /* the time of the last rtcp report sent, in recv timestamp unit */
uint32_t last_rtcp_report_snt_s; /* the time of the last rtcp report sent, in send timestamp unit */
uint32_t rtcp_report_snt_interval; /* the interval in timestamp unit between rtcp report sent */
uint32_t last_rtcp_packet_count; /*the sender's octet count in the last sent RTCP SR*/
uint32_t sent_payload_bytes; /*used for RTCP sender reports*/
unsigned int sent_bytes; /* used for bandwidth estimation */
struct timeval send_bw_start; /* used for bandwidth estimation */
unsigned int recv_bytes; /* used for bandwidth estimation */
struct timeval recv_bw_start; /* used for bandwidth estimation */
rtp_stats_t stats;
int recv_errno;
int send_errno;
int snd_socket_size;
int rcv_socket_size;
int ssrc_changed_thres;
}RtpStream;
typedef struct _RtcpStream
{
ortp_socket_t socket;
int sockfamily;
struct _RtpTransport *tr;
mblk_t *cached_mp;
#ifdef ORTP_INET6
struct sockaddr_storage rem_addr;
#else
struct sockaddr_in rem_addr;
#endif
int rem_addrlen;
bool_t enabled; /*tells whether we can send RTCP packets */
} RtcpStream;
typedef struct _RtpSession RtpSession;
struct _RtpSession
{
RtpSession *next; /* next RtpSession, when the session are enqueued by the scheduler */
int mask_pos; /* the position in the scheduler mask of RtpSession : do not move this field: it is part of the ABI since the session_set macros use it*/
struct {
RtpProfile *profile;
int pt;
unsigned int ssrc;
WaitPoint wp;
int telephone_events_pt; /* the payload type used for telephony events */
} snd,rcv;
unsigned int inc_ssrc_candidate;
int inc_same_ssrc_count;
int hw_recv_pt; /* recv payload type before jitter buffer */
int recv_buf_size;
RtpSignalTable on_ssrc_changed;
RtpSignalTable on_payload_type_changed;
RtpSignalTable on_telephone_event_packet;
RtpSignalTable on_telephone_event;
RtpSignalTable on_timestamp_jump;
RtpSignalTable on_network_error;
RtpSignalTable on_rtcp_bye;
struct _OList *signal_tables;
struct _OList *eventqs;
msgb_allocator_t allocator;
RtpStream rtp;
RtcpStream rtcp;
RtpSessionMode mode;
struct _RtpScheduler *sched;
uint32_t flags;
int dscp;
int multicast_ttl;
int multicast_loopback;
void * user_data;
/* FIXME: Should be a table for all session participants. */
struct timeval last_recv_time; /* Time of receiving the RTP/RTCP packet. */
mblk_t *pending;
/* telephony events extension */
mblk_t *current_tev; /* the pending telephony events */
mblk_t *sd;
queue_t contributing_sources;
bool_t symmetric_rtp;
bool_t permissive; /*use the permissive algorithm*/
bool_t use_connect; /* use connect() on the socket */
bool_t ssrc_set;
};
#ifdef __cplusplus
extern "C"
{
#endif
/* public API */
RtpSession *rtp_session_new(int mode);
void rtp_session_set_scheduling_mode(RtpSession *session, int yesno);
void rtp_session_set_blocking_mode(RtpSession *session, int yesno);
void rtp_session_set_profile(RtpSession *session, RtpProfile *profile);
void rtp_session_set_send_profile(RtpSession *session,RtpProfile *profile);
void rtp_session_set_recv_profile(RtpSession *session,RtpProfile *profile);
RtpProfile *rtp_session_get_profile(RtpSession *session);
RtpProfile *rtp_session_get_send_profile(RtpSession *session);
RtpProfile *rtp_session_get_recv_profile(RtpSession *session);
int rtp_session_signal_connect(RtpSession *session,const char *signal_name, RtpCallback cb, unsigned long user_data);
int rtp_session_signal_disconnect_by_callback(RtpSession *session,const char *signal_name, RtpCallback cb);
void rtp_session_set_ssrc(RtpSession *session, uint32_t ssrc);
void rtp_session_set_seq_number(RtpSession *session, uint16_t seq);
uint16_t rtp_session_get_seq_number(RtpSession *session);
void rtp_session_enable_jitter_buffer(RtpSession *session , bool_t enabled);
bool_t rtp_session_jitter_buffer_enabled(const RtpSession *session);
void rtp_session_set_jitter_buffer_params(RtpSession *session, const JBParameters *par);
void rtp_session_get_jitter_buffer_params(RtpSession *session, JBParameters *par);
/*deprecated jitter control functions*/
void rtp_session_set_jitter_compensation(RtpSession *session, int milisec);
void rtp_session_enable_adaptive_jitter_compensation(RtpSession *session, bool_t val);
bool_t rtp_session_adaptive_jitter_compensation_enabled(RtpSession *session);
void rtp_session_set_time_jump_limit(RtpSession *session, int miliseconds);
int rtp_session_set_local_addr(RtpSession *session,const char *addr, int port);
int rtp_session_get_local_port(const RtpSession *session);
int
rtp_session_set_remote_addr_full (RtpSession * session, const char * addr, int rtp_port, int rtcp_port);
/*same as previous function, old name:*/
int rtp_session_set_remote_addr_and_port (RtpSession * session, const char * addr, int rtp_port, int rtcp_port);
int rtp_session_set_remote_addr(RtpSession *session,const char *addr, int port);
/* alternatively to the set_remote_addr() and set_local_addr(), an application can give
a valid socket (potentially connect()ed )to be used by the RtpSession */
void rtp_session_set_sockets(RtpSession *session, int rtpfd, int rtcpfd);
void rtp_session_set_transports(RtpSession *session, RtpTransport *rtptr, RtpTransport *rtcptr);
/*those methods are provided for people who wants to send non-RTP messages using the RTP/RTCP sockets */
ortp_socket_t rtp_session_get_rtp_socket(const RtpSession *session);
ortp_socket_t rtp_session_get_rtcp_socket(const RtpSession *session);
/* QOS / DSCP */
int rtp_session_set_dscp(RtpSession *session, int dscp);
int rtp_session_get_dscp(const RtpSession *session);
/* Multicast methods */
int rtp_session_set_multicast_ttl(RtpSession *session, int ttl);
int rtp_session_get_multicast_ttl(RtpSession *session);
int rtp_session_set_multicast_loopback(RtpSession *session, int yesno);
int rtp_session_get_multicast_loopback(RtpSession *session);
int rtp_session_set_send_payload_type(RtpSession *session, int paytype);
int rtp_session_get_send_payload_type(const RtpSession *session);
int rtp_session_get_recv_payload_type(const RtpSession *session);
int rtp_session_set_recv_payload_type(RtpSession *session, int pt);
int rtp_session_set_payload_type(RtpSession *session, int pt);
void rtp_session_set_symmetric_rtp (RtpSession * session, bool_t yesno);
void rtp_session_set_connected_mode(RtpSession *session, bool_t yesno);
void rtp_session_enable_rtcp(RtpSession *session, bool_t yesno);
void rtp_session_set_ssrc_changed_threshold(RtpSession *session, int numpackets);
/*low level recv and send functions */
mblk_t * rtp_session_recvm_with_ts (RtpSession * session, uint32_t user_ts);
mblk_t * rtp_session_create_packet(RtpSession *session,int header_size, const uint8_t *payload, int payload_size);
mblk_t * rtp_session_create_packet_with_data(RtpSession *session, uint8_t *payload, int payload_size, void (*freefn)(void*));
mblk_t * rtp_session_create_packet_in_place(RtpSession *session,uint8_t *buffer, int size, void (*freefn)(void*) );
int rtp_session_sendm_with_ts (RtpSession * session, mblk_t *mp, uint32_t userts);
/* high level recv and send functions */
int rtp_session_recv_with_ts(RtpSession *session, uint8_t *buffer, int len, uint32_t ts, int *have_more);
int rtp_session_send_with_ts(RtpSession *session, const uint8_t *buffer, int len, uint32_t userts);
/* event API*/
void rtp_session_register_event_queue(RtpSession *session, OrtpEvQueue *q);
void rtp_session_unregister_event_queue(RtpSession *session, OrtpEvQueue *q);
/* IP bandwidth usage estimation functions, returning bits/s*/
float rtp_session_compute_send_bandwidth(RtpSession *session);
float rtp_session_compute_recv_bandwidth(RtpSession *session);
void rtp_session_send_rtcp_APP(RtpSession *session, uint8_t subtype, const char *name, const uint8_t *data, int datalen);
uint32_t rtp_session_get_current_send_ts(RtpSession *session);
uint32_t rtp_session_get_current_recv_ts(RtpSession *session);
void rtp_session_flush_sockets(RtpSession *session);
void rtp_session_release_sockets(RtpSession *session);
void rtp_session_resync(RtpSession *session);
void rtp_session_reset(RtpSession *session);
void rtp_session_destroy(RtpSession *session);
const rtp_stats_t * rtp_session_get_stats(const RtpSession *session);
void rtp_session_reset_stats(RtpSession *session);
void rtp_session_set_data(RtpSession *session, void *data);
void *rtp_session_get_data(const RtpSession *session);
void rtp_session_set_recv_buf_size(RtpSession *session, int bufsize);
void rtp_session_set_rtp_socket_send_buffer_size(RtpSession * session, unsigned int size);
void rtp_session_set_rtp_socket_recv_buffer_size(RtpSession * session, unsigned int size);
/* in use with the scheduler to convert a timestamp in scheduler time unit (ms) */
uint32_t rtp_session_ts_to_time(RtpSession *session,uint32_t timestamp);
uint32_t rtp_session_time_to_ts(RtpSession *session, int millisecs);
/* this function aims at simulating senders with "imprecise" clocks, resulting in
rtp packets sent with timestamp uncorrelated with the system clock .
This is only availlable to sessions working with the oRTP scheduler */
void rtp_session_make_time_distorsion(RtpSession *session, int milisec);
/*RTCP functions */
void rtp_session_set_source_description(RtpSession *session, const char *cname,
const char *name, const char *email, const char *phone,
const char *loc, const char *tool, const char *note);
void rtp_session_add_contributing_source(RtpSession *session, uint32_t csrc,
const char *cname, const char *name, const char *email, const char *phone,
const char *loc, const char *tool, const char *note);
void rtp_session_remove_contributing_sources(RtpSession *session, uint32_t csrc);
mblk_t* rtp_session_create_rtcp_sdes_packet(RtpSession *session);
void rtp_session_get_last_recv_time(RtpSession *session, struct timeval *tv);
int rtp_session_bye(RtpSession *session, const char *reason);
int rtp_session_get_last_send_error_code(RtpSession *session);
void rtp_session_clear_send_error_code(RtpSession *session);
int rtp_session_get_last_recv_error_code(RtpSession *session);
void rtp_session_clear_recv_error_code(RtpSession *session);
/*private */
void rtp_session_init(RtpSession *session, int mode);
#define rtp_session_set_flag(session,flag) (session)->flags|=(flag)
#define rtp_session_unset_flag(session,flag) (session)->flags&=~(flag)
void rtp_session_uninit(RtpSession *session);
#ifdef __cplusplus
}
#endif
#endif
rtp_session_recvm_with_ts
mblk_t * rtp_session_recvm_with_ts(RtpSession *session, uint32_t user_ts)
Definition: rtpsession.c:970
rtp_session_release_sockets
void rtp_session_release_sockets(RtpSession *session)
Definition: rtpsession.c:1273
rtp_session_set_scheduling_mode
void rtp_session_set_scheduling_mode(RtpSession *session, int yesno)
Definition: rtpsession.c:331
_RtcpStream
Definition: rtpsession.h:153
rtp_session_get_send_profile
RtpProfile * rtp_session_get_send_profile(RtpSession *session)
Definition: rtpsession.c:456
rtp_session_get_last_recv_time
void rtp_session_get_last_recv_time(RtpSession *session, struct timeval *tv)
Definition: rtpsession.c:1599
rtp_session_set_seq_number
void rtp_session_set_seq_number(RtpSession *session, uint16_t seq)
Definition: rtpsession.c:577
rtp_session_flush_sockets
void rtp_session_flush_sockets(RtpSession *session)
Definition: rtpsession_inet.c:783
rtp_session_set_ssrc
void rtp_session_set_ssrc(RtpSession *session, uint32_t ssrc)
Definition: rtpsession.c:595
_JBParameters::max_packets
int max_packets
Definition: rtpsession.h:60
payloadtype.h
Using and creating standart and custom RTP profiles.
rtp_session_set_send_payload_type
int rtp_session_set_send_payload_type(RtpSession *session, int paytype)
Definition: rtpsession.c:626
rtp_session_destroy
void rtp_session_destroy(RtpSession *session)
Definition: rtpsession.c:1545
_RtpSession
Definition: rtpsession.h:179
msgb
Definition: str_utils.h:27
rtp_session_get_multicast_loopback
int rtp_session_get_multicast_loopback(RtpSession *session)
Definition: rtpsession_inet.c:434
rtp_session_set_profile
void rtp_session_set_profile(RtpSession *session, RtpProfile *profile)
Definition: rtpsession.c:385
rtp_session_get_local_port
int rtp_session_get_local_port(const RtpSession *session)
Definition: rtpsession_inet.c:576
rtp_session_send_with_ts
int rtp_session_send_with_ts(RtpSession *session, const uint8_t *buffer, int len, uint32_t userts)
Definition: rtpsession.c:909
rtp_session_set_dscp
int rtp_session_set_dscp(RtpSession *session, int dscp)
Definition: rtpsession_inet.c:449
rtp_session_set_remote_addr
int rtp_session_set_remote_addr(RtpSession *session, const char *addr, int port)
Definition: rtpsession_inet.c:610
_RtpStream
Definition: rtpsession.h:99
rtp_session_get_current_send_ts
uint32_t rtp_session_get_current_send_ts(RtpSession *session)
Definition: rtpsession.c:1209
rtp_session_set_symmetric_rtp
void rtp_session_set_symmetric_rtp(RtpSession *session, bool_t yesno)
Definition: rtpsession.c:1474
_WaitPoint
Definition: rtpsession.h:80
_JBParameters::min_size
int min_size
Definition: rtpsession.h:55
rtp_session_get_multicast_ttl
int rtp_session_get_multicast_ttl(RtpSession *session)
Definition: rtpsession_inet.c:358
rtp_session_get_stats
const rtp_stats_t * rtp_session_get_stats(const RtpSession *session)
Definition: rtpsession.c:1438
_RtpSignalTable
Definition: rtpsignaltable.h:27
rtp_session_get_current_recv_ts
uint32_t rtp_session_get_current_recv_ts(RtpSession *session)
Definition: rtpsession.c:1235
_queue
Definition: str_utils.h:47
rtp_session_get_recv_profile
RtpProfile * rtp_session_get_recv_profile(RtpSession *session)
Definition: rtpsession.c:466
rtp_session_set_blocking_mode
void rtp_session_set_blocking_mode(RtpSession *session, int yesno)
Definition: rtpsession.c:366
rtp_session_get_send_payload_type
int rtp_session_get_send_payload_type(const RtpSession *session)
Definition: rtpsession.c:637
rtp_session_signal_connect
int rtp_session_signal_connect(RtpSession *session, const char *signal_name, RtpCallback cb, unsigned long user_data)
Definition: rtpsession.c:532
JBParameters
struct _JBParameters JBParameters
rtp_session_register_event_queue
void rtp_session_register_event_queue(RtpSession *session, OrtpEvQueue *q)
Definition: rtpsession.c:1300
rtp_session_set_jitter_compensation
void rtp_session_set_jitter_compensation(RtpSession *session, int milisec)
Definition: jitterctl.c:141
_JBParameters::max_size
int max_size
Definition: rtpsession.h:57
rtp_session_set_ssrc_changed_threshold
void rtp_session_set_ssrc_changed_threshold(RtpSession *session, int numpackets)
Definition: rtpsession.c:1387
OrtpEvQueue
Definition: event.h:70
rtp_session_set_local_addr
int rtp_session_set_local_addr(RtpSession *session, const char *addr, int port)
Definition: rtpsession_inet.c:250
_OList
Definition: utils.h:32
rtp_session_get_recv_payload_type
int rtp_session_get_recv_payload_type(const RtpSession *session)
Definition: rtpsession.c:670
rtp_session_create_packet
mblk_t * rtp_session_create_packet(RtpSession *session, int header_size, const uint8_t *payload, int payload_size)
Definition: rtpsession.c:715
rtp_session_set_recv_profile
void rtp_session_set_recv_profile(RtpSession *session, RtpProfile *profile)
Definition: rtpsession.c:432
_RtpTransport
Definition: rtpsession.h:88
rtp_stats
Definition: rtp.h:63
rtp_session_set_connected_mode
void rtp_session_set_connected_mode(RtpSession *session, bool_t yesno)
Definition: rtpsession.c:1492
rtp_session_set_send_profile
void rtp_session_set_send_profile(RtpSession *session, RtpProfile *profile)
Definition: rtpsession.c:414
rtp_session_get_data
void * rtp_session_get_data(const RtpSession *session)
Definition: rtpsession.c:1460
rtp_session_set_multicast_ttl
int rtp_session_set_multicast_ttl(RtpSession *session, int ttl)
Definition: rtpsession_inet.c:304
rtp_session_new
RtpSession * rtp_session_new(int mode)
Definition: rtpsession.c:304
rtp_session_set_rtp_socket_send_buffer_size
void rtp_session_set_rtp_socket_send_buffer_size(RtpSession *session, unsigned int size)
Definition: rtpsession.c:486
rtp_session_create_packet_with_data
mblk_t * rtp_session_create_packet_with_data(RtpSession *session, uint8_t *payload, int payload_size, void(*freefn)(void *))
Definition: rtpsession.c:749
rtp_session_get_profile
RtpProfile * rtp_session_get_profile(RtpSession *session)
Definition: rtpsession.c:445
_JBParameters
Definition: rtpsession.h:54
_JBParameters::nom_size
int nom_size
Definition: rtpsession.h:56
_msgb_allocator
Definition: str_utils.h:119
rtp_session_set_remote_addr_full
int rtp_session_set_remote_addr_full(RtpSession *session, const char *addr, int rtp_port, int rtcp_port)
Definition: rtpsession_inet.c:629
rtp_session_signal_disconnect_by_callback
int rtp_session_signal_disconnect_by_callback(RtpSession *session, const char *signal_name, RtpCallback cb)
Definition: rtpsession.c:556
rtp_session_set_rtp_socket_recv_buffer_size
void rtp_session_set_rtp_socket_recv_buffer_size(RtpSession *session, unsigned int size)
Definition: rtpsession.c:494
_RtpScheduler
Definition: scheduler.h:28
rtp_session_set_multicast_loopback
int rtp_session_set_multicast_loopback(RtpSession *session, int yesno)
Definition: rtpsession_inet.c:374
rtp_session_sendm_with_ts
int rtp_session_sendm_with_ts(RtpSession *session, mblk_t *mp, uint32_t userts)
Definition: rtpsession.c:889
sessionset.h
Sending and receiving multiple streams together with only one thread.
rtp_session_bye
int rtp_session_bye(RtpSession *session, const char *reason)
Definition: rtcp.c:380
rtp_session_set_source_description
void rtp_session_set_source_description(RtpSession *session, const char *cname, const char *name, const char *email, const char *phone, const char *loc, const char *tool, const char *note)
Definition: rtcp.c:82
rtp_session_set_data
void rtp_session_set_data(RtpSession *session, void *data)
Definition: rtpsession.c:1452
rtp_session_set_recv_buf_size
void rtp_session_set_recv_buf_size(RtpSession *session, int bufsize)
Definition: rtpsession.c:478
rtp_session_set_recv_payload_type
int rtp_session_set_recv_payload_type(RtpSession *session, int pt)
Definition: rtpsession.c:653
rtp_session_enable_rtcp
void rtp_session_enable_rtcp(RtpSession *session, bool_t yesno)
Definition: rtpsession.c:400
_RtpProfile
Definition: payloadtype.h:85
_JitterControl
Definition: rtpsession.h:63
rtp_session_set_time_jump_limit
void rtp_session_set_time_jump_limit(RtpSession *session, int miliseconds)
Definition: rtpsession.c:1262
rtp_session_recv_with_ts
int rtp_session_recv_with_ts(RtpSession *session, uint8_t *buffer, int len, uint32_t ts, int *have_more)
Definition: rtpsession.c:1161
rtp_session_create_packet_in_place
mblk_t * rtp_session_create_packet_in_place(RtpSession *session, uint8_t *buffer, int size, void(*freefn)(void *))
Definition: rtpsession.c:781
rtp_session_resync
void rtp_session_resync(RtpSession *session)
Definition: rtpsession.c:1397
rtp_session_get_dscp
int rtp_session_get_dscp(const RtpSession *session)
Definition: rtpsession_inet.c:560
rtp_session_reset
void rtp_session_reset(RtpSession *session)
Definition: rtpsession.c:1410
rtp_session_set_payload_type
int rtp_session_set_payload_type(RtpSession *session, int pt)
Definition: rtpsession.c:683