1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-02-15 04:42:04 +00:00

For #307, reuse raw cache payload for RTP

This commit is contained in:
winlin 2020-04-16 14:28:59 +08:00
parent d906ced5c3
commit d5c514cdcb
3 changed files with 26 additions and 2 deletions

View file

@ -1244,10 +1244,9 @@ srs_error_t SrsRtcSenderThread::packet_opus(SrsSample* sample, SrsRtcPackets& pa
packet->rtp_header.set_ssrc(audio_ssrc);
packet->rtp_header.set_payload_type(audio_payload_type);
SrsRtpRawPayload* raw = new SrsRtpRawPayload();
SrsRtpRawPayload* raw = packet->reuse_raw();
raw->payload = sample->bytes;
raw->nn_payload = sample->size;
packet->payload = raw;
// TODO: FIXME: Why 960? Need Refactoring?
audio_timestamp += 960;

View file

@ -146,11 +146,19 @@ SrsRtpPacket2::SrsRtpPacket2()
{
payload = NULL;
padding = 0;
cache_raw = new SrsRtpRawPayload();
}
SrsRtpPacket2::~SrsRtpPacket2()
{
// We may use the cache as payload.
if (payload == cache_raw) {
payload = NULL;
}
srs_freep(payload);
srs_freep(cache_raw);
}
void SrsRtpPacket2::set_padding(int size)
@ -163,9 +171,21 @@ void SrsRtpPacket2::reset()
{
rtp_header.reset();
padding = 0;
// We may use the cache as payload.
if (payload == cache_raw) {
payload = NULL;
}
srs_freep(payload);
}
SrsRtpRawPayload* SrsRtpPacket2::reuse_raw()
{
payload = cache_raw;
return cache_raw;
}
int SrsRtpPacket2::nb_bytes()
{
return rtp_header.header_size() + (payload? payload->nb_bytes():0) + padding;

View file

@ -38,6 +38,7 @@ const uint8_t kRtpMarker = 0x80;
const uint8_t kNalTypeMask = 0x1F;
class SrsBuffer;
class SrsRtpRawPayload;
class SrsRtpHeader
{
@ -82,6 +83,8 @@ public:
SrsRtpHeader rtp_header;
ISrsEncoder* payload;
int padding;
private:
SrsRtpRawPayload* cache_raw;
public:
SrsRtpPacket2();
virtual ~SrsRtpPacket2();
@ -90,6 +93,8 @@ public:
void set_padding(int size);
// Reset RTP packet.
void reset();
// Reuse the cached raw message as payload.
SrsRtpRawPayload* reuse_raw();
// interface ISrsEncoder
public:
virtual int nb_bytes();