Skip to content

Enabling local preview for screen sharing on Flutter windows will report an error #2312

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
1 of 5 tasks
liangzaifankun opened this issue May 14, 2025 · 3 comments
Closed
1 of 5 tasks
Labels
waiting for customer response waiting for customer response, or closed by no-reponse bot

Comments

@liangzaifankun
Copy link

Version of the agora_rtc_engine

6.5.0

Platforms affected

  • Android
  • iOS
  • macOS
  • Windows
  • Web

Steps to reproduce

engine = createAgoraRtcEngineEx();

await engine.initialize(RtcEngineContext(
  appId: appId,
  channelProfile: ChannelProfileType.channelProfileLiveBroadcasting,
));
await engine.setLogLevel(LogLevel.logLevelError);
engine.registerEventHandler(_rtcEngineEventHandler);

await engine.enableVideo();
await engine.setClientRole(role: ClientRoleType.clientRoleBroadcaster);
await engine
    .setScreenCaptureScenario(ScreenScenarioType.screenScenarioGaming);

await LastmileProbeTest();
isReadyPreview.value = true;

await engine.startPreview(
sourceType: VideoSourceType.videoSourceScreen);

AgoraVideoView(
controller: VideoViewController(
rtcEngine: logic.screenCallController.engine,
canvas: const VideoCanvas(
uid: 0,
sourceType: VideoSourceType.videoSourceScreen,
renderMode: RenderModeType.renderModeFit,
),
)),

Expected results

Normal operation

Actual results

[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: MissingPluginException(No implementation found for method createTextureRender on channel agora_rtc_ng/video_view_controller)
#0 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:332:7)

#1 GlobalVideoViewControllerIO.createTextureRender (package:agora_rtc_engine/src/impl/platform/io/global_video_view_controller_platform_io.dart:87:9)

#2 VideoViewControllerBaseMixin.createTextureRender (package:agora_rtc_engine/src/impl/video_view_controller_impl.dart:146:9)

#3 VideoViewControllerBaseMixin.initializeRender (package:agora_rtc_engine/src/impl/video_view_controller_impl.dart:160:22)

#4 _VideoViewControllerInternal.initializeRender (package:agora_rtc_engine/src/impl/agora_video_view_impl.dart:269:5)

#5 _AgoraRtcRenderTextureState._initializeTexture (package:agora_rtc_engine/src/impl/agora_video_view_impl.dart:333:5)

#6 _AgoraRtcRenderTextureState._initialize (package:agora_rtc_engine/src/impl/agora_video_view_impl.dart:323:7)

Code sample

AgoraVideoView( controller: VideoViewController( rtcEngine: logic.screenCallController.engine, canvas: const VideoCanvas( uid: 0, sourceType: VideoSourceType.videoSourceScreen, renderMode: RenderModeType.renderModeFit, ), )),

Screenshots or Video

Screenshots / Video demonstration

[Upload media here]

Logs

Logs
[Paste your logs here]

Flutter Doctor output

Doctor output
[Paste your output here]
@liangzaifankun
Copy link
Author

I used the desktop_multi_window plugin. The child window could run normally when opened for the first time, but not when opened for the second time

@peilinok
Copy link
Contributor

@liangzaifankun It seems like the method_channel have not been ready yet when you create the child window, would you please provide a minimal project to reproduce this issue?

@peilinok peilinok added the waiting for customer response waiting for customer response, or closed by no-reponse bot label May 16, 2025
@liangzaifankun
Copy link
Author

@liangzaifankun It seems like the method_channel have not been ready yet when you create the child window, would you please provide a minimal project to reproduce this issue?

I’ve found the root cause.

The issue was caused by my plugin registration logic in flutter_windows.cpp. I mistakenly put the AgoraRtcEnginePluginRegisterWithRegistrar call inside the if (!registered) block, which prevented the Agora plugin from being properly registered in child windows created by desktop_multi_window.

Here’s the corrected version of the code (notice that the Agora plugin is now registered outside the if (!registered) block):

DesktopMultiWindowSetWindowCreatedCallback([](void *controller) {
static bool registered = false;
auto *flutter_view_controller = reinterpret_cast<flutter::FlutterViewController *>(controller);
auto *registry = flutter_view_controller->engine();
if (!registered) {
ScreenRetrieverWindowsPluginCApiRegisterWithRegistrar(
registry->GetRegistrarForPlugin("ScreenRetrieverWindowsPluginCApi"));
AudioplayersWindowsPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("AudioplayersWindowsPlugin"));
registered = true;
}

AgoraRtcEnginePluginRegisterWithRegistrar(
    registry->GetRegistrarForPlugin("AgoraRtcEnginePlugin"));
WindowManagerPluginRegisterWithRegistrar(
    registry->GetRegistrarForPlugin("WindowManagerPlugin"));

});
After this change, Agora SDK now works correctly in sub-windows. Hope this helps anyone who runs into similar problems.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
waiting for customer response waiting for customer response, or closed by no-reponse bot
Projects
None yet
Development

No branches or pull requests

2 participants