mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
RTC: Remove cache for RTP packet
This commit is contained in:
parent
7b0a9fe95f
commit
5e2a3572eb
6 changed files with 37 additions and 148 deletions
|
@ -469,86 +469,23 @@ srs_error_t SrsRtcDtls::unprotect_rtcp(char* out_buf, const char* in_buf, int& n
|
|||
return srs_error_new(ERROR_RTC_SRTP_UNPROTECT, "rtcp unprotect failed");
|
||||
}
|
||||
|
||||
SrsRtcOutgoingPackets::SrsRtcOutgoingPackets(int nn_cache_max)
|
||||
SrsRtcOutgoingPackets::SrsRtcOutgoingPackets()
|
||||
{
|
||||
#if defined(SRS_DEBUG)
|
||||
debug_id = 0;
|
||||
#endif
|
||||
|
||||
use_gso = false;
|
||||
should_merge_nalus = false;
|
||||
|
||||
nn_rtp_pkts = 0;
|
||||
nn_audios = nn_extras = 0;
|
||||
nn_videos = nn_samples = 0;
|
||||
nn_bytes = nn_rtp_bytes = 0;
|
||||
nn_padding_bytes = nn_paddings = 0;
|
||||
nn_dropped = 0;
|
||||
|
||||
cursor = 0;
|
||||
nn_cache = nn_cache_max;
|
||||
// TODO: FIXME: We should allocate a smaller cache, and increase it when exhausted.
|
||||
cache = new SrsRtpPacket2[nn_cache];
|
||||
}
|
||||
|
||||
SrsRtcOutgoingPackets::~SrsRtcOutgoingPackets()
|
||||
{
|
||||
srs_freepa(cache);
|
||||
nn_cache = 0;
|
||||
}
|
||||
|
||||
void SrsRtcOutgoingPackets::reset(bool gso, bool merge_nalus)
|
||||
{
|
||||
for (int i = 0; i < cursor; i++) {
|
||||
SrsRtpPacket2* packet = cache + i;
|
||||
packet->reset();
|
||||
}
|
||||
|
||||
#if defined(SRS_DEBUG)
|
||||
debug_id++;
|
||||
#endif
|
||||
|
||||
use_gso = gso;
|
||||
should_merge_nalus = merge_nalus;
|
||||
|
||||
nn_rtp_pkts = 0;
|
||||
nn_audios = nn_extras = 0;
|
||||
nn_videos = nn_samples = 0;
|
||||
nn_bytes = nn_rtp_bytes = 0;
|
||||
nn_padding_bytes = nn_paddings = 0;
|
||||
nn_dropped = 0;
|
||||
|
||||
cursor = 0;
|
||||
}
|
||||
|
||||
SrsRtpPacket2* SrsRtcOutgoingPackets::fetch()
|
||||
{
|
||||
if (cursor >= nn_cache) {
|
||||
return NULL;
|
||||
}
|
||||
return cache + (cursor++);
|
||||
}
|
||||
|
||||
SrsRtpPacket2* SrsRtcOutgoingPackets::back()
|
||||
{
|
||||
srs_assert(cursor > 0);
|
||||
return cache + cursor - 1;
|
||||
}
|
||||
|
||||
int SrsRtcOutgoingPackets::size()
|
||||
{
|
||||
return cursor;
|
||||
}
|
||||
|
||||
int SrsRtcOutgoingPackets::capacity()
|
||||
{
|
||||
return nn_cache;
|
||||
}
|
||||
|
||||
SrsRtpPacket2* SrsRtcOutgoingPackets::at(int index)
|
||||
{
|
||||
srs_assert(index < cursor);
|
||||
return cache + index;
|
||||
}
|
||||
|
||||
SrsRtcPlayer::SrsRtcPlayer(SrsRtcSession* s, int parent_cid)
|
||||
|
@ -752,7 +689,7 @@ srs_error_t SrsRtcPlayer::cycle()
|
|||
int nn_rtc_packets = srs_max(info.nn_audios, info.nn_extras) + info.nn_videos;
|
||||
stat->perf_on_rtc_packets(nn_rtc_packets);
|
||||
// Stat the RAW RTP packets, which maybe group by GSO.
|
||||
stat->perf_on_rtp_packets(info.size());
|
||||
stat->perf_on_rtp_packets(msg_count);
|
||||
// Stat the RTP packets going into kernel.
|
||||
stat->perf_on_gso_packets(info.nn_rtp_pkts);
|
||||
// Stat the bytes and paddings.
|
||||
|
@ -764,8 +701,8 @@ srs_error_t SrsRtcPlayer::cycle()
|
|||
if (pprint->can_print()) {
|
||||
// TODO: FIXME: Print stat like frame/s, packet/s, loss_packets.
|
||||
srs_trace("-> RTC PLAY %d/%d msgs, %d/%d packets, %d audios, %d extras, %d videos, %d samples, %d/%d/%d bytes, %d pad, %d/%d cache",
|
||||
msg_count, info.nn_dropped, info.size(), info.nn_rtp_pkts, info.nn_audios, info.nn_extras, info.nn_videos, info.nn_samples, info.nn_bytes,
|
||||
info.nn_rtp_bytes, info.nn_padding_bytes, info.nn_paddings, info.size(), info.capacity());
|
||||
msg_count, info.nn_dropped, msg_count, info.nn_rtp_pkts, info.nn_audios, info.nn_extras, info.nn_videos, info.nn_samples, info.nn_bytes,
|
||||
info.nn_rtp_bytes, info.nn_padding_bytes, info.nn_paddings, msg_count, msg_count);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -926,7 +863,9 @@ srs_error_t SrsRtcPlayer::send_packets(std::vector<SrsRtpPacket2*>& pkts, SrsRtc
|
|||
nack->padding = pkt->padding;
|
||||
|
||||
// TODO: FIXME: Should avoid memory copying.
|
||||
SrsRtpRawPayload* payload = nack->reuse_raw();
|
||||
SrsRtpRawPayload* payload = new SrsRtpRawPayload();
|
||||
nack->payload = payload;
|
||||
|
||||
payload->nn_payload = (int)iov->iov_len;
|
||||
payload->payload = new char[payload->nn_payload];
|
||||
memcpy((void*)payload->payload, iov->iov_base, iov->iov_len);
|
||||
|
@ -1099,7 +1038,9 @@ srs_error_t SrsRtcPlayer::send_packets_gso(vector<SrsRtpPacket2*>& pkts, SrsRtcO
|
|||
nack->padding = packet->padding;
|
||||
|
||||
// TODO: FIXME: Should avoid memory copying.
|
||||
SrsRtpRawPayload* payload = nack->reuse_raw();
|
||||
SrsRtpRawPayload* payload = new SrsRtpRawPayload();
|
||||
nack->payload = payload;
|
||||
|
||||
payload->nn_payload = (int)iov->iov_len;
|
||||
payload->payload = new char[payload->nn_payload];
|
||||
memcpy((void*)payload->payload, iov->iov_base, iov->iov_len);
|
||||
|
@ -1747,15 +1688,15 @@ void SrsRtcPublisher::on_before_decode_payload(SrsRtpPacket2* pkt, SrsBuffer* bu
|
|||
|
||||
uint32_t ssrc = pkt->rtp_header.get_ssrc();
|
||||
if (ssrc == audio_ssrc) {
|
||||
*ppayload = pkt->reuse_raw();
|
||||
*ppayload = new SrsRtpRawPayload();
|
||||
} else if (ssrc == video_ssrc) {
|
||||
uint8_t v = (uint8_t)pkt->nalu_type;
|
||||
if (v == kStapA) {
|
||||
*ppayload = new SrsRtpSTAPPayload();
|
||||
} else if (v == kFuA) {
|
||||
*ppayload = pkt->reuse_fua();
|
||||
*ppayload = new SrsRtpFUAPayload2();
|
||||
} else {
|
||||
*ppayload = pkt->reuse_raw();
|
||||
*ppayload = new SrsRtpRawPayload();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue