diff --git a/common/darwin/Classes/FlutterWebRTCPlugin.m b/common/darwin/Classes/FlutterWebRTCPlugin.m index c19a2d9a56..ce00c282fa 100644 --- a/common/darwin/Classes/FlutterWebRTCPlugin.m +++ b/common/darwin/Classes/FlutterWebRTCPlugin.m @@ -6,12 +6,12 @@ #import "FlutterRTCMediaStream.h" #import "FlutterRTCPeerConnection.h" #import "FlutterRTCVideoRenderer.h" -#import "FlutterRTCMediaRecorder.h" #import "FlutterRTCFrameCryptor.h" #import "VideoEffectProcessor.h" #import "ProcessorProvider.h" #import "VideoFrameProcessor.h" #if TARGET_OS_IPHONE +#import "FlutterRTCMediaRecorder.h" #import "FlutterRTCVideoPlatformViewFactory.h" #import "FlutterRTCVideoPlatformViewController.h" #endif @@ -1529,8 +1529,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"]; @@ -1549,10 +1550,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]; @@ -1564,7 +1562,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/example/lib/src/get_user_media_sample.dart b/example/lib/src/get_user_media_sample.dart index b595b4e2ed..dc1f1b4839 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/ios/stream_webrtc_flutter.podspec b/ios/stream_webrtc_flutter.podspec index d99bb983bf..20b7ecb20c 100644 --- a/ios/stream_webrtc_flutter.podspec +++ b/ios/stream_webrtc_flutter.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 'StreamWebRTC', '125.6422.065' + s.dependency 'StreamWebRTC', '125.6422.070' s.ios.deployment_target = '13.0' s.static_framework = true s.pod_target_xcconfig = { diff --git a/lib/src/media_recorder.dart b/lib/src/media_recorder.dart index 669c6d5935..f9948e76a2 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 '../stream_webrtc_flutter.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/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..89450d0dd6 --- /dev/null +++ b/lib/src/video_renderer_extension.dart @@ -0,0 +1,5 @@ +import 'package:stream_webrtc_flutter/stream_webrtc_flutter.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; diff --git a/lib/stream_webrtc_flutter.dart b/lib/stream_webrtc_flutter.dart index 7201f77efa..b7dd3a8fc6 100644 --- a/lib/stream_webrtc_flutter.dart +++ b/lib/stream_webrtc_flutter.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/macos/stream_webrtc_flutter.podspec b/macos/stream_webrtc_flutter.podspec index b45a2ca7dc..1e8eef7d02 100644 --- a/macos/stream_webrtc_flutter.podspec +++ b/macos/stream_webrtc_flutter.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 diff --git a/pubspec.yaml b/pubspec.yaml index 2220a0d9d5..df9530b05c 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: