mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
Perf: Refine object cache, avoid dynamic cast
This commit is contained in:
parent
8d7a201742
commit
f2d9eb345c
6 changed files with 76 additions and 49 deletions
|
@ -1268,7 +1268,7 @@ srs_error_t SrsRtcPublishStream::check_send_nacks()
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SrsRtcPublishStream::on_before_decode_payload(SrsRtpPacket2* pkt, SrsBuffer* buf, ISrsRtpPayloader** ppayload)
|
void SrsRtcPublishStream::on_before_decode_payload(SrsRtpPacket2* pkt, SrsBuffer* buf, ISrsRtpPayloader** ppayload, SrsRtpPacketPayloadType* ppt)
|
||||||
{
|
{
|
||||||
// No payload, ignore.
|
// No payload, ignore.
|
||||||
if (buf->empty()) {
|
if (buf->empty()) {
|
||||||
|
@ -1280,9 +1280,9 @@ void SrsRtcPublishStream::on_before_decode_payload(SrsRtpPacket2* pkt, SrsBuffer
|
||||||
SrsRtcVideoRecvTrack* video_track = get_video_track(ssrc);
|
SrsRtcVideoRecvTrack* video_track = get_video_track(ssrc);
|
||||||
|
|
||||||
if (audio_track) {
|
if (audio_track) {
|
||||||
audio_track->on_before_decode_payload(pkt, buf, ppayload);
|
audio_track->on_before_decode_payload(pkt, buf, ppayload, ppt);
|
||||||
} else if (video_track) {
|
} else if (video_track) {
|
||||||
video_track->on_before_decode_payload(pkt, buf, ppayload);
|
video_track->on_before_decode_payload(pkt, buf, ppayload, ppt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -361,7 +361,7 @@ private:
|
||||||
public:
|
public:
|
||||||
srs_error_t check_send_nacks();
|
srs_error_t check_send_nacks();
|
||||||
public:
|
public:
|
||||||
virtual void on_before_decode_payload(SrsRtpPacket2* pkt, SrsBuffer* buf, ISrsRtpPayloader** ppayload);
|
virtual void on_before_decode_payload(SrsRtpPacket2* pkt, SrsBuffer* buf, ISrsRtpPayloader** ppayload, SrsRtpPacketPayloadType* ppt);
|
||||||
private:
|
private:
|
||||||
srs_error_t send_periodic_twcc();
|
srs_error_t send_periodic_twcc();
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -826,7 +826,7 @@ srs_error_t SrsRtcFromRtmpBridger::package_opus(char* data, int size, SrsRtpPack
|
||||||
audio_timestamp += 960;
|
audio_timestamp += 960;
|
||||||
|
|
||||||
SrsRtpRawPayload* raw = _srs_rtp_raw_cache->allocate();
|
SrsRtpRawPayload* raw = _srs_rtp_raw_cache->allocate();
|
||||||
pkt->payload = raw;
|
pkt->set_payload(raw, SrsRtpPacketPayloadTypeRaw);
|
||||||
|
|
||||||
raw->payload = pkt->wrap(data, size);
|
raw->payload = pkt->wrap(data, size);
|
||||||
raw->nn_payload = size;
|
raw->nn_payload = size;
|
||||||
|
@ -961,7 +961,7 @@ srs_error_t SrsRtcFromRtmpBridger::package_stap_a(SrsRtcStream* source, SrsShare
|
||||||
pkt->header.set_timestamp(msg->timestamp * 90);
|
pkt->header.set_timestamp(msg->timestamp * 90);
|
||||||
|
|
||||||
SrsRtpSTAPPayload* stap = new SrsRtpSTAPPayload();
|
SrsRtpSTAPPayload* stap = new SrsRtpSTAPPayload();
|
||||||
pkt->payload = stap;
|
pkt->set_payload(stap, SrsRtpPacketPayloadTypeSTAP);
|
||||||
|
|
||||||
uint8_t header = sps[0];
|
uint8_t header = sps[0];
|
||||||
stap->nri = (SrsAvcNaluType)header;
|
stap->nri = (SrsAvcNaluType)header;
|
||||||
|
@ -1041,7 +1041,7 @@ srs_error_t SrsRtcFromRtmpBridger::package_nalus(SrsSharedPtrMessage* msg, const
|
||||||
pkt->nalu_type = (SrsAvcNaluType)first_nalu_type;
|
pkt->nalu_type = (SrsAvcNaluType)first_nalu_type;
|
||||||
pkt->header.set_sequence(video_sequence++);
|
pkt->header.set_sequence(video_sequence++);
|
||||||
pkt->header.set_timestamp(msg->timestamp * 90);
|
pkt->header.set_timestamp(msg->timestamp * 90);
|
||||||
pkt->payload = raw;
|
pkt->set_payload(raw, SrsRtpPacketPayloadTypeNALU);
|
||||||
pkt->wrap(msg);
|
pkt->wrap(msg);
|
||||||
} else {
|
} else {
|
||||||
// We must free it, should never use RTP packets to free it,
|
// We must free it, should never use RTP packets to free it,
|
||||||
|
@ -1082,7 +1082,7 @@ srs_error_t SrsRtcFromRtmpBridger::package_nalus(SrsSharedPtrMessage* msg, const
|
||||||
fua->start = bool(i == 0);
|
fua->start = bool(i == 0);
|
||||||
fua->end = bool(i == num_of_packet - 1);
|
fua->end = bool(i == num_of_packet - 1);
|
||||||
|
|
||||||
pkt->payload = fua;
|
pkt->set_payload(fua, SrsRtpPacketPayloadTypeFUA);
|
||||||
pkt->wrap(msg);
|
pkt->wrap(msg);
|
||||||
|
|
||||||
nb_left -= packet_size;
|
nb_left -= packet_size;
|
||||||
|
@ -1108,7 +1108,7 @@ srs_error_t SrsRtcFromRtmpBridger::package_single_nalu(SrsSharedPtrMessage* msg,
|
||||||
pkt->header.set_timestamp(msg->timestamp * 90);
|
pkt->header.set_timestamp(msg->timestamp * 90);
|
||||||
|
|
||||||
SrsRtpRawPayload* raw = _srs_rtp_raw_cache->allocate();
|
SrsRtpRawPayload* raw = _srs_rtp_raw_cache->allocate();
|
||||||
pkt->payload = raw;
|
pkt->set_payload(raw, SrsRtpPacketPayloadTypeRaw);
|
||||||
|
|
||||||
raw->payload = sample->bytes;
|
raw->payload = sample->bytes;
|
||||||
raw->nn_payload = sample->size;
|
raw->nn_payload = sample->size;
|
||||||
|
@ -1142,7 +1142,7 @@ srs_error_t SrsRtcFromRtmpBridger::package_fu_a(SrsSharedPtrMessage* msg, SrsSam
|
||||||
pkt->header.set_timestamp(msg->timestamp * 90);
|
pkt->header.set_timestamp(msg->timestamp * 90);
|
||||||
|
|
||||||
SrsRtpFUAPayload2* fua = _srs_rtp_fua_cache->allocate();
|
SrsRtpFUAPayload2* fua = _srs_rtp_fua_cache->allocate();
|
||||||
pkt->payload = fua;
|
pkt->set_payload(fua, SrsRtpPacketPayloadTypeFUA2);
|
||||||
|
|
||||||
fua->nri = (SrsAvcNaluType)header;
|
fua->nri = (SrsAvcNaluType)header;
|
||||||
fua->nalu_type = (SrsAvcNaluType)nal_type;
|
fua->nalu_type = (SrsAvcNaluType)nal_type;
|
||||||
|
@ -1854,7 +1854,7 @@ SrsRtcAudioRecvTrack::~SrsRtcAudioRecvTrack()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void SrsRtcAudioRecvTrack::on_before_decode_payload(SrsRtpPacket2* pkt, SrsBuffer* buf, ISrsRtpPayloader** ppayload)
|
void SrsRtcAudioRecvTrack::on_before_decode_payload(SrsRtpPacket2* pkt, SrsBuffer* buf, ISrsRtpPayloader** ppayload, SrsRtpPacketPayloadType* ppt)
|
||||||
{
|
{
|
||||||
// No payload, ignore.
|
// No payload, ignore.
|
||||||
if (buf->empty()) {
|
if (buf->empty()) {
|
||||||
|
@ -1862,6 +1862,7 @@ void SrsRtcAudioRecvTrack::on_before_decode_payload(SrsRtpPacket2* pkt, SrsBuffe
|
||||||
}
|
}
|
||||||
|
|
||||||
*ppayload = _srs_rtp_raw_cache->allocate();
|
*ppayload = _srs_rtp_raw_cache->allocate();
|
||||||
|
*ppt = SrsRtpPacketPayloadTypeRaw;
|
||||||
}
|
}
|
||||||
|
|
||||||
srs_error_t SrsRtcAudioRecvTrack::on_rtp(SrsRtcStream* source, SrsRtpPacket2* pkt, bool nack_enabled)
|
srs_error_t SrsRtcAudioRecvTrack::on_rtp(SrsRtcStream* source, SrsRtpPacket2* pkt, bool nack_enabled)
|
||||||
|
@ -1910,7 +1911,7 @@ SrsRtcVideoRecvTrack::~SrsRtcVideoRecvTrack()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void SrsRtcVideoRecvTrack::on_before_decode_payload(SrsRtpPacket2* pkt, SrsBuffer* buf, ISrsRtpPayloader** ppayload)
|
void SrsRtcVideoRecvTrack::on_before_decode_payload(SrsRtpPacket2* pkt, SrsBuffer* buf, ISrsRtpPayloader** ppayload, SrsRtpPacketPayloadType* ppt)
|
||||||
{
|
{
|
||||||
// No payload, ignore.
|
// No payload, ignore.
|
||||||
if (buf->empty()) {
|
if (buf->empty()) {
|
||||||
|
@ -1920,10 +1921,13 @@ void SrsRtcVideoRecvTrack::on_before_decode_payload(SrsRtpPacket2* pkt, SrsBuffe
|
||||||
uint8_t v = (uint8_t)pkt->nalu_type;
|
uint8_t v = (uint8_t)pkt->nalu_type;
|
||||||
if (v == kStapA) {
|
if (v == kStapA) {
|
||||||
*ppayload = new SrsRtpSTAPPayload();
|
*ppayload = new SrsRtpSTAPPayload();
|
||||||
|
*ppt = SrsRtpPacketPayloadTypeUnknown;
|
||||||
} else if (v == kFuA) {
|
} else if (v == kFuA) {
|
||||||
*ppayload = _srs_rtp_fua_cache->allocate();
|
*ppayload = _srs_rtp_fua_cache->allocate();
|
||||||
|
*ppt = SrsRtpPacketPayloadTypeFUA2;
|
||||||
} else {
|
} else {
|
||||||
*ppayload = _srs_rtp_raw_cache->allocate();
|
*ppayload = _srs_rtp_raw_cache->allocate();
|
||||||
|
*ppt = SrsRtpPacketPayloadTypeRaw;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -549,7 +549,7 @@ public:
|
||||||
SrsRtcAudioRecvTrack(SrsRtcConnection* session, SrsRtcTrackDescription* track_desc);
|
SrsRtcAudioRecvTrack(SrsRtcConnection* session, SrsRtcTrackDescription* track_desc);
|
||||||
virtual ~SrsRtcAudioRecvTrack();
|
virtual ~SrsRtcAudioRecvTrack();
|
||||||
public:
|
public:
|
||||||
virtual void on_before_decode_payload(SrsRtpPacket2* pkt, SrsBuffer* buf, ISrsRtpPayloader** ppayload);
|
virtual void on_before_decode_payload(SrsRtpPacket2* pkt, SrsBuffer* buf, ISrsRtpPayloader** ppayload, SrsRtpPacketPayloadType* ppt);
|
||||||
public:
|
public:
|
||||||
virtual srs_error_t on_rtp(SrsRtcStream* source, SrsRtpPacket2* pkt, bool nack_enabled);
|
virtual srs_error_t on_rtp(SrsRtcStream* source, SrsRtpPacket2* pkt, bool nack_enabled);
|
||||||
virtual srs_error_t check_send_nacks();
|
virtual srs_error_t check_send_nacks();
|
||||||
|
@ -561,7 +561,7 @@ public:
|
||||||
SrsRtcVideoRecvTrack(SrsRtcConnection* session, SrsRtcTrackDescription* stream_descs);
|
SrsRtcVideoRecvTrack(SrsRtcConnection* session, SrsRtcTrackDescription* stream_descs);
|
||||||
virtual ~SrsRtcVideoRecvTrack();
|
virtual ~SrsRtcVideoRecvTrack();
|
||||||
public:
|
public:
|
||||||
virtual void on_before_decode_payload(SrsRtpPacket2* pkt, SrsBuffer* buf, ISrsRtpPayloader** ppayload);
|
virtual void on_before_decode_payload(SrsRtpPacket2* pkt, SrsBuffer* buf, ISrsRtpPayloader** ppayload, SrsRtpPacketPayloadType* ppt);
|
||||||
public:
|
public:
|
||||||
virtual srs_error_t on_rtp(SrsRtcStream* source, SrsRtpPacket2* pkt, bool nack_enabled);
|
virtual srs_error_t on_rtp(SrsRtcStream* source, SrsRtpPacket2* pkt, bool nack_enabled);
|
||||||
virtual srs_error_t check_send_nacks();
|
virtual srs_error_t check_send_nacks();
|
||||||
|
|
|
@ -811,7 +811,7 @@ ISrsRtpPacketDecodeHandler::~ISrsRtpPacketDecodeHandler()
|
||||||
|
|
||||||
SrsRtpPacket2::SrsRtpPacket2()
|
SrsRtpPacket2::SrsRtpPacket2()
|
||||||
{
|
{
|
||||||
payload = NULL;
|
payload_ = NULL; payload_type_ = SrsRtpPacketPayloadTypeUnknown;
|
||||||
shared_msg = NULL;
|
shared_msg = NULL;
|
||||||
|
|
||||||
reset();
|
reset();
|
||||||
|
@ -821,31 +821,31 @@ SrsRtpPacket2::SrsRtpPacket2()
|
||||||
|
|
||||||
SrsRtpPacket2::~SrsRtpPacket2()
|
SrsRtpPacket2::~SrsRtpPacket2()
|
||||||
{
|
{
|
||||||
reuse();
|
reuse_payload();
|
||||||
|
reuse_shared_msg();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SrsRtpPacket2::reuse()
|
void SrsRtpPacket2::reuse_payload()
|
||||||
{
|
{
|
||||||
if (_srs_rtp_raw_cache->enabled() || _srs_rtp_fua_cache->enabled()) {
|
if (!payload_) {
|
||||||
// Only recycle some common payloads.
|
return;
|
||||||
SrsRtpRawPayload* raw_payload;
|
|
||||||
SrsRtpFUAPayload2* fua_payload;
|
|
||||||
|
|
||||||
if ((raw_payload = dynamic_cast<SrsRtpRawPayload*>(payload)) != NULL) {
|
|
||||||
_srs_rtp_raw_cache->recycle(raw_payload);
|
|
||||||
payload = NULL;
|
|
||||||
} else if ((fua_payload = dynamic_cast<SrsRtpFUAPayload2*>(payload)) != NULL) {
|
|
||||||
_srs_rtp_fua_cache->recycle(fua_payload);
|
|
||||||
payload = NULL;
|
|
||||||
} else {
|
|
||||||
srs_freep(payload);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
srs_freep(payload);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Recycle the real owner of message, clear the reference.
|
if (_srs_rtp_raw_cache->enabled() || _srs_rtp_fua_cache->enabled()) {
|
||||||
reuse_shared_msg();
|
// Only recycle some common payloads.
|
||||||
|
if (payload_type_ == SrsRtpPacketPayloadTypeRaw) {
|
||||||
|
_srs_rtp_raw_cache->recycle((SrsRtpRawPayload*)payload_);
|
||||||
|
} else if (payload_type_ == SrsRtpPacketPayloadTypeFUA2) {
|
||||||
|
_srs_rtp_fua_cache->recycle((SrsRtpFUAPayload2*)payload_);
|
||||||
|
} else {
|
||||||
|
srs_freep(payload_);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
srs_freep(payload_);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Reset the payload and its type.
|
||||||
|
payload_ = NULL; payload_type_ = SrsRtpPacketPayloadTypeUnknown;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SrsRtpPacket2::reuse_shared_msg()
|
void SrsRtpPacket2::reuse_shared_msg()
|
||||||
|
@ -854,6 +854,7 @@ void SrsRtpPacket2::reuse_shared_msg()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Recycle the real owner of message, clear the reference.
|
||||||
if (_srs_rtp_msg_cache_buffers->enabled() || _srs_rtp_msg_cache_objs->enabled()) {
|
if (_srs_rtp_msg_cache_buffers->enabled() || _srs_rtp_msg_cache_objs->enabled()) {
|
||||||
// We only recycle the RTC UDP packet messages.
|
// We only recycle the RTC UDP packet messages.
|
||||||
if (shared_msg->payload && shared_msg->size == kRtpPacketSize && shared_msg->count() == 0) {
|
if (shared_msg->payload && shared_msg->size == kRtpPacketSize && shared_msg->count() == 0) {
|
||||||
|
@ -877,9 +878,8 @@ bool SrsRtpPacket2::reset()
|
||||||
decode_handler = NULL;
|
decode_handler = NULL;
|
||||||
|
|
||||||
header.reset();
|
header.reset();
|
||||||
|
reuse_payload();
|
||||||
// Reset and reuse the payload and shared message.
|
reuse_shared_msg();
|
||||||
reuse();
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -967,11 +967,16 @@ SrsRtpPacket2* SrsRtpPacket2::copy()
|
||||||
{
|
{
|
||||||
SrsRtpPacket2* cp = _srs_rtp_cache->allocate();
|
SrsRtpPacket2* cp = _srs_rtp_cache->allocate();
|
||||||
|
|
||||||
|
// We got packet from cache, so we must recycle it.
|
||||||
|
cp->reuse_payload();
|
||||||
|
cp->reuse_shared_msg();
|
||||||
|
|
||||||
cp->header = header;
|
cp->header = header;
|
||||||
cp->payload = payload? payload->copy():NULL;
|
cp->payload_ = payload_? payload_->copy():NULL;
|
||||||
|
cp->payload_type_ = payload_type_;
|
||||||
|
|
||||||
cp->nalu_type = nalu_type;
|
cp->nalu_type = nalu_type;
|
||||||
cp->wrap(shared_msg); // Wrap the shared message and buffer.
|
cp->shared_msg = shared_msg->copy();
|
||||||
cp->frame_type = frame_type;
|
cp->frame_type = frame_type;
|
||||||
|
|
||||||
cp->cached_payload_size = cached_payload_size;
|
cp->cached_payload_size = cached_payload_size;
|
||||||
|
@ -988,7 +993,7 @@ void SrsRtpPacket2::set_extension_types(const SrsRtpExtensionTypes* v)
|
||||||
uint64_t SrsRtpPacket2::nb_bytes()
|
uint64_t SrsRtpPacket2::nb_bytes()
|
||||||
{
|
{
|
||||||
if (!cached_payload_size) {
|
if (!cached_payload_size) {
|
||||||
int nn_payload = (payload? payload->nb_bytes():0);
|
int nn_payload = (payload_? payload_->nb_bytes():0);
|
||||||
cached_payload_size = header.nb_bytes() + nn_payload + header.get_padding();
|
cached_payload_size = header.nb_bytes() + nn_payload + header.get_padding();
|
||||||
}
|
}
|
||||||
return cached_payload_size;
|
return cached_payload_size;
|
||||||
|
@ -1002,7 +1007,7 @@ srs_error_t SrsRtpPacket2::encode(SrsBuffer* buf)
|
||||||
return srs_error_wrap(err, "rtp header");
|
return srs_error_wrap(err, "rtp header");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (payload && (err = payload->encode(buf)) != srs_success) {
|
if (payload_ && (err = payload_->encode(buf)) != srs_success) {
|
||||||
return srs_error_wrap(err, "rtp payload");
|
return srs_error_wrap(err, "rtp payload");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1040,15 +1045,16 @@ srs_error_t SrsRtpPacket2::decode(SrsBuffer* buf)
|
||||||
|
|
||||||
// If user set the decode handler, call it to set the payload.
|
// If user set the decode handler, call it to set the payload.
|
||||||
if (decode_handler) {
|
if (decode_handler) {
|
||||||
decode_handler->on_before_decode_payload(this, buf, &payload);
|
decode_handler->on_before_decode_payload(this, buf, &payload_, &payload_type_);
|
||||||
}
|
}
|
||||||
|
|
||||||
// By default, we always use the RAW payload.
|
// By default, we always use the RAW payload.
|
||||||
if (!payload) {
|
if (!payload_) {
|
||||||
payload = _srs_rtp_raw_cache->allocate();
|
payload_ = _srs_rtp_raw_cache->allocate();
|
||||||
|
payload_type_ = SrsRtpPacketPayloadTypeRaw;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((err = payload->decode(buf)) != srs_success) {
|
if ((err = payload_->decode(buf)) != srs_success) {
|
||||||
return srs_error_wrap(err, "rtp payload");
|
return srs_error_wrap(err, "rtp payload");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -258,6 +258,7 @@ public:
|
||||||
srs_error_t set_twcc_sequence_number(uint8_t id, uint16_t sn);
|
srs_error_t set_twcc_sequence_number(uint8_t id, uint16_t sn);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// The common payload interface for RTP packet.
|
||||||
class ISrsRtpPayloader : public ISrsCodec
|
class ISrsRtpPayloader : public ISrsCodec
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -267,6 +268,17 @@ public:
|
||||||
virtual ISrsRtpPayloader* copy() = 0;
|
virtual ISrsRtpPayloader* copy() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// The payload type, for performance to avoid dynamic cast.
|
||||||
|
enum SrsRtpPacketPayloadType
|
||||||
|
{
|
||||||
|
SrsRtpPacketPayloadTypeRaw,
|
||||||
|
SrsRtpPacketPayloadTypeFUA2,
|
||||||
|
SrsRtpPacketPayloadTypeFUA,
|
||||||
|
SrsRtpPacketPayloadTypeNALU,
|
||||||
|
SrsRtpPacketPayloadTypeSTAP,
|
||||||
|
SrsRtpPacketPayloadTypeUnknown,
|
||||||
|
};
|
||||||
|
|
||||||
class ISrsRtpPacketDecodeHandler
|
class ISrsRtpPacketDecodeHandler
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -274,7 +286,7 @@ public:
|
||||||
virtual ~ISrsRtpPacketDecodeHandler();
|
virtual ~ISrsRtpPacketDecodeHandler();
|
||||||
public:
|
public:
|
||||||
// We don't know the actual payload, so we depends on external handler.
|
// We don't know the actual payload, so we depends on external handler.
|
||||||
virtual void on_before_decode_payload(SrsRtpPacket2* pkt, SrsBuffer* buf, ISrsRtpPayloader** ppayload) = 0;
|
virtual void on_before_decode_payload(SrsRtpPacket2* pkt, SrsBuffer* buf, ISrsRtpPayloader** ppayload, SrsRtpPacketPayloadType* ppt) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
// The RTP packet with cached shared message.
|
// The RTP packet with cached shared message.
|
||||||
|
@ -283,7 +295,9 @@ class SrsRtpPacket2
|
||||||
// RTP packet fields.
|
// RTP packet fields.
|
||||||
public:
|
public:
|
||||||
SrsRtpHeader header;
|
SrsRtpHeader header;
|
||||||
ISrsRtpPayloader* payload;
|
private:
|
||||||
|
ISrsRtpPayloader* payload_;
|
||||||
|
SrsRtpPacketPayloadType payload_type_;
|
||||||
private:
|
private:
|
||||||
// The original shared message, all RTP packets can refer to its data.
|
// The original shared message, all RTP packets can refer to its data.
|
||||||
SrsSharedPtrMessage* shared_msg;
|
SrsSharedPtrMessage* shared_msg;
|
||||||
|
@ -303,7 +317,7 @@ public:
|
||||||
SrsRtpPacket2();
|
SrsRtpPacket2();
|
||||||
virtual ~SrsRtpPacket2();
|
virtual ~SrsRtpPacket2();
|
||||||
private:
|
private:
|
||||||
void reuse();
|
void reuse_payload();
|
||||||
void reuse_shared_msg();
|
void reuse_shared_msg();
|
||||||
public:
|
public:
|
||||||
// Reset the object to reuse it.
|
// Reset the object to reuse it.
|
||||||
|
@ -314,6 +328,9 @@ public:
|
||||||
// Wrap the shared message, we copy it.
|
// Wrap the shared message, we copy it.
|
||||||
char* wrap(SrsSharedPtrMessage* msg);
|
char* wrap(SrsSharedPtrMessage* msg);
|
||||||
public:
|
public:
|
||||||
|
// Get and set the payload of packet.
|
||||||
|
void set_payload(ISrsRtpPayloader* p, SrsRtpPacketPayloadType pt) { payload_ = p; payload_type_ = pt; }
|
||||||
|
ISrsRtpPayloader* payload() { return payload_; }
|
||||||
// Set the padding of RTP packet.
|
// Set the padding of RTP packet.
|
||||||
void set_padding(int size);
|
void set_padding(int size);
|
||||||
// Increase the padding of RTP packet.
|
// Increase the padding of RTP packet.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue