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;
80 class JRTPLIB_IMPORTEXPORT
RTPSession :
public RTPMemoryObject
120 void BYEDestroy(
const RTPTime &maxwaittime,
const void *reason,
size_t reasonlength);
126 uint32_t GetLocalSSRC();
132 int DeleteDestination(
const RTPAddress &addr);
135 void ClearDestinations();
138 bool SupportsMulticasting();
141 int JoinMulticastGroup(
const RTPAddress &addr);
144 int LeaveMulticastGroup(
const RTPAddress &addr);
147 void LeaveAllMulticastGroups();
154 int SendPacket(
const void *data,
size_t len);
160 int SendPacket(
const void *data,
size_t len,
161 uint8_t pt,
bool mark,uint32_t timestampinc);
169 int SendPacketEx(
const void *data,
size_t len,
170 uint16_t hdrextID,
const void *hdrextdata,
size_t numhdrextwords);
178 int SendPacketEx(
const void *data,
size_t len,
179 uint8_t pt,
bool mark,uint32_t timestampinc,
180 uint16_t hdrextID,
const void *hdrextdata,
size_t numhdrextwords);
181 #ifdef RTP_SUPPORT_SENDAPP
189 int SendRTCPAPPPacket(uint8_t subtype,
const uint8_t name[4],
const void *appdata,
size_t appdatalen);
190 #endif // RTP_SUPPORT_SENDAPP
192 #ifdef RTP_SUPPORT_RTCPUNKNOWN
198 int SendUnknownPacket(
bool sr, uint8_t payload_type, uint8_t subtype,
const void *data,
size_t len);
199 #endif // RTP_SUPPORT_RTCPUNKNOWN
204 int SendRawData(
const void *data,
size_t len,
bool usertpchannel);
207 int SetDefaultPayloadType(uint8_t pt);
210 int SetDefaultMark(
bool m);
213 int SetDefaultTimestampIncrement(uint32_t timestampinc);
221 int IncrementTimestamp(uint32_t inc);
230 int IncrementTimestampDefault();
238 int SetPreTransmissionDelay(
const RTPTime &delay);
262 int WaitForIncomingData(
const RTPTime &delay,
bool *dataavailable = 0);
280 int BeginDataAccess();
286 bool GotoFirstSource();
292 bool GotoNextSource();
298 bool GotoPreviousSource();
306 bool GotoFirstSourceWithData();
314 bool GotoNextSourceWithData();
322 bool GotoPreviousSourceWithData();
341 uint16_t GetNextSequenceNumber()
const;
359 int DeleteFromIgnoreList(
const RTPAddress &addr);
362 void ClearIgnoreList();
368 int DeleteFromAcceptList(
const RTPAddress &addr);
371 void ClearAcceptList();
374 int SetMaximumPacketSize(
size_t s);
377 int SetSessionBandwidth(
double bw);
385 int SetTimestampUnit(
double u);
393 void SetNameInterval(
int count);
401 void SetEMailInterval(
int count);
409 void SetLocationInterval(
int count);
417 void SetPhoneInterval(
int count);
425 void SetToolInterval(
int count);
433 void SetNoteInterval(
int count);
436 int SetLocalName(
const void *s,
size_t len);
439 int SetLocalEMail(
const void *s,
size_t len);
442 int SetLocalLocation(
const void *s,
size_t len);
445 int SetLocalPhone(
const void *s,
size_t len);
448 int SetLocalTool(
const void *s,
size_t len);
451 int SetLocalNote(
const void *s,
size_t len);
455 void DumpTransmitter();
489 const uint8_t *cname,
size_t cnamelength) { }
528 const void *itemdata,
size_t itemlength) { }
529 #ifdef RTP_SUPPORT_SDESPRIV
532 const void *valuedata,
size_t valuelen) { }
533 #endif // RTP_SUPPORT_SDESPRIV
540 #ifdef RTP_SUPPORT_THREAD
561 #endif // RTP_SUPPORT_THREAD
580 virtual int OnChangeRTPOrRTCPData(
const void *origdata,
size_t origlen,
bool isrtp,
void **senddata,
size_t *sendlen)
581 {
return ERR_RTP_RTPSESSION_CHANGEREQUESTEDBUTNOTIMPLEMENTED; }
609 int CreateCNAME(uint8_t *buffer,
size_t *bufferlength,
bool resolve);
610 int ProcessPolledData();
613 int SendRTPData(
const void *data,
size_t len);
614 int SendRTCPData(
const void *data,
size_t len);
621 bool deletetransmitter;
622 bool usingpollthread;
623 bool acceptownpackets;
624 bool useSR_BYEifpossible;
626 double sessionbandwidth;
627 double controlfragment;
628 double sendermultiplier;
629 double byemultiplier;
630 double membermultiplier;
631 double collisionmultiplier;
632 double notemultiplier;
635 bool m_changeIncomingData, m_changeOutgoingData;
637 RTPSessionSources sources;
643 std::list<RTCPCompoundPacket *> byepackets;
645 #ifdef RTP_SUPPORT_THREAD
646 RTPPollThread *pollthread;
647 jthread::JMutex sourcesmutex,buildermutex,schedmutex,packsentmutex;
649 friend class RTPPollThread;
650 #endif // RTP_SUPPORT_THREAD
651 friend class RTPSessionSources;
652 friend class RTCPSessionPacketBuilder;
657 #endif // RTPSESSION_H
High level class for using RTP.
Definition: rtpsession.h:80
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:536
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:72
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:506
Base class for transmission parameters.
Definition: rtptransmitter.h:228
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
void SetChangeIncomingData(bool change)
If this is set to true, incoming data will be passed through RTPSession::OnChangeIncomingData, allowing you to modify the data (e.g.
Definition: rtpsession.h:569
virtual void OnNoteTimeout(RTPSourceData *srcdat)
Is called when the SDES NOTE item for source srcdat has been timed out.
Definition: rtpsession.h:518
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:477
virtual bool OnChangeIncomingData(RTPRawPacket *rawpack)
By overriding this function, the raw incoming data can be inspected and modified (e.g.
Definition: rtpsession.h:594
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:473
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:465
virtual void OnSSRCCollision(RTPSourceData *srcdat, const RTPAddress *senderaddress, bool isrtp)
Is called when an SSRC collision was detected.
Definition: rtpsession.h:485
ItemType
Identifies the type of an SDES item.
Definition: rtcpsdespacket.h:59
virtual void OnPollThreadError(int errcode)
Is called when error errcode was detected in the poll thread.
Definition: rtpsession.h:542
virtual void OnBYETimeout(RTPSourceData *srcdat)
Is called when participant srcdat is timed after having sent a BYE packet.
Definition: rtpsession.h:501
Describes an entry in the RTPSources source table.
Definition: rtpsourcedata.h:166
virtual int OnChangeRTPOrRTCPData(const void *origdata, size_t origlen, bool isrtp, void **senddata, size_t *sendlen)
If RTPSession::SetChangeOutgoingData was sent to true, overriding this you can change the data packet...
Definition: rtpsession.h:580
virtual void OnRTCPSDESPrivateItem(RTPSourceData *srcdat, const void *prefixdata, size_t prefixlen, const void *valuedata, size_t valuelen)
Is called when a specific SDES item of 'private' type was received for this source.
Definition: rtpsession.h:531
virtual void OnRTCPReceiverReport(RTPSourceData *srcdat)
Is called when an RTCP receiver report has been processed for this source.
Definition: rtpsession.h:524
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:514
Abstract class from which actual transmission components should be derived.
Definition: rtptransmitter.h:62
ReceiveMode
Three kind of receive modes can be specified.
Definition: rtptransmitter.h:79
virtual void OnSentRTPOrRTCPData(void *senddata, size_t sendlen, bool isrtp)
This function is called when an RTP or RTCP packet was sent, it can be helpful when data was allocate...
Definition: rtpsession.h:586
virtual void OnRemoveSource(RTPSourceData *srcdat)
Is called when the entry srcdat is about to be deleted from the source table.
Definition: rtpsession.h:495
virtual void OnValidatedRTPPacket(RTPSourceData *srcdat, RTPPacket *rtppack, bool isonprobation, bool *ispackethandled)
Allows you to use an RTP packet from the specified source directly.
Definition: rtpsession.h:606
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:488
This class is used to specify wallclock time, delay intervals etc.
Definition: rtptimeutilities.h:84
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:539
A memory manager.
Definition: rtpmemorymanager.h:150
virtual void OnPollThreadStep()
Is called each time the poll thread loops.
Definition: rtpsession.h:548
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:510
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:492
Base class for specific types of RTCP packets.
Definition: rtcppacket.h:50
Base class for additional information about the transmitter.
Definition: rtptransmitter.h:247
virtual void OnPollThreadStart(bool &stop)
Is called when the poll thread is started.
Definition: rtpsession.h:555
void SetChangeOutgoingData(bool change)
If this is set to true, outgoing data will be passed through RTPSession::OnChangeRTPOrRTCPData and RT...
Definition: rtpsession.h:565
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
virtual void OnRTCPSenderReport(RTPSourceData *srcdat)
Is called when an RTCP sender report has been processed for this source.
Definition: rtpsession.h:521
virtual void OnRTCPSDESItem(RTPSourceData *srcdat, RTCPSDESPacket::ItemType t, const void *itemdata, size_t itemlength)
Is called when a specific SDES item was received for this source.
Definition: rtpsession.h:527
TransmissionProtocol
Used to identify a specific transmitter.
Definition: rtptransmitter.h:70
virtual void OnTimeout(RTPSourceData *srcdat)
Is called when participant srcdat is timed out.
Definition: rtpsession.h:498
virtual void OnPollThreadStop()
Is called when the poll thread is going to stop.
Definition: rtpsession.h:560