open-webrtc-toolkit / owt-client-native

Open WebRTC Toolkit client SDK for native Windows/Linux/iOS applications.
https://01.org/open-webrtc-toolkit
Apache License 2.0
394 stars 182 forks source link

Issue with chat tracks on some browsers #491

Open JamesTerm opened 3 years ago

JamesTerm commented 3 years ago

I am not sure if this issue is in 4.3 as we are still in 4.2 but if it is, I want to share a fix. I am not sure if it is the correct fix so I'm not doing a pr, but instead wish to share it here:

The problem is that the id's being sent for chat-signal are different than chat-tracks on some browsers, whether or not if they should be identical remains to be seen, but fortunately the author already cached the id's and did nothing with them, so I am able to pull them in.

This is in P2PPeerConnectionChannel::OnAddStream() (around line 577 in p2ppeerconnectionchannel.cc)

See this patched here around line 582

    //Case 108782: Use remote_track_source_info_ for the track id's as safari will have a different
    //set of ID's for the chat-signal which is the ID's pulled by default, we'll keep this logic intact
    //if for some reason we do not have the correct size.  Note: this may be problematic for future if there
    //are more than 2 streams
    if (remote_track_source_info_.size()<2)
    {
      for (const auto& track : stream->GetAudioTracks()) {
        stream_tracks.append(track->id()); RTC_LOG(LS_INFO) << "JDK track idA " << track->id();
      }
      for (const auto& track : stream->GetVideoTracks()) {
        stream_tracks.append(track->id());  RTC_LOG(LS_INFO) << "JDK track idV " << track->id();
      }
    }
    else
    {
      for (const auto& track : remote_track_source_info_ )
      {
        stream_tracks.append(track.first.c_str());
        RTC_LOG(LS_INFO) << "JDK chat-track id " << track.first.c_str();
      }
    }
jianjunz commented 3 years ago

Thanks for your patch. Track IDs are not required to be the same at local and remote side. Track source info is actually the source info of a RTP sender.

Reference: https://w3c.github.io/webrtc-pc/#rtp-media-api.