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();
488 const uint8_t *cname,
size_t cnamelength);
509 virtual void OnUnknownPacketType(
RTCPPacket *rtcppack,
const RTPTime &receivetime,
513 virtual void OnUnknownPacketFormat(
RTCPPacket *rtcppack,
const RTPTime &receivetime,
527 const void *itemdata,
size_t itemlength);
528 #ifdef RTP_SUPPORT_SDESPRIV 530 virtual void OnRTCPSDESPrivateItem(
RTPSourceData *srcdat,
const void *prefixdata,
size_t prefixlen,
531 const void *valuedata,
size_t valuelen);
532 #endif // RTP_SUPPORT_SDESPRIV 539 #ifdef RTP_SUPPORT_THREAD 541 virtual void OnPollThreadError(
int errcode);
547 virtual void OnPollThreadStep();
554 virtual void OnPollThreadStart(
bool &stop);
559 virtual void OnPollThreadStop();
560 #endif // RTP_SUPPORT_THREAD 579 virtual int OnChangeRTPOrRTCPData(
const void *origdata,
size_t origlen,
bool isrtp,
void **senddata,
size_t *sendlen);
584 virtual void OnSentRTPOrRTCPData(
void *senddata,
size_t sendlen,
bool isrtp);
592 virtual bool OnChangeIncomingData(
RTPRawPacket *rawpack);
604 virtual void OnValidatedRTPPacket(
RTPSourceData *srcdat,
RTPPacket *rtppack,
bool isonprobation,
bool *ispackethandled);
607 int CreateCNAME(uint8_t *buffer,
size_t *bufferlength,
bool resolve);
608 int ProcessPolledData();
611 int SendRTPData(
const void *data,
size_t len);
612 int SendRTCPData(
const void *data,
size_t len);
619 bool deletetransmitter;
620 bool usingpollthread, needthreadsafety;
621 bool acceptownpackets;
622 bool useSR_BYEifpossible;
624 double sessionbandwidth;
625 double controlfragment;
626 double sendermultiplier;
627 double byemultiplier;
628 double membermultiplier;
629 double collisionmultiplier;
630 double notemultiplier;
633 bool m_changeIncomingData, m_changeOutgoingData;
635 RTPSessionSources sources;
641 std::list<RTCPCompoundPacket *> byepackets;
643 #ifdef RTP_SUPPORT_THREAD 644 RTPPollThread *pollthread;
645 jthread::JMutex sourcesmutex,buildermutex,schedmutex,packsentmutex;
647 friend class RTPPollThread;
648 #endif // RTP_SUPPORT_THREAD 649 friend class RTPSessionSources;
650 friend class RTCPSessionPacketBuilder;
670 #ifdef RTP_SUPPORT_SDESPRIV 672 #endif // RTP_SUPPORT_SDESPRIV 677 #ifdef RTP_SUPPORT_THREAD 682 #endif // RTP_SUPPORT_THREAD 685 return ERR_RTP_RTPSESSION_CHANGEREQUESTEDBUTNOTIMPLEMENTED;
693 #endif // RTPSESSION_H virtual void OnBYEPacket(RTPSourceData *srcdat)
Is called when a BYE packet has been processed for source srcdat.
Definition: rtpsession.h:674
High level class for using RTP.
Definition: rtpsession.h:80
Describes an RTCP APP packet.
Definition: rtcpapppacket.h:54
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
Base class for transmission parameters.
Definition: rtptransmitter.h:229
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:664
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:568
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:657
This class determines when RTCP compound packets should be sent.
Definition: rtcpscheduler.h:101
virtual void OnUnknownPacketType(RTCPPacket *rtcppack, const RTPTime &receivetime, const RTPAddress *senderaddress)
Is called when an unknown RTCP packet type was detected.
Definition: rtpsession.h:663
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:655
virtual void OnRemoveSource(RTPSourceData *srcdat)
Is called when the entry srcdat is about to be deleted from the source table.
Definition: rtpsession.h:659
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:684
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:675
This class is an abstract class which is used to specify destinations, multicast groups etc...
Definition: rtpaddress.h:50
virtual void OnPollThreadStep()
Is called each time the poll thread loops.
Definition: rtpsession.h:679
virtual void OnNewSource(RTPSourceData *srcdat)
Is called when a new entry srcdat is added to the source table.
Definition: rtpsession.h:658
ItemType
Identifies the type of an SDES item.
Definition: rtcpsdespacket.h:59
Describes an entry in the RTPSources source table.
Definition: rtpsourcedata.h:166
virtual void OnBYETimeout(RTPSourceData *srcdat)
Is called when participant srcdat is timed after having sent a BYE packet.
Definition: rtpsession.h:661
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:80
virtual RTPTransmitter * NewUserDefinedTransmitter()
Allocate a user defined transmitter.
Definition: rtpsession.h:653
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:687
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:662
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:671
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:654
virtual void OnRTCPReceiverReport(RTPSourceData *srcdat)
Is called when an RTCP receiver report has been processed for this source.
Definition: rtpsession.h:667
Definition: rtpfaketransmitter.h:64
This class is used to specify wallclock time, delay intervals etc.
Definition: rtptimeutilities.h:84
A memory manager.
Definition: rtpmemorymanager.h:150
This class can be used to build RTCP compound packets, on a higher level than the RTCPCompoundPacketB...
Definition: rtcppacketbuilder.h:63
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:668
virtual void OnPollThreadStop()
Is called when the poll thread is going to stop.
Definition: rtpsession.h:681
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:689
Represents an RTP Packet.
Definition: rtppacket.h:56
virtual void OnRTCPSenderReport(RTPSourceData *srcdat)
Is called when an RTCP sender report has been processed for this source.
Definition: rtpsession.h:666
virtual void OnTimeout(RTPSourceData *srcdat)
Is called when participant srcdat is timed out.
Definition: rtpsession.h:660
virtual bool OnChangeIncomingData(RTPRawPacket *rawpack)
By overriding this function, the raw incoming data can be inspected and modified (e.g.
Definition: rtpsession.h:688
virtual void OnPollThreadStart(bool &stop)
Is called when the poll thread is started.
Definition: rtpsession.h:680
Base class for specific types of RTCP packets.
Definition: rtcppacket.h:50
Base class for additional information about the transmitter.
Definition: rtptransmitter.h:248
void SetChangeOutgoingData(bool change)
If this is set to true, outgoing data will be passed through RTPSession::OnChangeRTPOrRTCPData and RT...
Definition: rtpsession.h:564
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 OnNoteTimeout(RTPSourceData *srcdat)
Is called when the SDES NOTE item for source srcdat has been timed out.
Definition: rtpsession.h:665
virtual void OnSSRCCollision(RTPSourceData *srcdat, const RTPAddress *senderaddress, bool isrtp)
Is called when an SSRC collision was detected.
Definition: rtpsession.h:656
virtual void OnPollThreadError(int errcode)
Is called when error errcode was detected in the poll thread.
Definition: rtpsession.h:678
TransmissionProtocol
Used to identify a specific transmitter.
Definition: rtptransmitter.h:70