mirror of
https://github.com/ossrs/srs.git
synced 2025-02-15 04:42:04 +00:00
RTC: Check error for send_periodic_twcc
This commit is contained in:
parent
f149c84dd0
commit
5c853e02ee
2 changed files with 21 additions and 26 deletions
|
@ -808,7 +808,6 @@ SrsRtcPublishStream::SrsRtcPublishStream(SrsRtcConnection* session)
|
||||||
|
|
||||||
nn_audio_frames = 0;
|
nn_audio_frames = 0;
|
||||||
twcc_id_ = 0;
|
twcc_id_ = 0;
|
||||||
last_twcc_feedback_time_ = 0;
|
|
||||||
twcc_fb_count_ = 0;
|
twcc_fb_count_ = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1133,30 +1132,25 @@ void SrsRtcPublishStream::on_before_decode_payload(SrsRtpPacket2* pkt, SrsBuffer
|
||||||
srs_error_t SrsRtcPublishStream::send_periodic_twcc()
|
srs_error_t SrsRtcPublishStream::send_periodic_twcc()
|
||||||
{
|
{
|
||||||
srs_error_t err = srs_success;
|
srs_error_t err = srs_success;
|
||||||
srs_utime_t now = srs_get_system_time();
|
|
||||||
if(0 == last_twcc_feedback_time_) {
|
char pkt[kRtcpPacketSize];
|
||||||
last_twcc_feedback_time_ = now;
|
SrsBuffer *buffer = new SrsBuffer(pkt, sizeof(pkt));
|
||||||
return err;
|
SrsAutoFree(SrsBuffer, buffer);
|
||||||
}
|
|
||||||
srs_utime_t diff = now - last_twcc_feedback_time_;
|
rtcp_twcc_.set_feedback_count(twcc_fb_count_);
|
||||||
if( diff >= 50 * SRS_UTIME_MILLISECONDS) {
|
twcc_fb_count_++;
|
||||||
last_twcc_feedback_time_ = now;
|
|
||||||
char pkt[kRtcpPacketSize];
|
if((err = rtcp_twcc_.encode(buffer)) != srs_success) {
|
||||||
SrsBuffer *buffer = new SrsBuffer(pkt, sizeof(pkt));
|
return srs_error_wrap(err, "encode, count=%u", twcc_fb_count_);
|
||||||
SrsAutoFree(SrsBuffer, buffer);
|
|
||||||
rtcp_twcc_.set_feedback_count(twcc_fb_count_);
|
|
||||||
twcc_fb_count_++;
|
|
||||||
if((err = rtcp_twcc_.encode(buffer)) != srs_success) {
|
|
||||||
return srs_error_wrap(err, "fail to generate twcc feedback packet");
|
|
||||||
}
|
|
||||||
int nb_protected_buf = buffer->pos();
|
|
||||||
char protected_buf[kRtpPacketSize];
|
|
||||||
if (session_->transport_->protect_rtcp(pkt, protected_buf, nb_protected_buf) == srs_success) {
|
|
||||||
session_->sendonly_skt->sendto(protected_buf, nb_protected_buf, 0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return err;
|
int nb_protected_buf = buffer->pos();
|
||||||
|
char protected_buf[kRtpPacketSize];
|
||||||
|
if ((err = session_->transport_->protect_rtcp(pkt, protected_buf, nb_protected_buf)) != srs_success) {
|
||||||
|
return srs_error_wrap(err, "protect rtcp, size=%u", nb_protected_buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
return session_->sendonly_skt->sendto(protected_buf, nb_protected_buf, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
srs_error_t SrsRtcPublishStream::on_rtcp(char* data, int nb_data)
|
srs_error_t SrsRtcPublishStream::on_rtcp(char* data, int nb_data)
|
||||||
|
@ -1530,10 +1524,12 @@ srs_error_t SrsRtcPublishStream::notify(int type, srs_utime_t interval, srs_utim
|
||||||
srs_freep(err);
|
srs_freep(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: FIXME: Check error.
|
|
||||||
// We should not depends on the received packet,
|
// We should not depends on the received packet,
|
||||||
// instead we should send feedback every Nms.
|
// instead we should send feedback every Nms.
|
||||||
send_periodic_twcc();
|
if ((err = send_periodic_twcc()) != srs_success) {
|
||||||
|
srs_warn("TWCC err %s", srs_error_desc(err).c_str());
|
||||||
|
srs_freep(err);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
|
|
|
@ -242,7 +242,6 @@ private:
|
||||||
std::vector<SrsRtcAudioRecvTrack*> audio_tracks_;
|
std::vector<SrsRtcAudioRecvTrack*> audio_tracks_;
|
||||||
std::vector<SrsRtcVideoRecvTrack*> video_tracks_;
|
std::vector<SrsRtcVideoRecvTrack*> video_tracks_;
|
||||||
private:
|
private:
|
||||||
srs_utime_t last_twcc_feedback_time_;
|
|
||||||
int twcc_id_;
|
int twcc_id_;
|
||||||
uint8_t twcc_fb_count_;
|
uint8_t twcc_fb_count_;
|
||||||
SrsRtcpTWCC rtcp_twcc_;
|
SrsRtcpTWCC rtcp_twcc_;
|
||||||
|
|
Loading…
Reference in a new issue