From 05371ec3e308c03cd6670e9de2c321d709333c70 Mon Sep 17 00:00:00 2001 From: cloudwebrtc Date: Wed, 30 Apr 2025 17:56:38 +0800 Subject: [PATCH 1/5] release: 0.13.2+hotfix.1. --- CHANGELOG.md | 4 ++++ common/darwin/Classes/FlutterWebRTCPlugin.m | 10 ++++------ pubspec.yaml | 2 +- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cfdc505205..732a035468 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,10 @@ # Changelog +[0.13.2+hotfix.1] - 2025-04-30 + +* [macOS] fix: Fixed compilation errors introduced by Media Recorder implementation. + [0.13.2] - 2025-04-29 * [iOS/Android]feat: Media Recorder implementation Android and iOS (#1810) diff --git a/common/darwin/Classes/FlutterWebRTCPlugin.m b/common/darwin/Classes/FlutterWebRTCPlugin.m index 6a4749d9db..73f01aebe1 100644 --- a/common/darwin/Classes/FlutterWebRTCPlugin.m +++ b/common/darwin/Classes/FlutterWebRTCPlugin.m @@ -6,9 +6,9 @@ #import "FlutterRTCMediaStream.h" #import "FlutterRTCPeerConnection.h" #import "FlutterRTCVideoRenderer.h" -#import "FlutterRTCMediaRecorder.h" #import "FlutterRTCFrameCryptor.h" #if TARGET_OS_IPHONE +#import "FlutterRTCMediaRecorder.h" #import "FlutterRTCVideoPlatformViewFactory.h" #import "FlutterRTCVideoPlatformViewController.h" #endif @@ -1507,8 +1507,9 @@ - (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result { message:[NSString stringWithFormat:@"Error: peerConnection not found!"] details:nil]); } +#if TARGET_OS_IOS } else if ([@"startRecordToFile" isEqualToString:call.method]){ - #if TARGET_OS_IOS + NSDictionary* argsMap = call.arguments; NSNumber* recorderId = argsMap[@"recorderId"]; NSString* path = argsMap[@"path"]; @@ -1527,10 +1528,7 @@ - (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result { ]; } result(nil); - #endif - } else if ([@"stopRecordToFile" isEqualToString:call.method]) { - #if TARGET_OS_IOS NSDictionary* argsMap = call.arguments; NSNumber* recorderId = argsMap[@"recorderId"]; FlutterRTCMediaRecorder* recorder = self.recorders[recorderId]; @@ -1542,7 +1540,7 @@ - (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result { message:[NSString stringWithFormat:@"Error: recorder with id %@ not found!",recorderId] details:nil]); } - #endif +#endif } else { [self handleFrameCryptorMethodCall:call result:result]; } diff --git a/pubspec.yaml b/pubspec.yaml index 62677b5477..f6b12797a2 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: flutter_webrtc description: Flutter WebRTC plugin for iOS/Android/Destkop/Web, based on GoogleWebRTC. -version: 0.13.2 +version: 0.13.2+hotfix.1 homepage: https://github.com/cloudwebrtc/flutter-webrtc environment: sdk: ">=3.3.0 <4.0.0" From eecab98f3f3fc8b5b6abbb7f9dfe1ff9d8221602 Mon Sep 17 00:00:00 2001 From: CloudWebRTC Date: Tue, 6 May 2025 10:39:36 +0800 Subject: [PATCH 2/5] bump version for WebRTC.framework. (#1827) --- ios/flutter_webrtc.podspec | 2 +- macos/flutter_webrtc.podspec | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ios/flutter_webrtc.podspec b/ios/flutter_webrtc.podspec index 379bae55dd..faef2067d9 100644 --- a/ios/flutter_webrtc.podspec +++ b/ios/flutter_webrtc.podspec @@ -15,7 +15,7 @@ A new flutter plugin project. s.source_files = 'Classes/**/*' s.public_header_files = 'Classes/**/*.h' s.dependency 'Flutter' - s.dependency 'WebRTC-SDK', '125.6422.06' + s.dependency 'WebRTC-SDK', '125.6422.07' s.ios.deployment_target = '13.0' s.static_framework = true s.pod_target_xcconfig = { diff --git a/macos/flutter_webrtc.podspec b/macos/flutter_webrtc.podspec index d8e96f3d2a..fb48d590e2 100644 --- a/macos/flutter_webrtc.podspec +++ b/macos/flutter_webrtc.podspec @@ -15,6 +15,6 @@ A new flutter plugin project. s.source_files = ['Classes/**/*'] s.dependency 'FlutterMacOS' - s.dependency 'WebRTC-SDK', '125.6422.06' + s.dependency 'WebRTC-SDK', '125.6422.07' s.osx.deployment_target = '10.14' end From d33dd89858daf555865f8702b53550461bc5388e Mon Sep 17 00:00:00 2001 From: cloudwebrtc Date: Tue, 6 May 2025 11:57:30 +0800 Subject: [PATCH 3/5] revert destructive changes. --- example/lib/src/get_user_media_sample.dart | 4 ++-- lib/src/media_recorder.dart | 13 ++++++++++--- lib/src/native/media_recorder_impl.dart | 8 ++++++-- pubspec.yaml | 4 ++-- 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/example/lib/src/get_user_media_sample.dart b/example/lib/src/get_user_media_sample.dart index e02e65dd37..9c2dea81d0 100644 --- a/example/lib/src/get_user_media_sample.dart +++ b/example/lib/src/get_user_media_sample.dart @@ -125,7 +125,7 @@ class _GetUserMediaSampleState extends State { if (await file.exists()) { await file.delete(); } - _mediaRecorder = MediaRecorder(); + _mediaRecorder = MediaRecorder(albumName: 'FlutterWebRTC'); setState(() {}); final videoTrack = _localStream! @@ -145,7 +145,7 @@ class _GetUserMediaSampleState extends State { } // album name works only for android, for ios use gallerySaver - await _mediaRecorder?.stop(albumName: 'FlutterWebRTC'); + await _mediaRecorder?.stop(); setState(() { _mediaRecorder = null; }); diff --git a/lib/src/media_recorder.dart b/lib/src/media_recorder.dart index 2295dd353e..370cfa9c78 100644 --- a/lib/src/media_recorder.dart +++ b/lib/src/media_recorder.dart @@ -1,9 +1,17 @@ +import 'package:flutter/foundation.dart'; + import 'package:webrtc_interface/webrtc_interface.dart' as rtc; import '../flutter_webrtc.dart'; +import 'native/media_recorder_impl.dart' show MediaRecorderNative; class MediaRecorder extends rtc.MediaRecorder { - MediaRecorder() : _delegate = mediaRecorder(); + MediaRecorder({ + String? albumName, + }) : _delegate = (kIsWeb || kIsWasm) + ? mediaRecorder() + : MediaRecorderNative(albumName: albumName); + final rtc.MediaRecorder _delegate; @override @@ -21,8 +29,7 @@ class MediaRecorder extends rtc.MediaRecorder { } @override - Future stop({String? albumName}) => - _delegate.stop(albumName: albumName ?? "FlutterWebRtc"); + Future stop() => _delegate.stop(); @override void startWeb( diff --git a/lib/src/native/media_recorder_impl.dart b/lib/src/native/media_recorder_impl.dart index 795e4c2127..15f4ae22dd 100644 --- a/lib/src/native/media_recorder_impl.dart +++ b/lib/src/native/media_recorder_impl.dart @@ -7,9 +7,13 @@ import 'media_stream_track_impl.dart'; import 'utils.dart'; class MediaRecorderNative extends MediaRecorder { + MediaRecorderNative({ + String? albumName = 'FlutterWebRTC', + }) : _albumName = albumName; static final _random = Random(); final _recorderId = _random.nextInt(0x7FFFFFFF); var _isStarted = false; + final String? _albumName; @override Future start( @@ -42,13 +46,13 @@ class MediaRecorderNative extends MediaRecorder { } @override - Future stop({String? albumName}) async { + Future stop() async { if (!_isStarted) { throw "Media recorder not started!"; } return await WebRTC.invokeMethod('stopRecordToFile', { 'recorderId': _recorderId, - 'albumName': albumName, + 'albumName': _albumName, }); } } diff --git a/pubspec.yaml b/pubspec.yaml index f6b12797a2..5de47aa63a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -8,12 +8,12 @@ environment: dependencies: collection: ^1.17.0 - dart_webrtc: ^1.5.4 + dart_webrtc: ^1.5.3+hotfix.2 flutter: sdk: flutter path_provider: ^2.0.2 web: ^1.0.0 - webrtc_interface: ^1.2.3 + webrtc_interface: ^1.2.2+hotfix.2 dev_dependencies: flutter_test: From 3933d054d80367d4c8926c1abbf82dc09f194537 Mon Sep 17 00:00:00 2001 From: cloudwebrtc Date: Tue, 6 May 2025 12:10:21 +0800 Subject: [PATCH 4/5] move RTCVideoRenderer.videoValue to VideoRendererExtension. --- lib/flutter_webrtc.dart | 1 + lib/src/native/rtc_video_platform_view_controller.dart | 3 --- lib/src/native/rtc_video_renderer_impl.dart | 3 --- lib/src/video_renderer_extension.dart | 5 +++++ lib/src/web/rtc_video_renderer_impl.dart | 3 --- 5 files changed, 6 insertions(+), 9 deletions(-) create mode 100644 lib/src/video_renderer_extension.dart diff --git a/lib/flutter_webrtc.dart b/lib/flutter_webrtc.dart index 7201f77efa..b7dd3a8fc6 100644 --- a/lib/flutter_webrtc.dart +++ b/lib/flutter_webrtc.dart @@ -7,6 +7,7 @@ export 'src/helper.dart'; export 'src/desktop_capturer.dart'; export 'src/media_devices.dart'; export 'src/media_recorder.dart'; +export 'src/video_renderer_extension.dart'; export 'src/native/factory_impl.dart' if (dart.library.js_interop) 'src/web/factory_impl.dart'; export 'src/native/rtc_video_renderer_impl.dart' diff --git a/lib/src/native/rtc_video_platform_view_controller.dart b/lib/src/native/rtc_video_platform_view_controller.dart index 6cb2a33b87..e9eeb1d51c 100644 --- a/lib/src/native/rtc_video_platform_view_controller.dart +++ b/lib/src/native/rtc_video_platform_view_controller.dart @@ -32,9 +32,6 @@ class RTCVideoPlatformViewController extends ValueNotifier @override int get videoHeight => value.height.toInt(); - @override - RTCVideoValue get videoValue => value; - @override int? get textureId => _viewId; diff --git a/lib/src/native/rtc_video_renderer_impl.dart b/lib/src/native/rtc_video_renderer_impl.dart index ba050c6e80..c2a46cba75 100644 --- a/lib/src/native/rtc_video_renderer_impl.dart +++ b/lib/src/native/rtc_video_renderer_impl.dart @@ -38,9 +38,6 @@ class RTCVideoRenderer extends ValueNotifier @override int get videoHeight => value.height.toInt(); - @override - RTCVideoValue get videoValue => value; - @override int? get textureId => _textureId; diff --git a/lib/src/video_renderer_extension.dart b/lib/src/video_renderer_extension.dart new file mode 100644 index 0000000000..fa8b7ac78b --- /dev/null +++ b/lib/src/video_renderer_extension.dart @@ -0,0 +1,5 @@ +import 'package:flutter_webrtc/flutter_webrtc.dart'; + +extension VideoRendererExtension on RTCVideoRenderer { + RTCVideoValue get videoValue => value; +} diff --git a/lib/src/web/rtc_video_renderer_impl.dart b/lib/src/web/rtc_video_renderer_impl.dart index 70580fc717..69df097e0c 100644 --- a/lib/src/web/rtc_video_renderer_impl.dart +++ b/lib/src/web/rtc_video_renderer_impl.dart @@ -71,9 +71,6 @@ class RTCVideoRenderer extends ValueNotifier @override int get videoHeight => value.height.toInt(); - @override - RTCVideoValue get videoValue => value; - @override int get textureId => _textureId; From dfead5d869f4e1a5a5e59b3a0372b533a835b121 Mon Sep 17 00:00:00 2001 From: cloudwebrtc Date: Tue, 6 May 2025 12:27:20 +0800 Subject: [PATCH 5/5] release: 0.14.0. --- CHANGELOG.md | 7 ++----- ios/flutter_webrtc.podspec | 2 +- macos/flutter_webrtc.podspec | 2 +- pubspec.yaml | 2 +- 4 files changed, 5 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 732a035468..f319b025a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,15 +1,12 @@ # Changelog -[0.13.2+hotfix.1] - 2025-04-30 - -* [macOS] fix: Fixed compilation errors introduced by Media Recorder implementation. - -[0.13.2] - 2025-04-29 +[0.14.0] - 2025-05-06 * [iOS/Android]feat: Media Recorder implementation Android and iOS (#1810) * [Wndows] fix: Pickup registrar for plugin by plugin registrar manager (#1752) * [Linux] fix: add task runner for linux. (#1821) +* [iOS/macOS] fix: Fix deadlock when creating a frame cryptor on iOS/macOS. [0.13.1+hotfix.1] - 2025-04-07 diff --git a/ios/flutter_webrtc.podspec b/ios/flutter_webrtc.podspec index faef2067d9..778368a8a0 100644 --- a/ios/flutter_webrtc.podspec +++ b/ios/flutter_webrtc.podspec @@ -3,7 +3,7 @@ # Pod::Spec.new do |s| s.name = 'flutter_webrtc' - s.version = '0.12.6' + s.version = '0.14.0' s.summary = 'Flutter WebRTC plugin for iOS.' s.description = <<-DESC A new flutter plugin project. diff --git a/macos/flutter_webrtc.podspec b/macos/flutter_webrtc.podspec index fb48d590e2..7baf7ea75f 100644 --- a/macos/flutter_webrtc.podspec +++ b/macos/flutter_webrtc.podspec @@ -3,7 +3,7 @@ # Pod::Spec.new do |s| s.name = 'flutter_webrtc' - s.version = '0.12.6' + s.version = '0.14.0' s.summary = 'Flutter WebRTC plugin for macOS.' s.description = <<-DESC A new flutter plugin project. diff --git a/pubspec.yaml b/pubspec.yaml index 5de47aa63a..e3e380b6f5 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: flutter_webrtc description: Flutter WebRTC plugin for iOS/Android/Destkop/Web, based on GoogleWebRTC. -version: 0.13.2+hotfix.1 +version: 0.14.0 homepage: https://github.com/cloudwebrtc/flutter-webrtc environment: sdk: ">=3.3.0 <4.0.0"