diff --git a/trunk/src/app/srs_app_rtc_conn.cpp b/trunk/src/app/srs_app_rtc_conn.cpp index 13f0d4301..ea55bf6b8 100644 --- a/trunk/src/app/srs_app_rtc_conn.cpp +++ b/trunk/src/app/srs_app_rtc_conn.cpp @@ -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); } diff --git a/trunk/src/app/srs_app_rtc_queue.cpp b/trunk/src/app/srs_app_rtc_queue.cpp index 21ba6c781..1f0e51cf4 100644 --- a/trunk/src/app/srs_app_rtc_queue.cpp +++ b/trunk/src/app/srs_app_rtc_queue.cpp @@ -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; diff --git a/trunk/src/app/srs_app_rtc_queue.hpp b/trunk/src/app/srs_app_rtc_queue.hpp index ecda676c9..55cea88a6 100644 --- a/trunk/src/app/srs_app_rtc_queue.hpp +++ b/trunk/src/app/srs_app_rtc_queue.hpp @@ -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). diff --git a/trunk/src/app/srs_app_rtc_source.cpp b/trunk/src/app/srs_app_rtc_source.cpp index e37685bf5..e31824d4a 100644 --- a/trunk/src/app/srs_app_rtc_source.cpp +++ b/trunk/src/app/srs_app_rtc_source.cpp @@ -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& 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); } diff --git a/trunk/src/app/srs_app_rtc_source.hpp b/trunk/src/app/srs_app_rtc_source.hpp index ea1c5ac48..6e8608690 100644 --- a/trunk/src/app/srs_app_rtc_source.hpp +++ b/trunk/src/app/srs_app_rtc_source.hpp @@ -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.