1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

For #307, RTC RTP support padding

This commit is contained in:
winlin 2020-04-13 13:44:55 +08:00
parent 216b3bf414
commit 0bb61f7d98
2 changed files with 27 additions and 0 deletions

View file

@ -157,6 +157,7 @@ void SrsRtpHeader::set_ssrc(uint32_t ssrc)
SrsRtpPacket2::SrsRtpPacket2() SrsRtpPacket2::SrsRtpPacket2()
{ {
payload = NULL; payload = NULL;
padding = 0;
} }
SrsRtpPacket2::~SrsRtpPacket2() SrsRtpPacket2::~SrsRtpPacket2()
@ -164,6 +165,17 @@ SrsRtpPacket2::~SrsRtpPacket2()
srs_freep(payload); srs_freep(payload);
} }
void SrsRtpPacket2::set_padding(int size)
{
rtp_header.set_padding(size > 0);
padding = size;
}
int SrsRtpPacket2::nb_bytes()
{
return rtp_header.header_size() + (payload? payload->nb_bytes():0) + padding;
}
srs_error_t SrsRtpPacket2::encode(SrsBuffer* buf) srs_error_t SrsRtpPacket2::encode(SrsBuffer* buf)
{ {
srs_error_t err = srs_success; srs_error_t err = srs_success;
@ -176,6 +188,14 @@ srs_error_t SrsRtpPacket2::encode(SrsBuffer* buf)
return srs_error_wrap(err, "encode payload"); return srs_error_wrap(err, "encode payload");
} }
if (padding) {
if (!buf->require(padding)) {
return srs_error_new(ERROR_RTC_RTP_MUXER, "requires %d bytes", padding);
}
memset(buf->data(), padding, padding);
buf->skip(padding);
}
return err; return err;
} }

View file

@ -74,6 +74,7 @@ public:
int64_t get_timestamp() const { return timestamp; } int64_t get_timestamp() const { return timestamp; }
void set_ssrc(uint32_t ssrc); void set_ssrc(uint32_t ssrc);
uint32_t get_ssrc() const { return ssrc; } uint32_t get_ssrc() const { return ssrc; }
void set_padding(bool v) { padding = v; }
}; };
class SrsRtpPacket2 class SrsRtpPacket2
@ -81,10 +82,16 @@ class SrsRtpPacket2
public: public:
SrsRtpHeader rtp_header; SrsRtpHeader rtp_header;
ISrsEncoder* payload; ISrsEncoder* payload;
int padding;
public: public:
SrsRtpPacket2(); SrsRtpPacket2();
virtual ~SrsRtpPacket2(); virtual ~SrsRtpPacket2();
public: public:
// Append size of bytes as padding.
virtual void set_padding(int size);
// interface ISrsEncoder
public:
virtual int nb_bytes();
virtual srs_error_t encode(SrsBuffer* buf); virtual srs_error_t encode(SrsBuffer* buf);
}; };