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_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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in a new issue