【问题标题】:Flutter Agora.io calling screenFlutter Agora.io 调用界面
【发布时间】:2019-12-15 12:39:29
【问题描述】:

我想像 Messenger (Facebook) 一样添加应用内(视频)通话。当一方创建频道而另一方加入时,它会起作用。

但是有没有一种方法可以创建 B 方可以接听或拒绝通话的通话屏幕?我正在查看 Agora.io 文档,但找不到任何适合此的内容。

这是我的代码...

 Future<void> initialize() async {
    if (APP_ID.isEmpty) {
      setState(() {
        _infoStrings.add(
          'APP_ID missing, please provide your APP_ID in settings.dart',
        );
        _infoStrings.add('Agora Engine is not starting');
      });
      return;
    }

    await _initAgoraRtcEngine();
    _addAgoraEventHandlers();
    await AgoraRtcEngine.enableWebSdkInteroperability(true);
    await AgoraRtcEngine.setParameters('''
{\"che.video.lowBitRateStreamParameter\":{\"width\":320,\"height\":180,\"frameRate\":15,\"bitRate\":140}}''');
    await AgoraRtcEngine.joinChannel(null, 'Test', null, 0);
  }

  Future<void> _initAgoraRtcEngine() async {
    AgoraRtcEngine.create(APP_ID);
    AgoraRtcEngine.enableVideo();
  }

  void _addAgoraEventHandlers() {
    AgoraRtcEngine.onError = (dynamic code) {
      setState(() {
        final info = 'onError: $code';
        _infoStrings.add(info);
      });
    };

    AgoraRtcEngine.onJoinChannelSuccess = (
      String channel,
      int uid,
      int elapsed,
    ) {
      setState(() {
        final info = 'onJoinChannel: $channel, uid: $uid';
        _infoStrings.add(info);
      });
    };

    AgoraRtcEngine.onLeaveChannel = () {
      setState(() {
        _infoStrings.add('onLeaveChannel');
        _users.clear();
      });
    };

    AgoraRtcEngine.onUserJoined = (int uid, int elapsed) {
      setState(() {
        final info = 'userJoined: $uid';
        _infoStrings.add(info);
        _users.add(uid);
      });
    };

    AgoraRtcEngine.onUserOffline = (int uid, int reason) {
      setState(() {
        final info = 'userOffline: $uid';
        _infoStrings.add(info);
        _users.remove(uid);
      });
    };

    AgoraRtcEngine.onFirstRemoteVideoFrame = (
      int uid,
      int width,
      int height,
      int elapsed,
    ) {
      setState(() {
        final info = 'firstRemoteVideo: $uid ${width}x $height';
        _infoStrings.add(info);
      });
    };
  } 

【问题讨论】:

标签: flutter agora.io


【解决方案1】:

在这种情况下,您需要将 channelId 推送到其他用户手机。 CS Guy 在您的电子管上创建了非常有用的视频来实现此步骤以及呼叫屏幕。

https://www.youtube.com/watch?v=v9ngriCV0J0

【讨论】:

    【解决方案2】:

    Android 需要使用 Native ConnectionService,iOS 需要使用 Callkit

    您可以在此处找到上述功能的官方 Agora 示例:https://github.com/AgoraIO/Advanced-Video/tree/master/Calling-Interface,但我认为 Agora 在 Flutter 中没有调用接口示例,您现在必须自己编写包装器。

    【讨论】:

    【解决方案3】:

    widget.chatRoomId 是您为这两个用户创建聊天室时为他们指定的 ID。

    Future<void> onJoin() async {
    // update input validation
    
      if (widget.chatRoomId.isNotEmpty) {
        // await for camera and mic permissions before pushing video page
        await _handleCameraAndMic();
        // push video page with given channel name
        await Navigator.push(
          context,
          MaterialPageRoute(
            builder: (context) => CallPage(
              channelName: widget.chatRoomId,
              // TODO: set to _role
              role: ClientRole.Broadcaster,
            ),
          ),
        );
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-07-22
      • 2022-08-06
      • 2023-02-15
      • 2018-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-05
      • 2020-03-23
      相关资源
      最近更新 更多