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

Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

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<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< D3D0 /code>-
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