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

RTC: Refactor API, use shared pkt for consumer

This commit is contained in:
winlin 2020-05-15 08:11:03 +08:00
parent 31de2c71d0
commit c7b88e08e9
5 changed files with 9 additions and 15 deletions

View file

@ -1653,6 +1653,8 @@ srs_error_t SrsRtcPublisher::on_rtp(char* buf, int nb_buf)
// Decode the RTP packet from buffer.
SrsRtpPacket2* pkt = new SrsRtpPacket2();
SrsAutoFree(SrsRtpPacket2, pkt);
if (true) {
pkt->set_decode_handler(this);
pkt->shared_msg = new SrsSharedPtrMessage();
@ -1667,7 +1669,6 @@ srs_error_t SrsRtcPublisher::on_rtp(char* buf, int nb_buf)
// For NACK simulator, drop packet.
if (nn_simulate_nack_drop) {
simulate_drop_packet(&pkt->rtp_header, nb_buf);
srs_freep(pkt);
return err;
}
@ -1682,7 +1683,6 @@ srs_error_t SrsRtcPublisher::on_rtp(char* buf, int nb_buf)
return srs_error_wrap(err, "on video");
}
} else {
srs_freep(pkt);
return srs_error_new(ERROR_RTC_RTP, "unknown ssrc=%u", ssrc);
}

View file

@ -83,11 +83,6 @@ void SrsRtpRingBuffer::remove(uint16_t at)
set(at, NULL);
}
bool SrsRtpRingBuffer::overflow()
{
return srs_rtp_seq_distance(begin, end) >= capacity_;
}
uint32_t SrsRtpRingBuffer::get_extended_highest_sequence()
{
return nn_seq_flip_backs * 65536 + end - 1;

View file

@ -84,8 +84,6 @@ public:
// Free the packet at position.
void set(uint16_t at, SrsRtpPacket2* pkt);
void remove(uint16_t at);
// Whether queue overflow or heavy(too many packets and need clear).
bool overflow();
// The highest sequence number, calculate the flip back base.
uint32_t get_extended_highest_sequence();
// Update the sequence, got the nack range by [first, last).

View file

@ -424,8 +424,6 @@ srs_error_t SrsRtcSource::on_rtp(SrsRtpPacket2* pkt)
{
srs_error_t err = srs_success;
SrsAutoFree(SrsRtpPacket2, pkt);
for (int i = 0; i < (int)consumers.size(); i++) {
SrsRtcConsumer* consumer = consumers.at(i);
if ((err = consumer->enqueue2(pkt->copy())) != srs_success) {
@ -679,6 +677,8 @@ srs_error_t SrsRtcFromRtmpBridger::transcode(char* adts_audio, int nn_adts_audio
nn_max_extra_payload = srs_max(nn_max_extra_payload, size);
SrsRtpPacket2* pkt = NULL;
SrsAutoFree(SrsRtpPacket2, pkt);
if ((err = package_opus(data, size, &pkt)) != srs_success) {
return srs_error_wrap(err, "package opus");
}
@ -772,6 +772,8 @@ srs_error_t SrsRtcFromRtmpBridger::filter(SrsSharedPtrMessage* msg, SrsFormat* f
// Well, for each IDR, we append a SPS/PPS before it, which is packaged in STAP-A.
if (msg->has_idr()) {
SrsRtpPacket2* pkt = NULL;
SrsAutoFree(SrsRtpPacket2, pkt);
if ((err = package_stap_a(source_, msg, &pkt)) != srs_success) {
return srs_error_wrap(err, "package stap-a");
}
@ -1021,17 +1023,15 @@ srs_error_t SrsRtcFromRtmpBridger::consume_packets(vector<SrsRtpPacket2*>& pkts)
srs_error_t err = srs_success;
// TODO: FIXME: Consume a range of packets.
int i = 0;
for (; i < (int)pkts.size(); i++) {
for (int i = 0; i < (int)pkts.size(); i++) {
SrsRtpPacket2* pkt = pkts[i];
if ((err = source_->on_rtp(pkt)) != srs_success) {
err = srs_error_wrap(err, "consume sps/pps");
break;
}
}
for (; i < (int)pkts.size(); i++) {
for (int i = 0; i < (int)pkts.size(); i++) {
SrsRtpPacket2* pkt = pkts[i];
srs_freep(pkt);
}

View file

@ -150,6 +150,7 @@ public:
// Get and set the publisher, passed to consumer to process requests such as PLI.
SrsRtcPublisher* rtc_publisher();
void set_rtc_publisher(SrsRtcPublisher* v);
// Consume the shared RTP packet, user must free it.
srs_error_t on_rtp(SrsRtpPacket2* pkt);
virtual srs_error_t on_audio_imp(SrsSharedPtrMessage* audio);
// When got RTC audio message, which is encoded in opus.