2
2
3
3
namespace flutter_webrtc_plugin {
4
4
5
- FlutterVideoRenderer::~FlutterVideoRenderer () {
5
+ FlutterVideoRenderer::~FlutterVideoRenderer () {}
6
6
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) {
10
12
registrar_ = registrar;
11
13
texture_ = std::move (texture);
12
14
texture_id_ = trxture_id;
@@ -113,33 +115,44 @@ void FlutterVideoRendererManager::CreateVideoRendererTexture(
113
115
auto texture = new RefCountedObject<FlutterVideoRenderer>();
114
116
auto textureVariant =
115
117
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* {
119
120
return texture->CopyPixelBuffer (width, height);
120
121
}));
121
122
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);
124
126
renderers_[texture_id] = texture;
125
127
EncodableMap params;
126
128
params[EncodableValue (" textureId" )] = EncodableValue (texture_id);
127
129
result->Success (EncodableValue (params));
128
130
}
129
131
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) {
133
137
scoped_refptr<RTCMediaStream> stream =
134
- base_->MediaStreamForId (stream_id, ownerTag );
138
+ base_->MediaStreamForId (stream_id, owner_tag );
135
139
136
140
auto it = renderers_.find (texture_id);
137
141
if (it != renderers_.end ()) {
138
142
FlutterVideoRenderer* renderer = it->second .get ();
139
143
if (stream.get ()) {
140
144
auto video_tracks = stream->video_tracks ();
141
145
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
+ }
143
156
renderer->media_stream_id = stream_id;
144
157
}
145
158
} else {
@@ -155,10 +168,8 @@ void FlutterVideoRendererManager::VideoRendererDispose(
155
168
if (it != renderers_.end ()) {
156
169
it->second ->SetVideoTrack (nullptr );
157
170
#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); });
162
173
#else
163
174
base_->textures_ ->UnregisterTexture (texture_id);
164
175
renderers_.erase (it);
0 commit comments