10000 Fix issue with getting remote track (#798) · sshyran/flutter-webrtc@83dd556 · GitHub
[go: up one dir, main page]

Skip to content

Commit 83dd556

Browse files
Fix issue with getting remote track (flutter-webrtc#798)
* chore: Organize imports. * Fix issue with getting remote track In FlutterWebRTCBase::MediaTrackForId only local tracks were looked in. Added also looking in remote tracks. Co-authored-by: cloudwebrtc <duanweiwei1982@gmail.com>
1 parent a8d0d24 commit 83dd556

File tree

5 files changed

+31
-5
lines changed

5 files changed

+31
-5
lines changed

common/cpp/include/flutter_peerconnection.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ class FlutterPeerConnectionObserver : public RTCPeerConnectionObserver {
3333

3434
scoped_refptr<RTCMediaStream> MediaStreamForId(const std::string& id);
3535

36+
scoped_refptr<RTCMediaTrack> MediaTrackForId(const std::string& id);
37+
3638
void RemoveStreamForId(const std::string& id);
3739

3840
private:

common/cpp/src/flutter_peerconnection.cc

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1145,6 +1145,26 @@ scoped_refptr<RTCMediaStream> FlutterPeerConnectionObserver::MediaStreamForId(
11451145
return nullptr;
11461146
}
11471147

1148+
scoped_refptr<RTCMediaTrack> FlutterPeerConnectionObserver::MediaTrackForId(const std::string& id) {
1149+
for (auto it = remote_streams_.begin(); it != remote_streams_.end(); it++)
1150+
{
1151+
auto remoteStream = (*it).second;
1152+
auto audio_tracks = remoteStream->audio_tracks();
1153+
for (auto track : audio_tracks.std_vector()) {
1154+
if (track->id().std_string() == id) {
1155+
return track;
1156+
}
1157+
}
1158+
auto video_tracks = remoteStream->video_tracks();
1159+
for (auto track : video_tracks.std_vector()) {
1160+
if (track->id().std_string() == id) {
1161+
return track;
1162+
}
1163+
}
1164+
}
1165+
return nullptr;
1166+
}
1167+
11481168
void FlutterPeerConnectionObserver::RemoveStreamForId(const std::string& id) {
11491169
auto it = remote_streams_.find(id);
11501170
if (it != remote_streams_.end())

common/cpp/src/flutter_webrtc_base.cc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@ RTCMediaTrack* FlutterWebRTCBase ::MediaTrackForId(const std::string& id) {
4242
if (it != local_tracks_.end())
4343
return (*it).second.get();
4444

45+
for (auto kv : peerconnection_observers_) {
46+
auto pco = kv.second.get();
47+
auto track = pco->MediaTrackForId(id);
48+
if (track != nullptr) return track;
49+
}
50+
4551
return nullptr;
4652
}
4753

lib/src/web/rtc_video_renderer_impl.dart

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,10 @@ import 'dart:html' as html;
33
import 'dart:js_util' as jsutil;
44
import 'dart:ui' as ui;
55

6-
import 'package:flutter/foundation.dart';
7-
import 'package:flutter/services.dart';
8-
96
import 'package:dart_webrtc/dart_webrtc.dart';
107
import 'package:dart_webrtc/src/media_stream_impl.dart';
8+
import 'package:flutter/foundation.dart';
9+
import 'package:flutter/services.dart';
1110
import 'package:webrtc_interface/webrtc_interface.dart';
1211

1312
// An error code value to error name Map.

lib/src/web/rtc_video_view_impl.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
import 'dart:async';
22
import 'dart:math';
33

4-
import 'package:flutter/material.dart';
5-
64
import 'package:dart_webrtc/dart_webrtc.dart';
5+
import 'package:flutter/material.dart';
76
import 'package:webrtc_interface/webrtc_interface.dart';
87

98
import 'rtc_video_renderer_impl.dart';

0 commit comments

Comments
 (0)
0