mirror of
				https://github.com/ossrs/srs.git
				synced 2025-03-09 15:49:59 +00:00 
			
		
		
		
	tenfold: add publish nack
This commit is contained in:
		
							parent
							
								
									f5ba274019
								
							
						
					
					
						commit
						392e2c8161
					
				
					 1 changed files with 19 additions and 7 deletions
				
			
		| 
						 | 
					@ -1751,22 +1751,32 @@ srs_error_t SrsRtcPublisher::on_video(SrsRtpPacket2* pkt)
 | 
				
			||||||
srs_error_t SrsRtcPublisher::on_nack(SrsRtpPacket2* pkt)
 | 
					srs_error_t SrsRtcPublisher::on_nack(SrsRtpPacket2* pkt)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    srs_error_t err = srs_success;
 | 
					    srs_error_t err = srs_success;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    SrsRtpNackForReceiver* nack_receiver = audio_nack_;
 | 
				
			||||||
 | 
					    SrsRtpRingBuffer* ring_queue = audio_queue_;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    uint32_t ssrc = pkt->header.get_ssrc();
 | 
				
			||||||
    uint16_t seq = pkt->header.get_sequence();
 | 
					    uint16_t seq = pkt->header.get_sequence();
 | 
				
			||||||
    SrsRtpNackInfo* nack_info = audio_nack_->find(seq);
 | 
					    bool video = (ssrc == video_ssrc) ? true : false;
 | 
				
			||||||
 | 
					    if (video) {
 | 
				
			||||||
 | 
					        nack_receiver = video_nack_; 
 | 
				
			||||||
 | 
					        ring_queue = video_queue_;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    SrsRtpNackInfo* nack_info = nack_receiver->find(seq);
 | 
				
			||||||
    if (nack_info) {
 | 
					    if (nack_info) {
 | 
				
			||||||
        return err;
 | 
					        return err;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // insert check nack list
 | 
				
			||||||
    uint16_t nack_first = 0, nack_last = 0;
 | 
					    uint16_t nack_first = 0, nack_last = 0;
 | 
				
			||||||
    if (!audio_queue_->update(seq, nack_first, nack_last)) {
 | 
					    if (!ring_queue->update(seq, nack_first, nack_last)) {
 | 
				
			||||||
        srs_warn("too old seq %u, range [%u, %u]", seq, audio_queue_->begin, audio_queue_->end);
 | 
					        srs_warn("too old seq %u, range [%u, %u]", seq, ring_queue->begin, ring_queue->end);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (srs_rtp_seq_distance(nack_first, nack_last) > 0) {
 | 
					    if (srs_rtp_seq_distance(nack_first, nack_last) > 0) {
 | 
				
			||||||
        srs_trace("update seq=%u, nack range [%u, %u]", seq, nack_first, nack_last);
 | 
					        srs_trace("update seq=%u, nack range [%u, %u]", seq, nack_first, nack_last);
 | 
				
			||||||
        audio_nack_->insert(nack_first, nack_last);
 | 
					        nack_receiver->insert(nack_first, nack_last);
 | 
				
			||||||
        audio_nack_->check_queue_size();
 | 
					        nack_receiver->check_queue_size();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return err;
 | 
					    return err;
 | 
				
			||||||
| 
						 | 
					@ -2132,6 +2142,8 @@ srs_error_t SrsRtcPublisher::notify(int type, srs_utime_t interval, srs_utime_t
 | 
				
			||||||
    send_rtcp_rr(audio_ssrc, audio_queue_);
 | 
					    send_rtcp_rr(audio_ssrc, audio_queue_);
 | 
				
			||||||
    send_rtcp_xr_rrtr(video_ssrc);
 | 
					    send_rtcp_xr_rrtr(video_ssrc);
 | 
				
			||||||
    send_rtcp_xr_rrtr(audio_ssrc);
 | 
					    send_rtcp_xr_rrtr(audio_ssrc);
 | 
				
			||||||
 | 
					    check_send_nacks(video_nack_, video_ssrc);
 | 
				
			||||||
 | 
					    check_send_nacks(audio_nack_, audio_ssrc);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return err;
 | 
					    return err;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue