41 #include "rtpconfig.h"
54 #ifdef RTP_SUPPORT_THREAD
55 #include <jthread/jmutex.h>
56 #endif // RTP_SUPPORT_THREAD
62 class RTPSessionParams;
63 class RTPTransmissionParams;
68 class RTPTransmissionInfo;
69 class RTCPCompoundPacket;
79 class JRTPLIB_IMPORTEXPORT
RTPSession :
public RTPMemoryObject
119 void BYEDestroy(
const RTPTime &maxwaittime,
const void *reason,
size_t reasonlength);
125 uint32_t GetLocalSSRC();
131 int DeleteDestination(
const RTPAddress &addr);
134 void ClearDestinations();
137 bool SupportsMulticasting();
140 int JoinMulticastGroup(
const RTPAddress &addr);
143 int LeaveMulticastGroup(
const RTPAddress &addr);
146 void LeaveAllMulticastGroups();
153 int SendPacket(
const void *data,
size_t len);
159 int SendPacket(
const void *data,
size_t len,
160 uint8_t pt,
bool mark,uint32_t timestampinc);
168 int SendPacketEx(
const void *data,
size_t len,
169 uint16_t hdrextID,
const void *hdrextdata,
size_t numhdrextwords);
177 int SendPacketEx(
const void *data,
size_t len,
178 uint8_t pt,
bool mark,uint32_t timestampinc,
179 uint16_t hdrextID,
const void *hdrextdata,
size_t numhdrextwords);
180 #ifdef RTP_SUPPORT_SENDAPP
188 int SendRTCPAPPPacket(uint8_t subtype,
const uint8_t name[4],
const void *appdata,
size_t appdatalen);
189 #endif // RTP_SUPPORT_SENDAPP
191 #ifdef RTP_SUPPORT_RTCPUNKNOWN
197 int SendUnknownPacket(
bool sr, uint8_t payload_type, uint8_t subtype,
const void *data,
size_t len);
198 #endif // RTP_SUPPORT_RTCPUNKNOWN
200 int SetDefaultPayloadType(uint8_t pt);
203 int SetDefaultMark(
bool m);
206 int SetDefaultTimestampIncrement(uint32_t timestampinc);
214 int IncrementTimestamp(uint32_t inc);
223 int IncrementTimestampDefault();
231 int SetPreTransmissionDelay(
const RTPTime &delay);
255 int WaitForIncomingData(
const RTPTime &delay,
bool *dataavailable = 0);
273 int BeginDataAccess();
279 bool GotoFirstSource();
285 bool GotoNextSource();
291 bool GotoPreviousSource();
299 bool GotoFirstSourceWithData();
307 bool GotoNextSourceWithData();
315 bool GotoPreviousSourceWithData();
349 int DeleteFromIgnoreList(
const RTPAddress &addr);
352 void ClearIgnoreList();
358 int DeleteFromAcceptList(
const RTPAddress &addr);
361 void ClearAcceptList();
364 int SetMaximumPacketSize(
size_t s);
367 int SetSessionBandwidth(
double bw);
375 int SetTimestampUnit(
double u);
383 void SetNameInterval(
int count);
391 void SetEMailInterval(
int count);
399 void SetLocationInterval(
int count);
407 void SetPhoneInterval(
int count);
415 void SetToolInterval(
int count);
423 void SetNoteInterval(
int count);
426 int SetLocalName(
const void *s,
size_t len);
429 int SetLocalEMail(
const void *s,
size_t len);
432 int SetLocalLocation(
const void *s,
size_t len);
435 int SetLocalPhone(
const void *s,
size_t len);
438 int SetLocalTool(
const void *s,
size_t len);
441 int SetLocalNote(
const void *s,
size_t len);
445 void DumpTransmitter();
474 const uint8_t *cname,
size_t cnamelength) { }
510 #ifdef RTP_SUPPORT_THREAD
532 #endif // RTP_SUPPORT_THREAD
535 int CreateCNAME(uint8_t *buffer,
size_t *bufferlength,
bool resolve);
536 int ProcessPolledData();
545 bool deletetransmitter;
546 bool usingpollthread;
547 bool acceptownpackets;
548 bool useSR_BYEifpossible;
550 double sessionbandwidth;
551 double controlfragment;
552 double sendermultiplier;
553 double byemultiplier;
554 double membermultiplier;
555 double collisionmultiplier;
556 double notemultiplier;
559 RTPSessionSources sources;
565 std::list<RTCPCompoundPacket *> byepackets;
567 #ifdef RTP_SUPPORT_THREAD
568 RTPPollThread *pollthread;
569 jthread::JMutex sourcesmutex,buildermutex,schedmutex,packsentmutex;
571 friend class RTPPollThread;
572 #endif // RTP_SUPPORT_THREAD
573 friend class RTPSessionSources;
574 friend class RTCPSessionPacketBuilder;
579 #endif // RTPSESSION_H
High level class for using RTP.
Definition: rtpsession.h:79
Describes an RTCP APP packet.
Definition: rtcpapppacket.h:54
virtual void OnBYEPacket(RTPSourceData *srcdat)
Is called when a BYE packet has been processed for source srcdat.
Definition: rtpsession.h:506
This class is used by the transmission component to store the incoming RTP and RTCP data in...
Definition: rtprawpacket.h:51
Specifies the internal UDP over IPv4 transmitter.
Definition: rtptransmitter.h:71
virtual void OnAPPPacket(RTCPAPPPacket *apppacket, const RTPTime &receivetime, const RTPAddress *senderaddress)
Is called when an RTCP APP packet apppacket has been received at time receivetime from address sender...
Definition: rtpsession.h:491
Base class for transmission parameters.
Definition: rtptransmitter.h:227
This class can be used to build RTP packets and is a bit more high-level than the RTPPacket class: it...
Definition: rtppacketbuilder.h:57
virtual void OnNoteTimeout(RTPSourceData *srcdat)
Is called when the SDES NOTE item for source srcdat has been timed out.
Definition: rtpsession.h:503
This class determines when RTCP compound packets should be sent.
Definition: rtcpscheduler.h:101
Interface for generating random numbers.
Definition: rtprandom.h:51
Represents an RTCP compound packet.
Definition: rtcpcompoundpacket.h:53
virtual void OnRTCPCompoundPacket(RTCPCompoundPacket *pack, const RTPTime &receivetime, const RTPAddress *senderaddress)
Is called when an incoming RTCP packet is about to be processed.
Definition: rtpsession.h:462
virtual void OnRTPPacket(RTPPacket *pack, const RTPTime &receivetime, const RTPAddress *senderaddress)
Is called when an incoming RTP packet is about to be processed.
Definition: rtpsession.h:458
This class is an abstract class which is used to specify destinations, multicast groups etc...
Definition: rtpaddress.h:50
virtual RTPTransmitter * NewUserDefinedTransmitter()
Allocate a user defined transmitter.
Definition: rtpsession.h:455
virtual void OnSSRCCollision(RTPSourceData *srcdat, const RTPAddress *senderaddress, bool isrtp)
Is called when an SSRC collision was detected.
Definition: rtpsession.h:470
virtual void OnPollThreadError(int errcode)
Is called when error errcode was detected in the poll thread.
Definition: rtpsession.h:512
virtual void OnBYETimeout(RTPSourceData *srcdat)
Is called when participant srcdat is timed after having sent a BYE packet.
Definition: rtpsession.h:486
Describes an entry in the RTPSources source table.
Definition: rtpsourcedata.h:166
virtual void OnUnknownPacketFormat(RTCPPacket *rtcppack, const RTPTime &receivetime, const RTPAddress *senderaddress)
Is called when an unknown packet format for a known packet type was detected.
Definition: rtpsession.h:499
Abstract class from which actual transmission components should be derived.
Definition: rtptransmitter.h:61
ReceiveMode
Three kind of receive modes can be specified.
Definition: rtptransmitter.h:78
virtual void OnRemoveSource(RTPSourceData *srcdat)
Is called when the entry srcdat is about to be deleted from the source table.
Definition: rtpsession.h:480
virtual void OnCNAMECollision(RTPSourceData *srcdat, const RTPAddress *senderaddress, const uint8_t *cname, size_t cnamelength)
Is called when another CNAME was received than the one already present for source srcdat...
Definition: rtpsession.h:473
This class is used to specify wallclock time, delay intervals etc.
Definition: rtptimeutilities.h:80
virtual void OnSendRTCPCompoundPacket(RTCPCompoundPacket *pack)
Is called when an RTCP compound packet has just been sent (useful to inspect outgoing RTCP data)...
Definition: rtpsession.h:509
A memory manager.
Definition: rtpmemorymanager.h:147
virtual void OnPollThreadStep()
Is called each time the poll thread loops.
Definition: rtpsession.h:518
This class can be used to build RTCP compound packets, on a higher level than the RTCPCompoundPacketB...
Definition: rtcppacketbuilder.h:63
virtual void OnUnknownPacketType(RTCPPacket *rtcppack, const RTPTime &receivetime, const RTPAddress *senderaddress)
Is called when an unknown RTCP packet type was detected.
Definition: rtpsession.h:495
Represents an RTP Packet.
Definition: rtppacket.h:56
virtual void OnNewSource(RTPSourceData *srcdat)
Is called when a new entry srcdat is added to the source table.
Definition: rtpsession.h:477
Base class for specific types of RTCP packets.
Definition: rtcppacket.h:50
Base class for additional information about the transmitter.
Definition: rtptransmitter.h:246
virtual void OnPollThreadStart(bool &stop)
Is called when the poll thread is started.
Definition: rtpsession.h:525
This class represents a list of addresses from which SSRC collisions were detected.
Definition: rtpcollisionlist.h:53
Describes the parameters for to be used by an RTPSession instance.
Definition: rtpsessionparams.h:54
TransmissionProtocol
Used to identify a specific transmitter.
Definition: rtptransmitter.h:69
virtual void OnTimeout(RTPSourceData *srcdat)
Is called when participant srcdat is timed out.
Definition: rtpsession.h:483
virtual void OnPollThreadStop()
Is called when the poll thread is going to stop.
Definition: rtpsession.h:530