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:
parent
d906ced5c3
commit
d5c514cdcb
3 changed files with 26 additions and 2 deletions
|
@ -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_ssrc(audio_ssrc);
|
||||||
packet->rtp_header.set_payload_type(audio_payload_type);
|
packet->rtp_header.set_payload_type(audio_payload_type);
|
||||||
|
|
||||||
SrsRtpRawPayload* raw = new SrsRtpRawPayload();
|
SrsRtpRawPayload* raw = packet->reuse_raw();
|
||||||
raw->payload = sample->bytes;
|
raw->payload = sample->bytes;
|
||||||
raw->nn_payload = sample->size;
|
raw->nn_payload = sample->size;
|
||||||
packet->payload = raw;
|
|
||||||
|
|
||||||
// TODO: FIXME: Why 960? Need Refactoring?
|
// TODO: FIXME: Why 960? Need Refactoring?
|
||||||
audio_timestamp += 960;
|
audio_timestamp += 960;
|
||||||
|
|
|
@ -146,11 +146,19 @@ SrsRtpPacket2::SrsRtpPacket2()
|
||||||
{
|
{
|
||||||
payload = NULL;
|
payload = NULL;
|
||||||
padding = 0;
|
padding = 0;
|
||||||
|
|
||||||
|
cache_raw = new SrsRtpRawPayload();
|
||||||
}
|
}
|
||||||
|
|
||||||
SrsRtpPacket2::~SrsRtpPacket2()
|
SrsRtpPacket2::~SrsRtpPacket2()
|
||||||
{
|
{
|
||||||
|
// We may use the cache as payload.
|
||||||
|
if (payload == cache_raw) {
|
||||||
|
payload = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
srs_freep(payload);
|
srs_freep(payload);
|
||||||
|
srs_freep(cache_raw);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SrsRtpPacket2::set_padding(int size)
|
void SrsRtpPacket2::set_padding(int size)
|
||||||
|
@ -163,9 +171,21 @@ void SrsRtpPacket2::reset()
|
||||||
{
|
{
|
||||||
rtp_header.reset();
|
rtp_header.reset();
|
||||||
padding = 0;
|
padding = 0;
|
||||||
|
|
||||||
|
// We may use the cache as payload.
|
||||||
|
if (payload == cache_raw) {
|
||||||
|
payload = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
srs_freep(payload);
|
srs_freep(payload);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SrsRtpRawPayload* SrsRtpPacket2::reuse_raw()
|
||||||
|
{
|
||||||
|
payload = cache_raw;
|
||||||
|
return cache_raw;
|
||||||
|
}
|
||||||
|
|
||||||
int SrsRtpPacket2::nb_bytes()
|
int SrsRtpPacket2::nb_bytes()
|
||||||
{
|
{
|
||||||
return rtp_header.header_size() + (payload? payload->nb_bytes():0) + padding;
|
return rtp_header.header_size() + (payload? payload->nb_bytes():0) + padding;
|
||||||
|
|
|
@ -38,6 +38,7 @@ const uint8_t kRtpMarker = 0x80;
|
||||||
const uint8_t kNalTypeMask = 0x1F;
|
const uint8_t kNalTypeMask = 0x1F;
|
||||||
|
|
||||||
class SrsBuffer;
|
class SrsBuffer;
|
||||||
|
class SrsRtpRawPayload;
|
||||||
|
|
||||||
class SrsRtpHeader
|
class SrsRtpHeader
|
||||||
{
|
{
|
||||||
|
@ -82,6 +83,8 @@ public:
|
||||||
SrsRtpHeader rtp_header;
|
SrsRtpHeader rtp_header;
|
||||||
ISrsEncoder* payload;
|
ISrsEncoder* payload;
|
||||||
int padding;
|
int padding;
|
||||||
|
private:
|
||||||
|
SrsRtpRawPayload* cache_raw;
|
||||||
public:
|
public:
|
||||||
SrsRtpPacket2();
|
SrsRtpPacket2();
|
||||||
virtual ~SrsRtpPacket2();
|
virtual ~SrsRtpPacket2();
|
||||||
|
@ -90,6 +93,8 @@ public:
|
||||||
void set_padding(int size);
|
void set_padding(int size);
|
||||||
// Reset RTP packet.
|
// Reset RTP packet.
|
||||||
void reset();
|
void reset();
|
||||||
|
// Reuse the cached raw message as payload.
|
||||||
|
SrsRtpRawPayload* reuse_raw();
|
||||||
// interface ISrsEncoder
|
// interface ISrsEncoder
|
||||||
public:
|
public:
|
||||||
virtual int nb_bytes();
|
virtual int nb_bytes();
|
||||||
|
|
Loading…
Reference in a new issue