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:
parent
31de2c71d0
commit
c7b88e08e9
5 changed files with 9 additions and 15 deletions
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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).
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in a new issue