#4671·srs

webrtc NACK as SSRC-Multiplexing

Author: Wangpf-githubCreated Apr 29, 2026Updated Aug 1, 2026
LabelsTransByAIEnglishNative

Describe the bug I want to enable lost pkg retransmission(nack), as rfc4588-8.8, but found server show "no ssrc ****** in publishers. rtcp type:200" ****** is whip client rtx ssrc

Version v7.0.145

To Reproduce Steps to reproduce the behavior:

  1. whip client connect to webrtc server.

Expected behavior Webrtc server receive retransmission packets(nack) successfully..

Screenshots

Additional context call treace as bellow:

SrsRtcSessionManager::do_create_rtc_session()
{
  SrsRtcConnection::add_publisher()
  {
    SrsRtcPublisherNegotiator::negotiate_publish_capability()
    {
      ...
      if (track_id != msid_tracker) {
          SrsRtcTrackDescription *track_desc_copy = track_desc->copy();
          track_desc_copy->ssrc_ = ssrc_info.ssrc_;
          track_desc_copy->id_ = msid_tracker;
          track_desc_copy->msid_ = msid;
          if (remote_media_desc.is_audio() && !stream_desc->audio_track_desc_) {
              stream_desc->audio_track_desc_ = track_desc_copy;
          } else if (remote_media_desc.is_video()) {
              // *** track_desc_copy->is_active_ = true;
              stream_desc->video_track_descs_.push_back(track_desc_copy);
          } else {
              srs_freep(track_desc_copy);
          }
      }
      ...
      for (int j = 0; j < (int)remote_media_desc.ssrc_groups_.size(); ++j) {
          const SrsSSRCGroup &ssrc_group = remote_media_desc.ssrc_groups_.at(j);
          SrsRtcTrackDescription *track_desc = stream_desc->find_track_description_by_ssrc(ssrc_group.ssrcs_[0]);
          // now is_active_ is false, so track_desc is null, continue foreach
          if (!track_desc) {
              continue;
          }
          if (ssrc_group.semantic_ == "FID") {
              // track_desc is null, can not set rtx ssrc
              track_desc->set_rtx_ssrc(ssrc_group.ssrcs_[1]);
          } else if (ssrc_group.semantic_ == "FEC") {
              track_desc->set_fec_ssrc(ssrc_group.ssrcs_[1]);
          }
      }
    }
  }
  ...
  SrsRtcConnection::set_all_tracks_status()
  {
    SrsRtcPublishStream::set_all_tracks_status()
    {
      SrsRtcRecvTrack::set_track_status()
      {
        track_desc_->is_active_ = true;
      }
    }
  }
  ...
}

before call set_rtx_ssrc(), check track_desc status, is_active_ is false, track_desc is null, so can not set rtx ssrc. try to add 'track_desc_copy->is_active_ = true;' before push_back(), (just for test, maybe wrong way) call set_rtx_ssrc() in ssrc_group.semantic_ == "FID", webrtc server receive retransmission packets(nack) successfully.

I use server in a wrong way? or is that a Bug?