10000 Fix set src obj with track id for win (#1459) · commetchat/flutter-webrtc@a7589dd · GitHub
[go: up one dir, main page]

Skip to content

Commit a7589dd

Browse files
authored
Fix set src obj with track id for win (flutter-webrtc#1459)
* update. * update. * update. * fix compile error for windows.
1 parent 0519f1f commit a7589dd

File tree

5 files changed

+56
-33
lines changed

5 files changed

+56
-33
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
# Changelog
22

33
--------------------------------------------
4+
[0.9.45] - 2023-09-27
5+
6+
* [iOS/macOS] fix: send message on non-platform thread.
7+
* [Windows] fix: fix setSrcObj with trackId for Windows.
8+
49
[0.9.44] - 2023-09-25
510

611
* [Windows] fix: fix Renderer bug for Windows.

common/cpp/include/flutter_video_renderer.h

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,16 @@ namespace flutter_webrtc_plugin {
1414
using namespace libwebrtc;
1515

1616
class FlutterVideoRenderer
17-
: public RTCVideoRenderer<scoped_refptr& 8000 lt;RTCVideoFrame>>, public RefCountInterface {
17+
: public RTCVideoRenderer<scoped_refptr<RTCVideoFrame>>,
18+
public RefCountInterface {
1819
public:
1920
FlutterVideoRenderer() = default;
2021
~FlutterVideoRenderer();
2122

22-
void initialize(TextureRegistrar* registrar, BinaryMessenger* messenger, std::unique_ptr<flutter::TextureVariant> texture, int64_t texture_id);
23+
void initialize(TextureRegistrar* registrar,
24+
BinaryMessenger* messenger,
25+
std::unique_ptr<flutter::TextureVariant> texture,
26+
int64_t texture_id);
2327

2428
virtual const FlutterDesktopPixelBuffer* CopyPixelBuffer(size_t width,
2529
size_t height) const;
@@ -61,12 +65,14 @@ class FlutterVideoRendererManager {
6165

6266
void CreateVideoRendererTexture(std::unique_ptr<MethodResultProxy> result);
6367

64-
void SetMediaStream(int64_t texture_id,
65-
const std::string& stream_id,
66-
const std::string& peerConnectionId);
68+
void VideoRendererSetSrcObject(int64_t texture_id,
69+
const std::string& stream_id,
70+
const std::string& owner_tag,
71+
const std::string& track_id);
6772

6873
void VideoRendererDispose(int64_t texture_id,
6974
std::unique_ptr<MethodResultProxy> result);
75+
7076
private:
7177
FlutterWebRTCBase* base_;
7278
std::map<int64_t, scoped_refptr<FlutterVideoRenderer>> renderers_;

common/cpp/src/flutter_video_renderer.cc

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@
22

33
namespace flutter_webrtc_plugin {
44

5-
FlutterVideoRenderer::~FlutterVideoRenderer() {
5+
FlutterVideoRenderer::~FlutterVideoRenderer() {}
66

7-
}
8-
9-
void FlutterVideoRenderer::initialize(TextureRegistrar* registrar, BinaryMessenger* messenger, std::unique_ptr<flutter::TextureVariant> texture, int64_t trxture_id) {
7+
void FlutterVideoRenderer::initialize(
8+
TextureRegistrar* registrar,
9+
BinaryMessenger* messenger,
10+
std::unique_ptr<flutter::TextureVariant> texture,
11+
int64_t trxture_id) {
1012
registrar_ = registrar;
1113
texture_ = std::move(texture);
1214
texture_id_ = trxture_id;
@@ -113,33 +115,44 @@ void FlutterVideoRendererManager::CreateVideoRendererTexture(
113115
auto texture = new RefCountedObject<FlutterVideoRenderer>();
114116
auto textureVariant =
115117
std::make_unique<flutter::TextureVariant>(flutter::PixelBufferTexture(
116-
[texture](
117-
size_t width,
118-
size_t height) -> const FlutterDesktopPixelBuffer* {
118+
[texture](size_t width,
119+
size_t height) -> const FlutterDesktopPixelBuffer* {
119120
return texture->CopyPixelBuffer(width, height);
120121
}));
121122

122-
auto texture_id = base_->textures_->RegisterTexture(textureVariant.get());
123-
texture->initialize(base_->textures_, base_->messenger_, std::move(textureVariant), texture_id);
123+
auto texture_id = base_->textures_->RegisterTexture(textureVariant.get());
124+
texture->initialize(base_->textures_, base_->messenger_,
125+
std::move(textureVariant), texture_id);
124126
renderers_[texture_id] = texture;
125127
EncodableMap params;
126128
params[EncodableValue("textureId")] = EncodableValue(texture_id);
127129
result->Success(EncodableValue(params));
128130
}
129131

130-
void FlutterVideoRendererManager::SetMediaStream(int64_t texture_id,
131-
const std::string& stream_id,
132-
const std::string& ownerTag) {
132+
void FlutterVideoRendererManager::VideoRendererSetSrcObject(
133+
int64_t texture_id,
134+
const std::string& stream_id,
135+
const std::string& owner_tag,
136+
const std::string& track_id) {
133137
scoped_refptr<RTCMediaStream> stream =
134-
base_->MediaStreamForId(stream_id, ownerTag);
138+
base_->MediaStreamForId(stream_id, owner_tag);
135139

136140
auto it = renderers_.find(texture_id);
137141
if (it != renderers_.end()) {
138142
FlutterVideoRenderer* renderer = it->second.get();
139143
if (stream.get()) {
140144
auto video_tracks = stream->video_tracks();
141145
if (video_tracks.size() > 0) {
142-
renderer->SetVideoTrack(video_tracks[0]);
146+
if (track_id == std::string()) {
147+
renderer->SetVideoTrack(video_tracks[0]);
148+
} else {
149+
for (auto track : video_tracks.std_vector()) {
150+
if (track->id().std_string() == track_id) {
151+
renderer->SetVideoTrack(track);
152+
break;
153+
}
154+
}
155+
}
143156
renderer->media_stream_id = stream_id;
144157
}
145158
} else {
@@ -155,10 +168,8 @@ void FlutterVideoRendererManager::VideoRendererDispose(
155168
if (it != renderers_.end()) {
156169
it->second->SetVideoTrack(nullptr);
157170
#if defined(_WINDOWS)
158-
base_->textures_->UnregisterTexture(
159-
texture_id, [&, it] {
160-
renderers_.erase(it);
161-
});
171+
base_->textures_->UnregisterTexture(texture_id,
172+
[&, it] { renderers_.erase(it); });
162173
#else
163174
base_->textures_->UnregisterTexture(texture_id);
164175
renderers_.erase(it);

common/cpp/src/flutter_webrtc.cc

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ void FlutterWebRTC::HandleMethodCall(
2020
const MethodCallProxy& method_call,
2121
std::unique_ptr<MethodResultProxy> result) {
2222
if (method_call.method_name().compare("initialize") == 0) {
23-
const EncodableMap params =
24-
GetValue<EncodableMap>(*method_call.arguments());
25-
const EncodableMap options = findMap(params, "options");
26-
result->Success();
23+
const EncodableMap params =
24+
GetValue<EncodableMap>(*method_call.arguments());
25+
const EncodableMap options = findMap(params, "options");
26+
result->Success();
2727
} else if (method_call.method_name().compare("createPeerConnection") == 0) {
2828
if (!method_call.arguments()) {
2929
result->Error("Bad Arguments", "Null arguments received");
@@ -455,9 +455,10 @@ void FlutterWebRTC::HandleMethodCall(
455455
GetValue<EncodableMap>(*method_call.arguments());
456456
const std::string stream_id = findString(params, "streamId");
457457
int64_t texture_id = findLongInt(params, "textureId");
458-
const std::string ownerTag = findString(params, "ownerTag");
458+
const std::string owner_tag = findString(params, "ownerTag");
459+
const std::string track_id = findString(params, "trackId");
459460

460-
SetMediaStream(texture_id, stream_id, ownerTag);
461+
VideoRendererSetSrcObject(texture_id, stream_id, owner_tag, track_id);
461462
result->Success();
462463
} else if (method_call.method_name().compare(
463464
"mediaStreamTrackSwitchCamera") == 0) {
@@ -888,8 +889,7 @@ void FlutterWebRTC::HandleMethodCall(
888889
return;
889890
}
890891

891-
RtpTransceiverSetDirection(pc, transceiverId, direction,
892-
std::move(result));
892+
RtpTransceiverSetDirection(pc, transceiverId, direction, std::move(result));
893893
} else if (method_call.method_name().compare("setConfiguration") == 0) {
894894
if (!method_call.arguments()) {
895895
result->Error("Bad Arguments", "Null constraints arguments received");
@@ -1114,7 +1114,8 @@ void FlutterWebRTC::HandleMethodCall(
11141114

11151115
RTCPeerConnection* pc = PeerConnectionForId(peerConnectionId);
11161116
if (pc == nullptr) {
1117-
result->Error("getSignalingState", "getSignalingState() peerConnection is null");
1117+
result->Error("getSignalingState",
1118+
"getSignalingState() peerConnection is null");
11181119
return;
11191120
}
11201121
EncodableMap state;

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: flutter_webrtc
22
description: Flutter WebRTC plugin for iOS/Android/Destkop/Web, based on GoogleWebRTC.
3-
version: 0.9.44
3+
version: 0.9.45
44
homepage: https://github.com/cloudwebrtc/flutter-webrtc
55
environment:
66
sdk: '>=2.12.0 <4.0.0'

0 commit comments

Comments
 (0)
0