Skip to content

webrtc NACK as SSRC-Multiplexing #4671

Description

@Wangpf-github

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?

Metadata

Metadata

Assignees

No one assigned

    Labels

    EnglishNativeThis issue is conveyed exclusively in English.

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions