|
- #ifndef _rtp_tcp_transport_h_
- #define _rtp_tcp_transport_h_
-
- #include "media/media-source.h"
-
- class RTPTcpTransport : public IRTPTransport
- {
- public:
- RTPTcpTransport(rtsp_server_t* rtsp, uint8_t rtp, uint8_t rtcp): m_rtp(rtp), m_rtcp(rtcp), m_rtsp(rtsp) {}
- virtual ~RTPTcpTransport() {}
-
- public:
- virtual int Send(bool rtcp, const void* data, size_t bytes)
- {
- assert(bytes < (1 << 16));
- if (bytes >= (1 << 16))
- return -E2BIG;
-
- m_packet[0] = '$';
- m_packet[1] = rtcp ? m_rtcp : m_rtp;
- m_packet[2] = (bytes >> 8) & 0xFF;
- m_packet[3] = bytes & 0xff;
- memcpy(m_packet + 4, data, bytes);
- int r = rtsp_server_send_interleaved_data(m_rtsp, m_packet, bytes + 4);
- return 0 == r ? bytes : r;
- }
-
- private:
- uint8_t m_rtp;
- uint8_t m_rtcp;
- rtsp_server_t* m_rtsp;
- uint8_t m_packet[4 + (1 << 16)];
- };
-
- #endif /* !_rtp_tcp_transport_h_ */
|