You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求flutter_webrtc屏幕共享实现方案及相关文档支持

基于flutter_webrtc实现通话中屏幕共享(Android/iOS)

一、权限与系统配置

Android 端

  1. 在AndroidManifest.xml中添加必要权限:
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL" />
    
  2. 针对 Android 10+,需动态申请媒体投影权限:通过MediaProjectionManager启动系统授权界面,获取MediaProjection实例后才能创建屏幕流。

iOS 端

  1. 在Info.plist中添加权限描述:
    <key>NSCameraUsageDescription</key>
    <string>需要访问摄像头进行通话</string>
    <key>NSMicrophoneUsageDescription</key>
    <string>需要访问麦克风进行通话</string>
    <key>NSScreenCaptureUsageDescription</key>
    <string>需要录制屏幕进行共享</string>
    
  2. 开启项目Background Modes中的Audio, AirPlay, and Picture in Picture选项,保证通话后台运行稳定性。

二、核心代码实现

1. 获取屏幕共享媒体流

Android 端示例

// 获取MediaProjectionManager实例
final mediaProjectionManager = AndroidMediaProjectionManager();
// 启动系统屏幕捕获授权界面
final result = await mediaProjectionManager.requestScreenCapture();
if (result != null) {
  // 创建屏幕媒体流
  final screenStream = await createMediaStream('screen');
  // 添加屏幕视频轨道
  await screenStream.addTrack(await createVideoTrack('screen', MediaConstraints(
    mandatory: {
      'mediaProjectionId': result.toString(),
    },
  )));
}

iOS 端示例

// 直接调用API获取屏幕流
final screenStream = await navigator.mediaDevices.getDisplayMedia({
  'video': true,
  'audio': false, // 如需共享系统音频需额外配置
});

2. 集成到现有通话链路

假设已通过PeerConnection建立基础通话,替换或添加屏幕流到通话中:

// 停止原有摄像头视频轨道(按需操作)
if (_localVideoTrack != null) {
  await _localVideoTrack!.stop();
  await _peerConnection.removeTrack(_localVideoSender!);
}

// 获取屏幕流的视频轨道
final screenVideoTrack = screenStream.getVideoTracks()[0];
// 将屏幕轨道添加到PeerConnection
_localVideoSender = await _peerConnection.addTrack(screenVideoTrack, screenStream);

// 更新本地渲染画面
_localRenderer.srcObject = screenStream;

三、关键注意事项

  • Android 屏幕共享必须启动前台服务,否则系统会在后台终止共享进程,需在创建屏幕流前启动前台通知。
  • iOS 系统音频共享仅支持 iOS 14+,需额外配置AVAudioSession,普通场景建议关闭避免与通话音频冲突。
  • 屏幕共享功能仅支持真机测试,模拟器无法提供相关能力。
  • 切换回摄像头视频时,需反向操作:停止屏幕轨道,重新添加摄像头轨道并更新渲染。

内容的提问来源于stack exchange,提问作者Sagar R Anghan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 04:21:13