Skip to content

Commit 1d9fa0b

Browse files
committed
fix: fix hot restart not work
1 parent 3707553 commit 1d9fa0b

File tree

3 files changed

+23
-4
lines changed

3 files changed

+23
-4
lines changed

lib/src/impl/agora_rtc_engine_impl.dart

+19-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'dart:async';
22
import 'dart:convert';
33
import 'dart:typed_data' show Uint8List;
4+
import 'dart:ffi' as ffi;
45

56
import 'package:agora_rtc_engine/src/agora_base.dart';
67
import 'package:agora_rtc_engine/src/agora_media_base.dart';
@@ -211,6 +212,23 @@ class RtcEngineImpl extends rtc_engine_ex_binding.RtcEngineExImpl
211212

212213
await _globalVideoViewController
213214
.attachVideoFrameBufferManager(irisMethodChannel.getNativeHandle());
215+
216+
irisMethodChannel.addHotRestartListener(_hotRestartListener);
217+
}
218+
219+
void _hotRestartListener(Object? message) {
220+
assert(() {
221+
// Free `IrisVideoFrameBufferManager` when hot restart
222+
final nativeBindingDelegate = IrisApiEngineNativeBindingDelegateProvider()
223+
.provideNativeBindingDelegate()
224+
as NativeIrisApiEngineBindingsDelegate;
225+
nativeBindingDelegate.initialize();
226+
nativeBindingDelegate.binding.FreeIrisVideoFrameBufferManager(
227+
ffi.Pointer.fromAddress(
228+
_globalVideoViewController.videoFrameBufferManagerIntPtr));
229+
230+
return true;
231+
}());
214232
}
215233

216234
@override
@@ -262,7 +280,7 @@ class RtcEngineImpl extends rtc_engine_ex_binding.RtcEngineExImpl
262280

263281
await super.release(sync: sync);
264282

265-
// await apiCaller.disposeAsync();
283+
irisMethodChannel.removeHotRestartListener(_hotRestartListener);
266284

267285
await irisMethodChannel.dispose();
268286
_instance = null;

lib/src/impl/native_iris_api_engine_binding_delegate.dart

+3-2
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ ffi.DynamicLibrary _loadLib() {
2727

2828
class NativeIrisApiEngineBindingsDelegate extends NativeBindingDelegate {
2929
late final bindings.NativeIrisApiEngineBinding _binding;
30+
bindings.NativeIrisApiEngineBinding get binding => _binding;
3031

3132
@override
3233
void initialize() {
@@ -173,9 +174,9 @@ class NativeIrisApiEngineBindingsDelegate extends NativeBindingDelegate {
173174
}
174175

175176
class IrisApiEngineNativeBindingDelegateProvider
176-
implements NativeBindingDelegateProvider {
177+
extends NativeBindingsProvider {
177178
@override
178-
NativeBindingDelegate provide() {
179+
NativeBindingDelegate provideNativeBindingDelegate() {
179180
return NativeIrisApiEngineBindingsDelegate();
180181
}
181182
}

pubspec.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ dependencies:
1717
ffi: '>=1.1.2'
1818
async: ^2.8.2
1919
meta: ^1.7.0
20-
iris_method_channel: ^1.0.0
20+
iris_method_channel: ^1.1.0-rc.2
2121
dev_dependencies:
2222
flutter_test:
2323
sdk: flutter

0 commit comments

Comments
 (0)