Skip to content

Commit eebf991

Browse files
authored
Merge pull request #35 from GetStream/chore/sync_0.14.2
chore: sync 0.14.2
2 parents 9367609 + 00c02b0 commit eebf991

26 files changed

+166
-251
lines changed

.github/workflows/build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ jobs:
136136
- name: Install ninja-build libgtk-3-dev
137137
run: sudo apt-get install -y ninja-build libgtk-3-dev
138138
- name: Install elinux
139-
run: git clone https://github.com/sony/flutter-elinux.git ~/flutter-elinux
139+
run: git clone https://github.com/sony/flutter-elinux.git -b 3.27.1 ~/flutter-elinux
140140
- name: Build for elinux
141141
working-directory: ./example
142142
run: /home/runner/flutter-elinux/bin/flutter-elinux pub get && /home/runner/flutter-elinux/bin/flutter-elinux build elinux

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,14 @@
11

22
# Changelog
3+
4+
[1.0.9] - 2025-07-01
5+
* [Android] fix: disable software encoding for certain codecs.
6+
* [Android] fix: Nullpointer exception in `ConstraintsMap`.
7+
* Synced flutter-webrtc v0.14.2
8+
* [Windows/Linux] feat: Add audio processing and sink API for cpp. (#1867)
9+
* [Linux] fix: Fixed audio device selection error for Linux. (#1864)
10+
* [Android] fix: Fix screen capture orientation for landscape-native devices (#1854)
11+
312
[1.0.8] - 2025-06-20
413
* [Android] Fix `getLocalDescription` throwing an exception when it's `null`
514

common/cpp/include/flutter_webrtc_base.h

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
#include "libwebrtc.h"
1313

1414
#include "rtc_audio_device.h"
15+
#include "rtc_audio_processing.h"
1516
#include "rtc_desktop_device.h"
1617
#include "rtc_dtmf_sender.h"
1718
#include "rtc_media_stream.h"
@@ -21,8 +22,6 @@
2122
#include "rtc_peerconnection_factory.h"
2223
#include "rtc_video_device.h"
2324

24-
#include "uuidxx.h"
25-
2625
namespace stream_webrtc_flutter_plugin {
2726

2827
using namespace libwebrtc;
@@ -46,14 +45,18 @@ class FlutterWebRTCBase {
4645
FlutterWebRTCBase(BinaryMessenger* messenger, TextureRegistrar* textures, TaskRunner* task_runner);
4746
~FlutterWebRTCBase();
4847

48+
virtual scoped_refptr<RTCAudioProcessing> audio_processing() {
49+
return audio_processing_;
50+
}
51+
52+
virtual scoped_refptr<RTCMediaTrack> MediaTrackForId(const std::string& id);
53+
4954
std::string GenerateUUID();
5055

5156
RTCPeerConnection* PeerConnectionForId(const std::string& id);
5257

5358
void RemovePeerConnectionForId(const std::string& id);
5459

55-
RTCMediaTrack* MediaTrackForId(const std::string& id);
56-
5760
void RemoveMediaTrackForId(const std::string& id);
5861

5962
FlutterPeerConnectionObserver* PeerConnectionObserversForId(
@@ -104,6 +107,7 @@ class FlutterWebRTCBase {
104107
scoped_refptr<RTCAudioDevice> audio_device_;
105108
scoped_refptr<RTCVideoDevice> video_device_;
106109
scoped_refptr<RTCDesktopDevice> desktop_device_;
110+
scoped_refptr<RTCAudioProcessing> audio_processing_;
107111
RTCConfiguration configuration_;
108112

109113
std::map<std::string, scoped_refptr<RTCPeerConnection>> peerconnections_;

common/cpp/src/flutter_media_stream.cc

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,6 @@ void FlutterMediaStream::GetUserVideo(const EncodableMap& constraints,
288288
if (!video_capturer.get())
289289
return;
290290

291-
292291
video_capturer->StartCapture();
293292

294293
const char* video_source_label = "video_input";
@@ -333,10 +332,11 @@ void FlutterMediaStream::GetSources(std::unique_ptr<MethodResultProxy> result) {
333332

334333
for (uint16_t i = 0; i < nb_audio_devices; i++) {
335334
base_->audio_device_->RecordingDeviceName(i, strNameUTF8, strGuidUTF8);
335+
std::string device_id = strlen(strGuidUTF8) > 0 ? std::string(strGuidUTF8)
336+
: std::string(strNameUTF8);
336337
EncodableMap audio;
337338
audio[EncodableValue("label")] = EncodableValue(std::string(strNameUTF8));
338-
audio[EncodableValue("deviceId")] =
339-
EncodableValue(std::string(strGuidUTF8));
339+
audio[EncodableValue("deviceId")] = EncodableValue(device_id);
340340
audio[EncodableValue("facing")] = "";
341341
audio[EncodableValue("kind")] = "audioinput";
342342
sources.push_back(EncodableValue(audio));
@@ -345,10 +345,11 @@ void FlutterMediaStream::GetSources(std::unique_ptr<MethodResultProxy> result) {
345345
nb_audio_devices = base_->audio_device_->PlayoutDevices();
346346
for (uint16_t i = 0; i < nb_audio_devices; i++) {
347347
base_->audio_device_->PlayoutDeviceName(i, strNameUTF8, strGuidUTF8);
348+
std::string device_id = strlen(strGuidUTF8) > 0 ? std::string(strGuidUTF8)
349+
: std::string(strNameUTF8);
348350
EncodableMap audio;
349351
audio[EncodableValue("label")] = EncodableValue(std::string(strNameUTF8));
350-
audio[EncodableValue("deviceId")] =
351-
EncodableValue(std::string(strGuidUTF8));
352+
audio[EncodableValue("deviceId")] = EncodableValue(device_id);
352353
audio[EncodableValue("facing")] = "";
353354
audio[EncodableValue("kind")] = "audiooutput";
354355
sources.push_back(EncodableValue(audio));
@@ -373,13 +374,16 @@ void FlutterMediaStream::GetSources(std::unique_ptr<MethodResultProxy> result) {
373374
void FlutterMediaStream::SelectAudioOutput(
374375
const std::string& device_id,
375376
std::unique_ptr<MethodResultProxy> result) {
376-
char strPlayoutName[256];
377-
char strPlayoutGuid[256];
377+
char deviceName[256];
378+
char deviceGuid[256];
378379
int playout_devices = base_->audio_device_->PlayoutDevices();
379380
bool found = false;
380381
for (uint16_t i = 0; i < playout_devices; i++) {
381-
base_->audio_device_->PlayoutDeviceName(i, strPlayoutName, strPlayoutGuid);
382-
if (device_id != "" && device_id == strPlayoutGuid) {
382+
base_->audio_device_->PlayoutDeviceName(i, deviceName, deviceGuid);
383+
std::string cur_device_id = strlen(deviceGuid) > 0
384+
? std::string(deviceGuid)
385+
: std::string(deviceName);
386+
if (device_id != "" && device_id == cur_device_id) {
383387
base_->audio_device_->SetPlayoutDevice(i);
384388
found = true;
385389
break;
@@ -395,14 +399,16 @@ void FlutterMediaStream::SelectAudioOutput(
395399
void FlutterMediaStream::SelectAudioInput(
396400
const std::string& device_id,
397401
std::unique_ptr<MethodResultProxy> result) {
398-
char strPlayoutName[256];
399-
char strPlayoutGuid[256];
402+
char deviceName[256];
403+
char deviceGuid[256];
400404
int playout_devices = base_->audio_device_->RecordingDevices();
401405
bool found = false;
402406
for (uint16_t i = 0; i < playout_devices; i++) {
403-
base_->audio_device_->RecordingDeviceName(i, strPlayoutName,
404-
strPlayoutGuid);
405-
if (device_id != "" && device_id == strPlayoutGuid) {
407+
base_->audio_device_->RecordingDeviceName(i, deviceName, deviceGuid);
408+
std::string cur_device_id = strlen(deviceGuid) > 0
409+
? std::string(deviceGuid)
410+
: std::string(deviceName);
411+
if (device_id != "" && device_id == cur_device_id) {
406412
base_->audio_device_->SetRecordingDevice(i);
407413
found = true;
408414
break;
@@ -538,14 +544,14 @@ void FlutterMediaStream::MediaStreamTrackDispose(
538544
if (track->id().std_string() == track_id) {
539545
stream->RemoveTrack(track);
540546

541-
if (base_->video_capturers_.find(track_id) !=
542-
base_->video_capturers_.end()) {
543-
auto video_capture = base_->video_capturers_[track_id];
544-
if (video_capture->CaptureStarted()) {
545-
video_capture->StopCapture();
547+
if (base_->video_capturers_.find(track_id) !=
548+
base_->video_capturers_.end()) {
549+
auto video_capture = base_->video_capturers_[track_id];
550+
if (video_capture->CaptureStarted()) {
551+
video_capture->StopCapture();
552+
}
553+
base_->video_capturers_.erase(track_id);
546554
}
547-
base_->video_capturers_.erase(track_id);
548-
}
549555
}
550556
}
551557
}

common/cpp/src/flutter_webrtc.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,8 @@ void FlutterWebRTC::HandleMethodCall(
352352
return;
353353
}
354354
DataChannelSend(data_channel, type, data, std::move(result));
355-
} else if (method_call.method_name().compare("dataChannelGetBufferedAmount") == 0) {
355+
} else if (method_call.method_name().compare(
356+
"dataChannelGetBufferedAmount") == 0) {
356357
if (!method_call.arguments()) {
357358
result->Error("Bad Arguments", "Null constraints arguments received");
358359
return;

common/cpp/src/flutter_webrtc_base.cc

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
#include "flutter_data_channel.h"
44
#include "flutter_peerconnection.h"
55

6+
#include "helper.h"
7+
68
namespace stream_webrtc_flutter_plugin {
79

810
const char* kEventChannelName = "FlutterWebRTC.Event";
@@ -16,6 +18,7 @@ FlutterWebRTCBase::FlutterWebRTCBase(BinaryMessenger* messenger,
1618
audio_device_ = factory_->GetAudioDevice();
1719
video_device_ = factory_->GetVideoDevice();
1820
desktop_device_ = factory_->GetDesktopDevice();
21+
audio_processing_ = factory_->GetAudioProcessing();
1922
event_channel_ = EventChannelProxy::Create(messenger_, task_runner_, kEventChannelName);
2023
}
2124

@@ -28,7 +31,7 @@ EventChannelProxy* FlutterWebRTCBase::event_channel() {
2831
}
2932

3033
std::string FlutterWebRTCBase::GenerateUUID() {
31-
return uuidxx::uuid::Generate().ToString(false);
34+
return libwebrtc::Helper::CreateRandomUuid().std_string();
3235
}
3336

3437
RTCPeerConnection* FlutterWebRTCBase::PeerConnectionForId(
@@ -47,11 +50,11 @@ void FlutterWebRTCBase::RemovePeerConnectionForId(const std::string& id) {
4750
peerconnections_.erase(it);
4851
}
4952

50-
RTCMediaTrack* FlutterWebRTCBase ::MediaTrackForId(const std::string& id) {
53+
scoped_refptr<RTCMediaTrack> FlutterWebRTCBase ::MediaTrackForId(const std::string& id) {
5154
auto it = local_tracks_.find(id);
5255

5356
if (it != local_tracks_.end())
54-
return (*it).second.get();
57+
return (*it).second;
5558

5659
for (auto kv : peerconnection_observers_) {
5760
auto pco = kv.second.get();

elinux/CMakeLists.txt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ add_definitions(-DRTC_DESKTOP_DEVICE)
1111
add_definitions(-DFLUTTER_ELINUX)
1212

1313
add_library(${PLUGIN_NAME} SHARED
14-
"../third_party/uuidxx/uuidxx.cc"
1514
"../common/cpp/src/flutter_data_channel.cc"
1615
"../common/cpp/src/flutter_frame_cryptor.cc"
1716
"../common/cpp/src/flutter_frame_capturer.cc"
@@ -28,7 +27,6 @@ add_library(${PLUGIN_NAME} SHARED
2827
include_directories(
2928
"${CMAKE_CURRENT_SOURCE_DIR}"
3029
"${CMAKE_CURRENT_SOURCE_DIR}/../common/cpp/include"
31-
"${CMAKE_CURRENT_SOURCE_DIR}/../third_party/uuidxx"
3230
"${CMAKE_CURRENT_SOURCE_DIR}/../third_party/libwebrtc/include"
3331
"${CMAKE_CURRENT_SOURCE_DIR}/../third_party/svpng"
3432
)
@@ -39,6 +37,7 @@ set_target_properties(${PLUGIN_NAME} PROPERTIES
3937
target_compile_definitions(${PLUGIN_NAME} PRIVATE FLUTTER_PLUGIN_IMPL)
4038
target_include_directories(${PLUGIN_NAME} INTERFACE
4139
"${CMAKE_CURRENT_SOURCE_DIR}"
40+
"${CMAKE_CURRENT_SOURCE_DIR}/../common/cpp/include"
4241
)
4342
target_link_libraries(${PLUGIN_NAME} PRIVATE
4443
flutter

linux/CMakeLists.txt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ set(CMAKE_CXX_STANDARD 17)
99
add_definitions(-DRTC_DESKTOP_DEVICE)
1010

1111
add_library(${PLUGIN_NAME} SHARED
12-
"../third_party/uuidxx/uuidxx.cc"
1312
"../common/cpp/src/flutter_data_channel.cc"
1413
"../common/cpp/src/flutter_frame_cryptor.cc"
1514
"../common/cpp/src/flutter_media_stream.cc"
@@ -31,7 +30,6 @@ include_directories(
3130
"${CMAKE_CURRENT_SOURCE_DIR}"
3231
"${CMAKE_CURRENT_SOURCE_DIR}/flutter/include"
3332
"${CMAKE_CURRENT_SOURCE_DIR}/../common/cpp/include"
34-
"${CMAKE_CURRENT_SOURCE_DIR}/../third_party/uuidxx"
3533
"${CMAKE_CURRENT_SOURCE_DIR}/../third_party/libwebrtc/include"
3634
"${CMAKE_CURRENT_SOURCE_DIR}/../third_party/svpng"
3735
)
@@ -41,7 +39,10 @@ set_target_properties(${PLUGIN_NAME} PROPERTIES
4139
CXX_VISIBILITY_PRESET hidden)
4240
target_compile_definitions(${PLUGIN_NAME} PRIVATE FLUTTER_PLUGIN_IMPL)
4341
target_include_directories(${PLUGIN_NAME} INTERFACE
44-
"${CMAKE_CURRENT_SOURCE_DIR}")
42+
"${CMAKE_CURRENT_SOURCE_DIR}"
43+
"${CMAKE_CURRENT_SOURCE_DIR}/../common/cpp/include"
44+
"${CMAKE_CURRENT_SOURCE_DIR}/../third_party/libwebrtc/include"
45+
)
4546
target_link_libraries(${PLUGIN_NAME} PRIVATE flutter)
4647
target_link_libraries(${PLUGIN_NAME} PRIVATE PkgConfig::GTK)
4748

linux/stream_webrtc_flutter/flutter_web_r_t_c_plugin.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ G_BEGIN_DECLS
1010
#define FLUTTER_PLUGIN_EXPORT
1111
#endif
1212

13+
namespace stream_webrtc_flutter_plugin {
14+
class FlutterWebRTC;
15+
} // namespace stream_webrtc_flutter_plugin
16+
1317
typedef struct _FlutterWebrtcPlugin FlutterWebrtcPlugin;
1418
typedef struct {
1519
GObjectClass parent_class;
@@ -20,6 +24,8 @@ FLUTTER_PLUGIN_EXPORT GType stream_webrtc_flutter_plugin_get_type();
2024
FLUTTER_PLUGIN_EXPORT void flutter_web_r_t_c_plugin_register_with_registrar(
2125
FlPluginRegistrar* registrar);
2226

27+
FLUTTER_PLUGIN_EXPORT stream_webrtc_flutter_plugin::FlutterWebRTC* flutter_webrtc_plugin_get_shared_instance();
28+
2329
G_END_DECLS
2430

2531
#endif // PLUGINS_FLUTTER_WEBRTC_PLUGIN_CPP_H_

linux/stream_webrtc_flutter_plugin.cc

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
#include "task_runner_linux.h"
66

77
const char* kChannelName = "FlutterWebRTC.Method";
8-
8+
static stream_webrtc_flutter_plugin::FlutterWebRTC* g_shared_instance = nullptr;
99
//#if defined(_WINDOWS)
1010

1111
namespace stream_webrtc_flutter_plugin {
@@ -49,6 +49,7 @@ class FlutterWebRTCPluginImpl : public FlutterWebRTCPlugin {
4949
textures_(registrar->texture_registrar()),
5050
task_runner_(std::make_unique<TaskRunnerLinux>()) {
5151
webrtc_ = std::make_unique<FlutterWebRTC>(this);
52+
g_shared_instance = webrtc_.get();
5253
}
5354

5455
// Called when a method is called on |channel_|;
@@ -75,4 +76,8 @@ void flutter_web_r_t_c_plugin_register_with_registrar(
7576
static auto* plugin_registrar = new flutter::PluginRegistrar(registrar);
7677
stream_webrtc_flutter_plugin::FlutterWebRTCPluginImpl::RegisterWithRegistrar(
7778
plugin_registrar);
78-
}
79+
}
80+
81+
stream_webrtc_flutter_plugin::FlutterWebRTC* flutter_webrtc_plugin_get_shared_instance() {
82+
return g_shared_instance;
83+
}

0 commit comments

Comments
 (0)